44 lines
1.6 KiB
JavaScript
44 lines
1.6 KiB
JavaScript
import { addFiles } from './on_files_change.js';
|
|
import { onFilesChange } from './on_files_change.js';
|
|
import { onFolderChange } from './on_folder_change.js';
|
|
import { render } from './render.js';
|
|
import { setStatus } from './set_status.js';
|
|
|
|
export function initUploadTable(cfg) {
|
|
const elements = {
|
|
fileInputEl: cfg.fileInputEl,
|
|
folderInputEl: cfg.folderInputEl,
|
|
tableBodyEl: cfg.tableBodyEl,
|
|
countEl: cfg.countEl,
|
|
uploadBtnEl: cfg.uploadBtnEl,
|
|
};
|
|
const state = { files: [], fileMeta: new Map(), overNames: new Set(), busy: false };
|
|
elements.fileInputEl.addEventListener('change', onFilesChange(state, cfg, elements));
|
|
elements.folderInputEl.addEventListener('change', onFolderChange(state, cfg, elements));
|
|
|
|
const api = {
|
|
pickFiles: () => elements.fileInputEl.click(),
|
|
pickFolder: () => elements.folderInputEl.click(),
|
|
addFiles: (files) => addFiles(state, cfg, files, elements),
|
|
getFiles: () => state.files
|
|
.filter((file) => !state.overNames.has(file.name))
|
|
.map((file) => ({ path: file.name, name: file.name, size: file.size, file })),
|
|
getOverNames: () => new Set(state.overNames),
|
|
setStatus: (path, html) => setStatus(path, html, state, elements),
|
|
render: () => render(state, elements),
|
|
clear: () => {
|
|
state.files = [];
|
|
state.fileMeta.clear();
|
|
state.overNames.clear();
|
|
render(state, elements);
|
|
},
|
|
setBusy: (busy) => {
|
|
state.busy = busy;
|
|
elements.fileInputEl.disabled = busy;
|
|
elements.folderInputEl.disabled = busy;
|
|
elements.uploadBtnEl.disabled = busy || api.getFiles().length === 0;
|
|
},
|
|
};
|
|
api.render();
|
|
return api;
|
|
} |