Fix review findings in file picker

This commit is contained in:
“Naeel”
2026-09-05 10:00:14 +03:00
parent 6fea5bce49
commit 8f775e34a9
6 changed files with 67 additions and 19 deletions
+20 -8
View File
@@ -1,8 +1,22 @@
import { addFiles } from './on_files_change.js';
import { onFilesChange } from './on_files_change.js';
import { addFiles, onFilesChange } from './on_files_change.js';
import { onFolderChange } from './on_folder_change.js';
import { findNode, flattenFiles, render } from './render.js';
function removeFileMeta(state, node) {
if (node.kind === 'file') {
state.fileKeys.delete(`${node.path}\u0000${node.file.size}`);
return;
}
node.children.forEach((child) => removeFileMeta(state, child));
}
function removeNode(state, id) {
const found = findNode(state.nodes, id);
if (!found) return;
removeFileMeta(state, found.node);
found.nodes.splice(found.nodes.indexOf(found.node), 1);
}
export function initUploadTable(cfg) {
const elements = {
fileInputEl: cfg.fileInputEl,
@@ -10,7 +24,7 @@ export function initUploadTable(cfg) {
tableBodyEl: cfg.tableBodyEl,
countEl: cfg.countEl,
};
const state = { nodes: [], fileMeta: new Map(), busy: false };
const state = { nodes: [], fileKeys: new Set(), busy: false };
elements.fileInputEl.addEventListener('change', onFilesChange(state, cfg, elements));
elements.folderInputEl.addEventListener('change', onFolderChange(state, cfg, elements));
elements.tableBodyEl.addEventListener('click', (event) => {
@@ -23,8 +37,7 @@ export function initUploadTable(cfg) {
}
const remove = event.target.closest('[data-remove]');
if (remove) {
const found = findNode(state.nodes, remove.dataset.remove);
if (found) found.nodes.splice(found.nodes.indexOf(found.node), 1);
removeNode(state, remove.dataset.remove);
render(state, elements);
}
});
@@ -35,14 +48,13 @@ export function initUploadTable(cfg) {
addFiles: (files) => addFiles(state, cfg, files, elements),
getFiles: () => flattenFiles(state.nodes),
remove: (id) => {
const found = findNode(state.nodes, id);
if (found) found.nodes.splice(found.nodes.indexOf(found.node), 1);
removeNode(state, id);
render(state, elements);
},
render: () => render(state, elements),
clear: () => {
state.nodes = [];
state.fileMeta.clear();
state.fileKeys.clear();
render(state, elements);
},
setBusy: (busy) => {