File size: 1,980 Bytes
aa2e6af | 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 70 71 72 73 | 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>,
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,
};
}
|