import FileStatusBadge from '@/components/file-status-badge'; import { FileIcon, IconFontFill } from '@/components/icon-font'; import { RAGFlowAvatar } from '@/components/ragflow-avatar'; import { Button } from '@/components/ui/button'; import { RAGFlowPagination } from '@/components/ui/ragflow-pagination'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { RunningStatusMap } from '@/constants/knowledge'; import { useTranslate } from '@/hooks/common-hooks'; import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks'; import { PipelineResultSearchParams } from '@/pages/dataflow-result/constant'; import { NavigateToDataflowResultProps } from '@/pages/dataflow-result/interface'; import { formatDate, formatSecondsToHumanReadable } from '@/utils/date'; import { ColumnDef, ColumnFiltersState, Row, SortingState, flexRender, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from '@tanstack/react-table'; import { TFunction } from 'i18next'; import { ArrowUpDown, ClipboardList, Eye } from 'lucide-react'; import { FC, useMemo, useState } from 'react'; import { useParams } from 'umi'; import { RunningStatus } from '../dataset/constant'; import ProcessLogModal from '../process-log-modal'; import { LogTabs, ProcessingType, ProcessingTypeMap } from './dataset-common'; import { DocumentLog, FileLogsTableProps, IFileLogItem } from './interface'; export const getFileLogsTableColumns = ( t: TFunction<'translation', string>, showLog: (row: Row, active: LogTabs) => void, kowledgeId: string, navigateToDataflowResult: ( props: NavigateToDataflowResultProps, ) => () => void, ) => { // const { t } = useTranslate('knowledgeDetails'); const columns: ColumnDef[] = [ // { // id: 'select', // header: ({ table }) => ( // // ), // cell: ({ row }) => ( // // ), // }, { accessorKey: 'id', header: 'ID', cell: ({ row }) => (
{row.original.id}
), }, { accessorKey: 'fileName', header: t('fileName'), cell: ({ row }) => (
{row.original.fileName}
), }, { accessorKey: 'source_from', header: t('source'), cell: ({ row }) => (
{row.original.source_from || t('localUpload')}
), }, { accessorKey: 'pipeline_title', header: t('dataPipeline'), cell: ({ row }) => (
{row.original.pipeline_title === 'naive' ? 'general' : row.original.pipeline_title}
), }, { accessorKey: 'process_begin_at', header: ({ column }) => { return ( ); }, cell: ({ row }) => (
{formatDate(row.original.process_begin_at)}
), }, { accessorKey: 'task_type', header: t('task'), cell: ({ row }) => (
{row.original.task_type}
), }, { accessorKey: 'operation_status', header: t('status'), cell: ({ row }) => ( ), }, { id: 'operations', header: t('operations'), cell: ({ row }) => (
{row.original.pipeline_id && ( )}
), }, ]; return columns; }; export const getDatasetLogsTableColumns = ( t: TFunction<'translation', string>, showLog: (row: Row, active: LogTabs) => void, ) => { // const { t } = useTranslate('knowledgeDetails'); const columns: ColumnDef[] = [ // { // id: 'select', // header: ({ table }) => ( // // ), // cell: ({ row }) => ( // // ), // }, { accessorKey: 'id', header: 'ID', cell: ({ row }) => (
{row.original.id}
), }, { accessorKey: 'process_begin_at', header: ({ column }) => { return ( ); }, cell: ({ row }) => (
{formatDate(row.original.process_begin_at)}
), }, { accessorKey: 'task_type', header: t('processingType'), cell: ({ row }) => (
{ProcessingType.knowledgeGraph === row.original.task_type && ( )} {ProcessingType.raptor === row.original.task_type && ( )} {ProcessingTypeMap[row.original.task_type as ProcessingType] || row.original.task_type}
), }, { accessorKey: 'operation_status', header: t('status'), cell: ({ row }) => ( // ), }, { id: 'operations', header: t('operations'), cell: ({ row }) => (
), }, ]; return columns; }; const FileLogsTable: FC = ({ data, pagination, setPagination, active = LogTabs.FILE_LOGS, }) => { const [sorting, setSorting] = useState([]); const [columnFilters, setColumnFilters] = useState([]); const [rowSelection, setRowSelection] = useState({}); const { t } = useTranslate('knowledgeDetails'); const [isModalVisible, setIsModalVisible] = useState(false); const { navigateToDataflowResult } = useNavigatePage(); const [logInfo, setLogInfo] = useState(); const kowledgeId = useParams().id; const showLog = (row: Row) => { const logDetail = { taskId: row.original?.dsl?.task_id, fileName: row.original.document_name, source: row.original.source_from, task: row.original?.task_type, status: row.original.status as RunningStatus, startDate: formatDate(row.original.process_begin_at), duration: formatSecondsToHumanReadable( row.original.process_duration || 0, ), details: row.original.progress_msg, } as unknown as IFileLogItem; console.log('logDetail', logDetail); setLogInfo(logDetail); setIsModalVisible(true); }; const columns = useMemo(() => { return active === LogTabs.FILE_LOGS ? getFileLogsTableColumns( t, showLog, kowledgeId || '', navigateToDataflowResult, ) : getDatasetLogsTableColumns(t, showLog); }, [active, t]); const currentPagination = useMemo( () => ({ pageIndex: (pagination.current || 1) - 1, pageSize: pagination.pageSize || 10, }), [pagination], ); const table = useReactTable({ data: data || [], columns, manualPagination: true, getCoreRowModel: getCoreRowModel(), getPaginationRowModel: getPaginationRowModel(), getSortedRowModel: getSortedRowModel(), getFilteredRowModel: getFilteredRowModel(), onSortingChange: setSorting, onColumnFiltersChange: setColumnFilters, onRowSelectionChange: setRowSelection, state: { sorting, columnFilters, rowSelection, pagination: currentPagination, }, pageCount: pagination.total ? Math.ceil(pagination.total / pagination.pageSize) : 0, }); return (
{table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => ( {flexRender( header.column.columnDef.header, header.getContext(), )} ))} ))} {table.getRowModel().rows?.length ? ( table.getRowModel().rows.map((row) => ( {row.getVisibleCells().map((cell) => ( {flexRender(cell.column.columnDef.cell, cell.getContext())} ))} )) ) : ( No results. )}
setPagination({ page, pageSize })} />
{isModalVisible && ( setIsModalVisible(false)} logInfo={logInfo} /> )}
); }; export default FileLogsTable;