diff --git a/deploy/files.js b/deploy/files.js index 2c63abc..0410baa 100644 --- a/deploy/files.js +++ b/deploy/files.js @@ -432,26 +432,25 @@ async function finalizeUpload() { /** * onFilesSelected(newFiles) — Оркестратор загрузки (Фаза 1). * - * ПАТТЕРН (decoupling-final-plan.md): - * 1. reconcileSelection — согласовать состав (чистая мутация) - * 2. Для каждого файла: addZipFile (ZIP) или addRegularFile (обычный) - * 3. finalizeUpload — завершить цикл + * ПАТТЕРН: + * 1. Для каждого файла: addZipFile (ZIP) или addRegularFile (обычный) + * 2. finalizeUpload — завершить цикл + * + * НЕ удаляет существующие файлы — только добавляет новые. + * Дубликаты обрабатываются через confirm() в addRegularFile. + * Удаление — только вручную (кнопка ✕). * - * Это ТОНКАЯ функция (~15 строк) — вся логика в шагах 1-3. * Вызывается из fileInput.addEventListener('change', ...). */ async function onFilesSelected(newFiles) { if (newFiles.length === 0) return; fileInput.disabled = true; - - // Шаг 1: согласовать состав — убрать файлы, которых нет в новом выборе - state.files = reconcileSelection(state.files, newFiles); - render(state); - showClassifyBtn(); + + // Сбросить прогресс пайплайна при добавлении новых файлов resetStepper('stepUpload'); - - // Шаг 2: обработать каждый файл + + // Обработать каждый файл for (var i = 0; i < newFiles.length; i++) { var f = newFiles[i]; if (f.name.toLowerCase().endsWith('.zip')) { @@ -460,7 +459,7 @@ async function onFilesSelected(newFiles) { await addRegularFile(f); } } - - // Шаг 3: финализация + + // Завершить цикл await finalizeUpload(); }