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

Fixes #1119
This commit is contained in:
metonym 2022-02-21 09:18:29 -08:00 committed by GitHub
commit 6a13ca1c0d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

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