{"version":3,"file":"pages/BundleSize/components/search-modal.mjs","sources":["../../../../src/pages/BundleSize/components/search-modal.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport {\n  Button,\n  Modal,\n  Input,\n  Tabs,\n  List,\n  Skeleton,\n  Typography,\n  Empty,\n} from 'antd';\nimport { SearchProps } from 'antd/es/input';\nimport { ServerAPIProvider } from 'src/components';\nimport { SDK } from '@rsdoctor/types';\nimport styles from './search-modal.module.scss';\nimport { SearchOutlined } from '@ant-design/icons';\n\nconst { Search } = Input;\n\ntype OnSearchParams = Parameters<NonNullable<SearchProps['onSearch']>>;\n\nexport const SearchModal: React.FC<{\n  onModuleClick?: (module: any) => void;\n  onClose?: () => void;\n  open?: boolean;\n  setOpen?: (open: boolean) => void;\n  isIcon?: boolean;\n}> = ({\n  onModuleClick = undefined,\n  onClose,\n  open,\n  setOpen,\n  isIcon = false,\n}) => {\n  const [isModalOpen, setIsModalOpen] = useState(false);\n  const [searchModule, setSearchModule] = useState('');\n  const [searchChunk, setSearchChunk] = useState('');\n\n  const modalOpen = open !== undefined ? open : isModalOpen;\n  const setModalOpen = setOpen || setIsModalOpen;\n\n  const onSearch: SearchProps['onSearch'] = useCallback(\n    (...args: OnSearchParams) => {\n      const [value, _event] = args;\n      setSearchModule(value);\n    },\n    [],\n  );\n\n  const showModal = () => {\n    setModalOpen(true);\n  };\n\n  const handleOk = () => {\n    setModalOpen(false);\n    onClose?.();\n  };\n\n  const handleCancel = () => {\n    setModalOpen(false);\n    onClose?.();\n  };\n\n  return (\n    <>\n      {isIcon ? (\n        <SearchOutlined onClick={showModal} />\n      ) : (\n        <Button className={styles.searchBtn} color=\"cyan\" onClick={showModal}>\n          Search Module\n        </Button>\n      )}\n\n      <ServerAPIProvider\n        api={SDK.ServerAPI.API.GetSearchModules}\n        body={{ moduleName: String(searchModule) }}\n      >\n        {(assetsChunksList) => {\n          const defaultChunkId = Object.keys(assetsChunksList)[0];\n          return (\n            <>\n              <Modal\n                className={styles.modal}\n                title=\"Search Modules\"\n                onOk={handleOk}\n                onCancel={handleCancel}\n                open={modalOpen}\n                width={'65rem'}\n                footer=\"\"\n              >\n                <Search\n                  placeholder=\"input search module name\"\n                  allowClear\n                  onSearch={onSearch}\n                  style={{ width: 500 }}\n                />\n                {defaultChunkId ? (\n                  <Tabs\n                    defaultActiveKey={defaultChunkId}\n                    tabPosition={'top'}\n                    onChange={(value) => setSearchChunk(value)}\n                    items={Object.keys(assetsChunksList).map((chunk, _i) => {\n                      const id = chunk;\n                      return {\n                        label: assetsChunksList[chunk],\n                        key: id,\n                        children: ModulesModal(\n                          searchModule,\n                          searchChunk || defaultChunkId,\n                          (item) => {\n                            onModuleClick?.(item);\n                            setModalOpen(false);\n                            onClose?.();\n                          },\n                        ),\n                      };\n                    })}\n                  />\n                ) : (\n                  <Empty description={'No modules found.'} />\n                )}\n              </Modal>\n            </>\n          );\n        }}\n      </ServerAPIProvider>\n    </>\n  );\n};\n\nconst ModulesModal = (\n  searchModule: string,\n  chunk: string,\n  onModuleClick?: (module: any) => void | undefined,\n) => {\n  return (\n    <ServerAPIProvider\n      api={SDK.ServerAPI.API.GetSearchModuleInChunk}\n      body={{ moduleName: String(searchModule), chunk }}\n    >\n      {(modules) => (\n        <>\n          {modules?.length !== 0 ? (\n            <List\n              className={styles.list}\n              loading={!modules.length}\n              itemLayout=\"horizontal\"\n              pagination={{ position: 'bottom', align: 'center' }}\n              dataSource={modules}\n              renderItem={(item) => {\n                const itemPathArr = item.relativePath.split(searchModule);\n                return (\n                  <List.Item\n                    className={onModuleClick && styles.listItemInteractive}\n                    key={`${item.path}-${item.relativePath}`}\n                    onClick={\n                      onModuleClick ? () => onModuleClick(item) : undefined\n                    }\n                  >\n                    <Skeleton avatar title={false} loading={!item.path} active>\n                      <List.Item.Meta\n                        key={`${item.path}-${item.relativePath}-meta`}\n                        description={\n                          <>\n                            <Typography.Text code>{'Module:'}</Typography.Text>\n                            {itemPathArr.map((cur, index) => {\n                              if (index < itemPathArr.length - 1) {\n                                return (\n                                  <Typography.Text\n                                    key={`${cur}-${index}`}\n                                    style={{ fontWeight: 200 }}\n                                  >\n                                    {cur}\n                                    <Typography.Text\n                                      strong\n                                      key={`${cur}-${index}-strong`}\n                                      style={{ fontWeight: 600 }}\n                                    >\n                                      {searchModule}\n                                    </Typography.Text>\n                                  </Typography.Text>\n                                );\n                              }\n                              return (\n                                <Typography.Text style={{ fontWeight: 200 }}>\n                                  {cur}\n                                </Typography.Text>\n                              );\n                            })}\n                          </>\n                        }\n                      />\n                    </Skeleton>\n                  </List.Item>\n                );\n              }}\n            />\n          ) : (\n            <Empty />\n          )}\n        </>\n      )}\n    </ServerAPIProvider>\n  );\n};\n"],"names":["Search","Input","SearchModal","onModuleClick","onClose","open","setOpen","isIcon","isModalOpen","setIsModalOpen","useState","searchModule","setSearchModule","searchChunk","setSearchChunk","modalOpen","undefined","setModalOpen","onSearch","useCallback","args","value","_event","showModal","handleOk","handleCancel","SearchOutlined","Button","styles","ServerAPIProvider","SDK","String","assetsChunksList","defaultChunkId","Object","Modal","Tabs","chunk","_i","id","ModulesModal","item","Empty","modules","List","itemPathArr","Skeleton","Typography","cur","index"],"mappings":"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"}