| 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<ExtendedFile>, 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, |
| }; |
| } |
|
|