import { useEffect, useState } from 'react'; import { Table, Button, Popconfirm } from 'antd'; import { invoke, path } from '@tauri-apps/api'; import useInit from '@/hooks/useInit'; import useData from '@/hooks/useData'; import useColumns from '@/hooks/useColumns'; import FilePath from '@/components/FilePath'; import useChatModel, { useCacheModel } from '@/hooks/useChatModel'; import { useTableRowSelection, TABLE_PAGINATION } from '@/hooks/useTable'; import { fmtDate, chatRoot } from '@/utils'; import { syncColumns } from './config'; import './index.scss'; const promptsURL = 'https://github.com/f/awesome-chatgpt-prompts/blob/main/prompts.csv'; export default function SyncPrompts() { const { rowSelection, selectedRowIDs } = useTableRowSelection(); const [jsonPath, setJsonPath] = useState(''); const { modelJson, modelSet } = useChatModel('sync_prompts'); const { modelCacheJson, modelCacheSet } = useCacheModel(jsonPath); const { opData, opInit, opReplace, opReplaceItems, opSafeKey } = useData([]); const { columns, ...opInfo } = useColumns(syncColumns()); const lastUpdated = modelJson?.sync_prompts?.last_updated; const selectedItems = rowSelection.selectedRowKeys || []; useInit(async () => { setJsonPath(await path.join(await chatRoot(), 'cache_model', 'chatgpt_prompts.json')); }); useEffect(() => { if (modelCacheJson.length <= 0) return; opInit(modelCacheJson); }, [modelCacheJson.length]); const handleSync = async () => { const data = await invoke('sync_prompts', { time: Date.now() }); if (data) { opInit(data as any[]); modelSet({ id: 'chatgpt_prompts', last_updated: Date.now(), }); } }; 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 )}
{lastUpdated && ( Last updated on {fmtDate(lastUpdated)} )}
{record.prompt}
, }} /> ); }