Files
drhider/History/ux-frontend/2026-08-24-ui-locks-session-freeze.md
T

2.4 KiB

v0.0.66 — Блокировки UI: предсказуемое поведение во всех состояниях (2026-08-24)

ux-frontend. По замечанию: во время обработки «Выбрать файлы» оставалась активной — юзер мог менять список и ломать состояние/индексы. Требование: ВСЁ предсказуемо, учтены ВСЕ действия юзера.

Состояния и доступные действия

Состояние Выбрать файлы ✕ удалить Обфусцировать Прервать Скачать Новая сессия
Простой
Загрузка (1/2) 🔒 🔒 🔒
Обработка (2/2) 🔒 🔒 🔒
Результат готов 🔒 🔒 🔒
Ошибка

Реализация

  • Глобальный флаг busy + setBusy(b): блокирует fileInput и скрывает кнопки «✕» (CSS body.busy .remove-btn { display:none }).
  • Двойная защита: обработчики change (выбор файлов) и rm (удаление) игнорируют вызовы при busy.
  • uploadFiles(): guard if (busy) return + setBusy(true); ранние выходы (ошибки фазы 1, test-режим) — setBusy(false).
  • Заморозка сессии после результата: complete/cancelledsessionDone=true, fi/uploadBtn выключены, показаны «Скачать» и новая кнопка «🔄 Новая сессия» (resetAll). Ошибки — снимают блокировку (можно повторить).
  • При закрытии вкладки (beforeunload) — resetAll сбрасывает всё.

Найденный и исправленный баг при правке

  • При добавлении заморозки случайно затёрлась строка activeES.addEventListener('complete', ...) — JS-синтаксис сломался («Missing catch»). Восстановлено ДО пуша; node --check — OK.

Проверка

  • node --check (извлечённый <script>) — OK; py_compile — OK.