ragflow
/
web
/src
/pages
/add-knowledge
/components
/knowledge-file
/parsing-action-cell
/index.tsx
import { useShowDeleteConfirm, useTranslate } from '@/hooks/common-hooks'; | |
import { useRemoveNextDocument } from '@/hooks/document-hooks'; | |
import { IDocumentInfo } from '@/interfaces/database/document'; | |
import { downloadDocument } from '@/utils/file-util'; | |
import { | |
DeleteOutlined, | |
DownloadOutlined, | |
EditOutlined, | |
ToolOutlined, | |
} from '@ant-design/icons'; | |
import { Button, Dropdown, MenuProps, Space, Tooltip } from 'antd'; | |
import { isParserRunning } from '../utils'; | |
import { useCallback } from 'react'; | |
import { DocumentType } from '../constant'; | |
import styles from './index.less'; | |
interface IProps { | |
record: IDocumentInfo; | |
setCurrentRecord: (record: IDocumentInfo) => void; | |
showRenameModal: () => void; | |
showChangeParserModal: () => void; | |
showSetMetaModal: () => void; | |
} | |
const ParsingActionCell = ({ | |
record, | |
setCurrentRecord, | |
showRenameModal, | |
showChangeParserModal, | |
showSetMetaModal, | |
}: IProps) => { | |
const documentId = record.id; | |
const isRunning = isParserRunning(record.run); | |
const { t } = useTranslate('knowledgeDetails'); | |
const { removeDocument } = useRemoveNextDocument(); | |
const showDeleteConfirm = useShowDeleteConfirm(); | |
const isVirtualDocument = record.type === DocumentType.Virtual; | |
const onRmDocument = () => { | |
if (!isRunning) { | |
showDeleteConfirm({ | |
onOk: () => removeDocument([documentId]), | |
content: record?.parser_config?.graphrag?.use_graphrag | |
? t('deleteDocumentConfirmContent') | |
: '', | |
}); | |
} | |
}; | |
const onDownloadDocument = () => { | |
downloadDocument({ | |
id: documentId, | |
filename: record.name, | |
}); | |
}; | |
const setRecord = useCallback(() => { | |
setCurrentRecord(record); | |
}, [record, setCurrentRecord]); | |
const onShowRenameModal = () => { | |
setRecord(); | |
showRenameModal(); | |
}; | |
const onShowChangeParserModal = () => { | |
setRecord(); | |
showChangeParserModal(); | |
}; | |
const onShowSetMetaModal = useCallback(() => { | |
setRecord(); | |
showSetMetaModal(); | |
}, [setRecord, showSetMetaModal]); | |
const chunkItems: MenuProps['items'] = [ | |
{ | |
key: '1', | |
label: ( | |
<div className="flex flex-col"> | |
<Button type="link" onClick={onShowChangeParserModal}> | |
{t('chunkMethod')} | |
</Button> | |
</div> | |
), | |
}, | |
{ type: 'divider' }, | |
{ | |
key: '2', | |
label: ( | |
<div className="flex flex-col"> | |
<Button type="link" onClick={onShowSetMetaModal}> | |
{t('setMetaData')} | |
</Button> | |
</div> | |
), | |
}, | |
]; | |
return ( | |
<Space size={0}> | |
{isVirtualDocument || ( | |
<Dropdown | |
menu={{ items: chunkItems }} | |
trigger={['click']} | |
disabled={isRunning || record.parser_id === 'tag'} | |
> | |
<Button type="text" className={styles.iconButton}> | |
<ToolOutlined size={20} /> | |
</Button> | |
</Dropdown> | |
)} | |
<Tooltip title={t('rename', { keyPrefix: 'common' })}> | |
<Button | |
type="text" | |
disabled={isRunning} | |
onClick={onShowRenameModal} | |
className={styles.iconButton} | |
> | |
<EditOutlined size={20} /> | |
</Button> | |
</Tooltip> | |
<Tooltip title={t('delete', { keyPrefix: 'common' })}> | |
<Button | |
type="text" | |
disabled={isRunning} | |
onClick={onRmDocument} | |
className={styles.iconButton} | |
> | |
<DeleteOutlined size={20} /> | |
</Button> | |
</Tooltip> | |
{isVirtualDocument || ( | |
<Tooltip title={t('download', { keyPrefix: 'common' })}> | |
<Button | |
type="text" | |
disabled={isRunning} | |
onClick={onDownloadDocument} | |
className={styles.iconButton} | |
> | |
<DownloadOutlined size={20} /> | |
</Button> | |
</Tooltip> | |
)} | |
</Space> | |
); | |
}; | |
export default ParsingActionCell; | |