|
import { useSelectFileList } from '@/hooks/fileManagerHooks'; |
|
import { IFile } from '@/interfaces/database/file-manager'; |
|
import { formatDate } from '@/utils/date'; |
|
import { Button, Flex, Space, Table, Tag, Typography } from 'antd'; |
|
import { ColumnsType } from 'antd/es/table'; |
|
import ActionCell from './action-cell'; |
|
import FileToolbar from './file-toolbar'; |
|
import { |
|
useGetFilesPagination, |
|
useGetRowSelection, |
|
useHandleConnectToKnowledge, |
|
useHandleCreateFolder, |
|
useHandleUploadFile, |
|
useNavigateToOtherFolder, |
|
useRenameCurrentFile, |
|
useSelectFileListLoading, |
|
} from './hooks'; |
|
|
|
import FileUploadModal from '@/components/file-upload-modal'; |
|
import RenameModal from '@/components/rename-modal'; |
|
import SvgIcon from '@/components/svg-icon'; |
|
import { useTranslate } from '@/hooks/commonHooks'; |
|
import { formatNumberWithThousandsSeparator } from '@/utils/commonUtil'; |
|
import { getExtension } from '@/utils/documentUtils'; |
|
import ConnectToKnowledgeModal from './connect-to-knowledge-modal'; |
|
import FolderCreateModal from './folder-create-modal'; |
|
import styles from './index.less'; |
|
|
|
const { Text } = Typography; |
|
|
|
const FileManager = () => { |
|
const { t } = useTranslate('fileManager'); |
|
const fileList = useSelectFileList(); |
|
const { rowSelection, setSelectedRowKeys } = useGetRowSelection(); |
|
const loading = useSelectFileListLoading(); |
|
const navigateToOtherFolder = useNavigateToOtherFolder(); |
|
const { |
|
fileRenameVisible, |
|
fileRenameLoading, |
|
hideFileRenameModal, |
|
showFileRenameModal, |
|
initialFileName, |
|
onFileRenameOk, |
|
} = useRenameCurrentFile(); |
|
const { |
|
folderCreateModalVisible, |
|
showFolderCreateModal, |
|
hideFolderCreateModal, |
|
folderCreateLoading, |
|
onFolderCreateOk, |
|
} = useHandleCreateFolder(); |
|
const { |
|
fileUploadVisible, |
|
hideFileUploadModal, |
|
showFileUploadModal, |
|
fileUploadLoading, |
|
onFileUploadOk, |
|
} = useHandleUploadFile(); |
|
const { |
|
connectToKnowledgeVisible, |
|
hideConnectToKnowledgeModal, |
|
showConnectToKnowledgeModal, |
|
onConnectToKnowledgeOk, |
|
initialValue, |
|
connectToKnowledgeLoading, |
|
} = useHandleConnectToKnowledge(); |
|
const { pagination } = useGetFilesPagination(); |
|
|
|
const columns: ColumnsType<IFile> = [ |
|
{ |
|
title: t('name'), |
|
dataIndex: 'name', |
|
key: 'name', |
|
fixed: 'left', |
|
render(value, record) { |
|
return ( |
|
<Flex gap={10} align="center"> |
|
<SvgIcon |
|
name={`file-icon/${record.type === 'folder' ? 'folder' : getExtension(value)}`} |
|
width={24} |
|
></SvgIcon> |
|
{record.type === 'folder' ? ( |
|
<Button |
|
type={'link'} |
|
className={styles.linkButton} |
|
onClick={() => navigateToOtherFolder(record.id)} |
|
> |
|
<Text ellipsis={{ tooltip: value }}>{value}</Text> |
|
</Button> |
|
) : ( |
|
<Text ellipsis={{ tooltip: value }}>{value}</Text> |
|
)} |
|
</Flex> |
|
); |
|
}, |
|
}, |
|
{ |
|
title: t('uploadDate'), |
|
dataIndex: 'create_time', |
|
key: 'create_time', |
|
render(text) { |
|
return formatDate(text); |
|
}, |
|
}, |
|
{ |
|
title: t('size'), |
|
dataIndex: 'size', |
|
key: 'size', |
|
render(value) { |
|
return ( |
|
formatNumberWithThousandsSeparator((value / 1024).toFixed(2)) + ' KB' |
|
); |
|
}, |
|
}, |
|
{ |
|
title: t('knowledgeBase'), |
|
dataIndex: 'kbs_info', |
|
key: 'kbs_info', |
|
render(value) { |
|
return Array.isArray(value) ? ( |
|
<Space wrap> |
|
{value?.map((x) => ( |
|
<Tag color="blue" key={x.kb_id}> |
|
{x.kb_name} |
|
</Tag> |
|
))} |
|
</Space> |
|
) : ( |
|
'' |
|
); |
|
}, |
|
}, |
|
{ |
|
title: t('action'), |
|
dataIndex: 'action', |
|
key: 'action', |
|
render: (text, record) => ( |
|
<ActionCell |
|
record={record} |
|
setCurrentRecord={(record: any) => { |
|
console.info(record); |
|
}} |
|
showRenameModal={showFileRenameModal} |
|
showConnectToKnowledgeModal={showConnectToKnowledgeModal} |
|
setSelectedRowKeys={setSelectedRowKeys} |
|
></ActionCell> |
|
), |
|
}, |
|
]; |
|
|
|
return ( |
|
<section className={styles.fileManagerWrapper}> |
|
<FileToolbar |
|
selectedRowKeys={rowSelection.selectedRowKeys as string[]} |
|
showFolderCreateModal={showFolderCreateModal} |
|
showFileUploadModal={showFileUploadModal} |
|
setSelectedRowKeys={setSelectedRowKeys} |
|
></FileToolbar> |
|
<Table |
|
dataSource={fileList} |
|
columns={columns} |
|
rowKey={'id'} |
|
rowSelection={rowSelection} |
|
loading={loading} |
|
pagination={pagination} |
|
scroll={{ scrollToFirstRowOnChange: true, x: '100%' }} |
|
/> |
|
<RenameModal |
|
visible={fileRenameVisible} |
|
hideModal={hideFileRenameModal} |
|
onOk={onFileRenameOk} |
|
initialName={initialFileName} |
|
loading={fileRenameLoading} |
|
></RenameModal> |
|
<FolderCreateModal |
|
loading={folderCreateLoading} |
|
visible={folderCreateModalVisible} |
|
hideModal={hideFolderCreateModal} |
|
onOk={onFolderCreateOk} |
|
></FolderCreateModal> |
|
<FileUploadModal |
|
visible={fileUploadVisible} |
|
hideModal={hideFileUploadModal} |
|
loading={fileUploadLoading} |
|
onOk={onFileUploadOk} |
|
></FileUploadModal> |
|
<ConnectToKnowledgeModal |
|
initialValue={initialValue} |
|
visible={connectToKnowledgeVisible} |
|
hideModal={hideConnectToKnowledgeModal} |
|
onOk={onConnectToKnowledgeOk} |
|
loading={connectToKnowledgeLoading} |
|
></ConnectToKnowledgeModal> |
|
</section> |
|
); |
|
}; |
|
|
|
export default FileManager; |
|
|