| import { ConfirmDeleteDialog } from '@/components/confirm-delete-dialog'; | |
| import { Button } from '@/components/ui/button'; | |
| import { | |
| DropdownMenu, | |
| DropdownMenuContent, | |
| DropdownMenuItem, | |
| DropdownMenuSeparator, | |
| DropdownMenuTrigger, | |
| } from '@/components/ui/dropdown-menu'; | |
| import { useDownloadFile } from '@/hooks/file-manager-hooks'; | |
| import { IFile } from '@/interfaces/database/file-manager'; | |
| import { CellContext } from '@tanstack/react-table'; | |
| import { EllipsisVertical, Link2, Trash2 } from 'lucide-react'; | |
| import { useCallback } from 'react'; | |
| import { useTranslation } from 'react-i18next'; | |
| import { | |
| UseHandleConnectToKnowledgeReturnType, | |
| UseRenameCurrentFileReturnType, | |
| } from './hooks'; | |
| type IProps = Pick<CellContext<IFile, unknown>, 'row'> & | |
| Pick<UseHandleConnectToKnowledgeReturnType, 'showConnectToKnowledgeModal'> & | |
| Pick<UseRenameCurrentFileReturnType, 'showFileRenameModal'>; | |
| export function ActionCell({ | |
| row, | |
| showConnectToKnowledgeModal, | |
| showFileRenameModal, | |
| }: IProps) { | |
| const { t } = useTranslation(); | |
| const record = row.original; | |
| const documentId = record.id; | |
| const { downloadFile } = useDownloadFile(); | |
| const handleShowConnectToKnowledgeModal = useCallback(() => { | |
| showConnectToKnowledgeModal(record); | |
| }, [record, showConnectToKnowledgeModal]); | |
| const onDownloadDocument = useCallback(() => { | |
| downloadFile({ | |
| id: documentId, | |
| filename: record.name, | |
| }); | |
| }, [documentId, downloadFile, record.name]); | |
| const handleShowFileRenameModal = useCallback(() => { | |
| showFileRenameModal(record); | |
| }, [record, showFileRenameModal]); | |
| return ( | |
| <section className="flex gap-4 items-center"> | |
| <Button | |
| variant="secondary" | |
| size={'icon'} | |
| onClick={handleShowConnectToKnowledgeModal} | |
| > | |
| <Link2 /> | |
| </Button> | |
| <ConfirmDeleteDialog> | |
| <Button variant="secondary" size={'icon'}> | |
| <Trash2 /> | |
| </Button> | |
| </ConfirmDeleteDialog> | |
| <DropdownMenu> | |
| <DropdownMenuTrigger asChild> | |
| <Button variant="secondary" size={'icon'}> | |
| <EllipsisVertical /> | |
| </Button> | |
| </DropdownMenuTrigger> | |
| <DropdownMenuContent align="end"> | |
| <DropdownMenuItem | |
| onClick={() => navigator.clipboard.writeText(record.id)} | |
| > | |
| {t('common.move')} | |
| </DropdownMenuItem> | |
| <DropdownMenuSeparator /> | |
| <DropdownMenuItem onClick={handleShowFileRenameModal}> | |
| {t('common.rename')} | |
| </DropdownMenuItem> | |
| <DropdownMenuSeparator /> | |
| <DropdownMenuItem onClick={onDownloadDocument}> | |
| {t('common.download')} | |
| </DropdownMenuItem> | |
| </DropdownMenuContent> | |
| </DropdownMenu> | |
| </section> | |
| ); | |
| } | |