import { useEffect, useState } from 'react'; import { useLocation } from 'react-router-dom'; import { ArrowLeftOutlined } from '@ant-design/icons'; import { Table, Button } from 'antd'; import { shell, path } from '@tauri-apps/api'; import useColumns from '@/hooks/useColumns'; import useData from '@/hooks/useData'; import { useCacheModel } from '@/hooks/useChatModel'; import useTable, { TABLE_PAGINATION } from '@/hooks/useTable'; import { fmtDate, chatRoot } from '@/utils'; import { getPath } from '@/view/model/SyncCustom/config'; import { syncColumns } from './config'; import useInit from '@/hooks/useInit'; export default function SyncRecord() { const location = useLocation(); const [filePath, setFilePath] = useState(''); const [jsonPath, setJsonPath] = useState(''); const state = location?.state; const { rowSelection, selectedRowIDs } = useTable(); const { modelCacheJson, modelCacheSet } = useCacheModel(jsonPath); const { opData, opInit, opReplace, opReplaceItems, opSafeKey } = useData([]); const { columns, ...opInfo } = useColumns(syncColumns()); const selectedItems = rowSelection.selectedRowKeys || []; useInit(async () => { setFilePath(await getPath(state)); setJsonPath(await path.join(await chatRoot(), 'cache_model', `${state?.id}.json`)); }) useEffect(() => { if (modelCacheJson.length <= 0) return; opInit(modelCacheJson); }, [modelCacheJson.length]); useEffect(() => { if (opInfo.opType === 'enable') { const data = opReplace(opInfo?.opRecord?.[opSafeKey], opInfo?.opRecord); modelCacheSet(data); } }, [opInfo.opTime]); const handleEnable = (isEnable: boolean) => { const data = opReplaceItems(selectedRowIDs, { enable: isEnable }) modelCacheSet(data); }; return (
{selectedItems.length > 0 && ( <> Selected {selectedItems.length} items )}
PATH: shell.open(filePath)} target="_blank" title={filePath}>{filePath}
CACHE: shell.open(jsonPath)} target="_blank" title={jsonPath}>{jsonPath}
{state?.last_updated && Last updated on {fmtDate(state?.last_updated)}}
) }