import FileStatusBadge from '@/components/file-status-badge'; import { FilterCollection } from '@/components/list-filter-bar/interface'; import SvgIcon from '@/components/svg-icon'; import { useIsDarkTheme } from '@/components/theme-provider'; import { AntToolTip } from '@/components/ui/tooltip'; import { RunningStatusMap } from '@/constants/knowledge'; import { useFetchDocumentList } from '@/hooks/use-document-request'; import { CircleQuestionMark } from 'lucide-react'; import { FC, useEffect, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { RunningStatus } from '../dataset/constant'; import { LogTabs } from './dataset-common'; import { DatasetFilter } from './dataset-filter'; import { useFetchFileLogList, useFetchOverviewTital } from './hook'; import { DocumentLog, IFileLogItem } from './interface'; import FileLogsTable from './overview-table'; interface StatCardProps { title: string; value: number; icon: JSX.Element; children?: JSX.Element; tooltip?: string; } interface CardFooterProcessProps { success: number; failed: number; successTip?: string; failedTip?: string; } const StatCard: FC = ({ title, value, children, icon, tooltip, }) => { return (

{title} {tooltip && ( )}

{icon}
{value}
{children}
); }; const CardFooterProcess: FC = ({ success = 0, successTip, failed = 0, failedTip, }) => { const { t } = useTranslation(); return (
{t('knowledgeDetails.success')} {successTip && ( )}
{success || 0}
{t('knowledgeDetails.failed')} {failedTip && ( )}
{failed || 0}
); }; const FileLogsPage: FC = () => { const { t } = useTranslation(); const [topAllData, setTopAllData] = useState({ totalFiles: { value: 0, precent: 0, }, downloads: { value: 0, success: 0, failed: 0, }, processing: { value: 0, success: 0, failed: 0, }, }); const { data: topData } = useFetchOverviewTital(); const { pagination: { total: fileTotal }, } = useFetchDocumentList(); useEffect(() => { setTopAllData((prev) => { return { ...prev, processing: { value: topData?.processing || 0, success: topData?.finished || 0, failed: topData?.failed || 0, }, }; }); }, [topData]); useEffect(() => { setTopAllData((prev) => { return { ...prev, totalFiles: { value: fileTotal || 0, precent: 0, }, }; }); }, [fileTotal]); const { data: tableOriginData, searchString, handleInputChange, pagination, setPagination, active, filterValue, setFilterValue, handleFilterSubmit, setActive, } = useFetchFileLogList(); const filters = useMemo(() => { const filterCollection: FilterCollection[] = [ { field: 'operation_status', label: t('knowledgeDetails.status'), list: Object.values(RunningStatus).map((value) => { // const value = key as RunningStatus; console.log(value); return { id: value, // label: RunningStatusMap[value].label, label: ( ), }; }), }, // { // field: 'types', // label: t('knowledgeDetails.task'), // list: [ // { // id: 'Parse', // label: 'Parse', // }, // { // id: 'Download', // label: 'Download', // }, // ], // }, ]; if (active === LogTabs.FILE_LOGS) { return filterCollection; } if (active === LogTabs.DATASET_LOGS) { const list = filterCollection.filter((item, index) => index === 0); return list; } return []; }, [active, t]); const tableList = useMemo(() => { console.log('tableList', tableOriginData); if (tableOriginData && tableOriginData.logs?.length) { return tableOriginData.logs.map((item) => { return { ...item, status: item.operation_status as RunningStatus, statusName: RunningStatusMap[item.operation_status as RunningStatus], } as unknown as IFileLogItem & DocumentLog; }); } return []; }, [tableOriginData]); const changeActiveLogs = (active: (typeof LogTabs)[keyof typeof LogTabs]) => { setFilterValue({}); setActive(active); }; const handlePaginationChange = ({ page, pageSize, }: { page: number; pageSize: number; }) => { console.log('Pagination changed:', { page, pageSize }); setPagination({ ...pagination, page, pageSize: pageSize, }); }; const isDark = useIsDarkTheme(); return (
{/* Stats Cards */}
) : ( ) } >
{topAllData.totalFiles.precent > 0 ? '+' : ''} {topAllData.totalFiles.precent}%{' '} from last week
) : ( ) } tooltip={t('datasetOverview.downloadTip')} > ) : ( ) } tooltip={t('datasetOverview.processingTip')} >
{/* Tabs & Search */} {/* Table */}
); }; export default FileLogsPage;