import BackButton from '@/components/back-button'; import { DynamicForm, DynamicFormRef, FormFieldConfig, FormFieldType, } from '@/components/dynamic-form'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Input } from '@/components/ui/input'; import { Separator } from '@/components/ui/separator'; import { RunningStatus } from '@/constants/knowledge'; import { t } from 'i18next'; import { debounce } from 'lodash'; import { CirclePause, Repeat } from 'lucide-react'; import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { FieldValues } from 'react-hook-form'; import { DataSourceFormBaseFields, DataSourceFormDefaultValues, DataSourceFormFields, DataSourceInfo, } from '../contant'; import { useAddDataSource, useDataSourceResume, useFetchDataSourceDetail, } from '../hooks'; import { DataSourceLogsTable } from './log-table'; const SourceDetailPage = () => { const formRef = useRef(null); const { data: detail } = useFetchDataSourceDetail(); const { handleResume } = useDataSourceResume(); const detailInfo = useMemo(() => { if (detail) { return DataSourceInfo[detail.source]; } }, [detail]); const [fields, setFields] = useState([]); const [defaultValues, setDefaultValues] = useState( DataSourceFormDefaultValues[ detail?.source as keyof typeof DataSourceFormDefaultValues ] as FieldValues, ); const runSchedule = useCallback(() => { handleResume({ resume: detail?.status === RunningStatus.RUNNING || detail?.status === RunningStatus.SCHEDULE ? false : true, }); }, [detail, handleResume]); const customFields = useMemo(() => { return [ { label: 'Refresh Freq', name: 'refresh_freq', type: FormFieldType.Number, required: false, render: (fieldProps: FormFieldConfig) => (
minutes
), }, { label: 'Prune Freq', name: 'prune_freq', type: FormFieldType.Number, required: false, hidden: true, render: (fieldProps: FormFieldConfig) => { return (
hours
); }, }, { label: 'Timeout Secs', name: 'timeout_secs', type: FormFieldType.Number, required: false, render: (fieldProps: FormFieldConfig) => (
seconds
), }, ]; }, [detail, runSchedule]); const { handleAddOk } = useAddDataSource(); const onSubmit = useCallback(() => { formRef?.current?.submit(); }, [formRef]); useEffect(() => { if (detail) { const fields = [ ...DataSourceFormBaseFields, ...DataSourceFormFields[ detail.source as keyof typeof DataSourceFormFields ], ...customFields, ] as FormFieldConfig[]; const neweFields = fields.map((field) => { return { ...field, horizontal: true, onChange: () => { onSubmit(); }, }; }); setFields(neweFields); const defultValueTemp = { ...(DataSourceFormDefaultValues[ detail?.source as keyof typeof DataSourceFormDefaultValues ] as FieldValues), ...detail, }; console.log('defaultValue', defultValueTemp); setDefaultValues(defultValueTemp); } }, [detail, customFields, onSubmit]); return (
{/* */} {detailInfo?.icon} {detail?.name}
{ handleAddOk(data); }, 500)} defaultValues={defaultValues} />
{t('setting.log')}
); }; export default SourceDetailPage;