Fix review findings in file picker
This commit is contained in:
@@ -34,7 +34,7 @@
|
||||
- В таблице реализованы рендер дерева, сворачивание/разворачивание групп, удаление leaf-файлов и удаление групп вместе со всем поддеревом.
|
||||
- Счётчики количества файлов и общего размера пересчитываются после изменений.
|
||||
- Состояние таблицы хранит исходные browser `File` objects и метаданные для последующего сервисного слоя.
|
||||
- Версия приложения повышена до `0.1.6`.
|
||||
- Версия приложения повышена до `0.1.7`.
|
||||
|
||||
## Исправления по ходу работы
|
||||
|
||||
@@ -69,6 +69,37 @@
|
||||
- Дополнительный браузерный тест подтвердил, что ZIP только с `image.jpg` оставляет таблицу пустой: `0 файлов · 0 B`.
|
||||
- Проверено наличие `accept=".pdf,.doc,.docx,.txt,.md,.zip"` у обоих file input.
|
||||
|
||||
## Код-ревью и исправления — 2026-09-05
|
||||
|
||||
Проведено ревью frontend-модулей file-picker после версии `0.1.6`.
|
||||
|
||||
### Найдено
|
||||
|
||||
- **Критично:** удаление файла или группы не удаляло ключ из `state.fileMeta`. После удаления повторный выбор того же файла с тем же путём и размером ошибочно считался дубликатом.
|
||||
- **Средний приоритет:** для leaf-файлов `padding-left` задавался одновременно на `<td>` и `<span>`, поэтому отступ листьев удваивался.
|
||||
- **Средний приоритет:** `set_status.js` обращался к удалённому `state.files` и падал с `TypeError` при вызове. Кроме того, старый поиск по имени был бы неоднозначен для одинаковых имён в разных каталогах.
|
||||
- **Низкий приоритет:** `addFiles` и `onFilesChange` импортировались двумя отдельными строками из одного модуля.
|
||||
|
||||
### Исправлено
|
||||
|
||||
- В `init_upload_table.js` добавлено рекурсивное удаление ключей из `state.fileMeta` перед удалением leaf или группы. Исправлены и UI-обработчик, и публичный `api.remove`.
|
||||
- В `render.js` убран второй источник отступа для leaf-файлов.
|
||||
- В `render.js` для файлов добавлен `data-path` с экранированным полным путём.
|
||||
- В `set_status.js` переход выполнен на актуальный `state.nodes` через `flattenFiles`; строка статуса ищется по полному `data-path`.
|
||||
- Объединён дублирующий импорт из `on_files_change.js`.
|
||||
- `state.fileMeta` заменён на `Set state.fileKeys`, поскольку значения идентификаторов узлов не использовались.
|
||||
- Логика удаления узла объединена в одну функцию и используется обработчиком таблицы и публичным `api.remove`.
|
||||
- Из `findNode` удалён неиспользуемый параметр `parent`.
|
||||
|
||||
### Проверено после ревью
|
||||
|
||||
- Все frontend `.js` файлы проходят `node --input-type=module --check`.
|
||||
- `site/app.py` проходит `python3 -m py_compile`.
|
||||
- `git diff --check` проходит.
|
||||
- Браузерная проверка удаления leaf-файла показала `0 файлов · 0 B`; после удаления ключ дедупликации очищается.
|
||||
- Повторный выбор того же файла после удаления снова разрешён.
|
||||
- Изменения не затрагивают фильтрацию расширений, ZIP-рекурсию и публичный API picker.
|
||||
|
||||
## Git
|
||||
|
||||
- `c0b8788 Implement reusable upload platform` — первоначальный reusable upload platform.
|
||||
|
||||
Reference in New Issue
Block a user