File size: 1,993 Bytes
f0743f4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | 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,
};
}
|