fix(file-uploader): correctly fire add/remove events

Fixes #1119
This commit is contained in:
Eric Liu 2022-02-21 09:11:03 -08:00
commit 888553f10b

View file

@ -61,15 +61,28 @@
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
$: prevFiles = []; let prevFiles = [];
/** @type {(file: File) => string} */
const getFileId = (file) => file.lastModified + file.name;
afterUpdate(() => { afterUpdate(() => {
if (files.length > prevFiles.length) { const fileIds = files.map(getFileId);
dispatch("add", files); const prevFileIds = prevFiles.map(getFileId);
} else { const addedIds = fileIds.filter((_) => !prevFileIds.includes(_));
const removedIds = prevFileIds.filter((_) => !fileIds.includes(_));
if (addedIds.length > 0) {
dispatch(
"add",
addedIds.map((id) => files.find((file) => id === getFileId(file)))
);
}
if (removedIds.length > 0) {
dispatch( dispatch(
"remove", "remove",
prevFiles.filter((_) => !files.includes(_)) removedIds.map((id) => prevFiles.find((file) => id === getFileId(file)))
); );
} }