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, isEntityFile = false) => { 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 }); const filepath = updates['filepath'] ?? ''; if (filepath && updates['progress'] !== 1 && !isEntityFile) { 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, }; }