import FileStatusBadge from '@/components/file-status-badge'; import { Button } from '@/components/ui/button'; import { Modal } from '@/components/ui/modal/modal'; import { Tooltip, TooltipContent, TooltipTrigger, } from '@/components/ui/tooltip'; import { RunningStatusMap } from '@/constants/knowledge'; import { useTranslate } from '@/hooks/common-hooks'; import React, { useMemo } from 'react'; import reactStringReplace from 'react-string-replace'; import { RunningStatus } from './dataset/constant'; export interface ILogInfo { fileType?: string; uploadedBy?: string; uploadDate?: string; processBeginAt?: string; chunkNumber?: number; taskId?: string; fileName: string; fileSize?: string; source?: string; task?: string; status?: RunningStatus; startTime?: string; endTime?: string; duration?: string; details: string; } interface ProcessLogModalProps { visible: boolean; onCancel: () => void; logInfo: ILogInfo; title: string; } const InfoItem: React.FC<{ label: string; value: string | React.ReactNode; className?: string; }> = ({ label, value, className = '' }) => { return (
{label} {value} {value}
); }; export const replaceText = (text: string) => { // Remove duplicate \n const nextText = text.replace(/(\n)\1+/g, '$1'); const replacedText = reactStringReplace( nextText, /(\[ERROR\].+\s)/g, (match, i) => { return ( {match} ); }, ); return replacedText; }; const ProcessLogModal: React.FC = ({ visible, onCancel, logInfo: initData, title, }) => { const { t } = useTranslate('knowledgeDetails'); const blackKeyList = ['']; const logInfo = useMemo(() => { return initData; }, [initData]); return ( } className="process-log-modal" >
{Object?.keys(logInfo).map((key) => { if ( blackKeyList.includes(key) || !logInfo[key as keyof typeof logInfo] ) { return null; } if (key === 'details') { return (
{replaceText(logInfo.details)}
} />
); } if (key === 'status') { return (
{t('status')}
); } return (
); })}
{/* */} {/*
Details
    {replaceText(logInfo.details)}
*/}
); }; export default ProcessLogModal;