import type { ExtendedFile, FileSetter } from '~/common'; import useSetFilesToDelete from './useSetFilesToDelete'; export default function useUpdateFiles(setFiles: FileSetter) { const setFilesToDelete = useSetFilesToDelete(); const addFile = (newFile: ExtendedFile) => { setFiles((currentFiles) => { const updatedFiles = new Map(currentFiles); updatedFiles.set(newFile.file_id, newFile); return updatedFiles; }); }; const replaceFile = (newFile: ExtendedFile) => { setFiles((currentFiles) => { const updatedFiles = new Map(currentFiles); updatedFiles.set(newFile.file_id, newFile); return updatedFiles; }); }; const updateFileById = ( fileId: string, updates: Partial, isAssistantFile?: boolean, ) => { setFiles((currentFiles) => { if (!currentFiles.has(fileId)) { console.warn(`File with id ${fileId} not found.`); return currentFiles; } const updatedFiles = new Map(currentFiles); const currentFile = updatedFiles.get(fileId); if (!currentFile) { console.warn(`File with id ${fileId} not found.`); return currentFiles; } updatedFiles.set(fileId, { ...currentFile, ...updates }); if (updates['filepath'] && updates['progress'] !== 1 && !isAssistantFile) { const files = Object.fromEntries(updatedFiles); setFilesToDelete(files); } return updatedFiles; }); }; const deleteFileById = (fileId: string) => { setFiles((currentFiles) => { const updatedFiles = new Map(currentFiles); if (updatedFiles.has(fileId)) { updatedFiles.delete(fileId); } else { console.warn(`File with id ${fileId} not found.`); } const files = Object.fromEntries(updatedFiles); setFilesToDelete(files); return updatedFiles; }); }; return { addFile, replaceFile, updateFileById, deleteFileById, }; }