From 91f22137d7f823b50d33700a09b03955d2e283e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Thu, 25 Jun 2026 10:33:36 +0400 Subject: [PATCH] =?UTF-8?q?v1.0.178:=20fix=20=E2=80=94=20onFilesSelected?= =?UTF-8?q?=20=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=B5=20=D0=BD=D0=B5=20=D1=83?= =?UTF-8?q?=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5=D1=82=20=D1=81=D1=83=D1=89=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D0=B2=D1=83=D1=89=D0=B8=D0=B5=20=D1=84=D0=B0=D0=B9?= =?UTF-8?q?=D0=BB=D1=8B.=20reconcileSelection=20=D1=83=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B8=D0=B7=20=D0=BE=D1=80=D0=BA=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=B0=D1=82=D0=BE=D1=80=D0=B0.=20=D0=A4=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D1=8B=20=D0=B8=D0=B7=20ZIP/=D0=BF=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D1=8B=D0=B4=D1=83=D1=89=D0=B8=D1=85=20=D0=B7=D0=B0=D0=B3?= =?UTF-8?q?=D1=80=D1=83=D0=B7=D0=BE=D0=BA=20=D1=81=D0=BE=D1=85=D1=80=D0=B0?= =?UTF-8?q?=D0=BD=D1=8F=D1=8E=D1=82=D1=81=D1=8F=20=D0=BF=D1=80=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D1=8B=D1=85.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/files.js | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) 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(); }