feat: port stroy-bot-import-works as import page

Moves estimate work import into the app as ?page=import&projectId=.
Behaviour is kept 1:1 with the legacy web part: project lookup with
UniqueId0 check, project objects query, works paging by 200 with the
progress text, 250 ms debounced search over the same fields, 100 rows
per page, select-all over all filtered not-imported works, duplicate
protection via cree9_comment, the same Dataverse POST body, import into
the selected object and import with object creation (find or create
root and child in «Объекты», cached per pair), toasts and all texts.

The object picker still shows only the first 100 matches (legacy bug).
HTTP-response errors are detected by their status field instead of
instanceof HttpError, which does not survive the ES5 build target.
Deviations are listed in docs/MIGRATION-CHECKLIST.md section 6.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Тимур Городецкий
2026-10-16 08:56:28 +05:00
parent 704d5ce329
commit c41df77c09
26 changed files with 2545 additions and 0 deletions
+7
View File
@@ -197,6 +197,13 @@
🐞 Пагинация в модалке объектов не выводится (видны только первые 100).
**Сознательные отличия от import-works:**
- Адрес Dataverse берётся из настройки «URL Dataverse», адрес сайта со списками — из «URL сайта SharePoint», API — из «Базовый URL API» (значения по умолчанию прежние; раньше Dataverse был захардкожен).
- Если объект выбрать до окончания загрузки работ, загрузка продолжается (раньше перерисовка показывала «Работы не найдены», пока загрузка не заканчивалась).
- Клик по ячейке с флажком вне самого флажка строку не переключает (флажок ui-kit обёрнут в label — иначе было бы двойное переключение). Клик по остальной части строки работает как раньше.
- Тосты при нескольких подряд показываются стопкой, а не друг поверх друга.
- Окно «Выбор объекта» — `Dialog` из ui-kit (у крестика появилась подпись «Закрыть»); поле «Объект» доступно с клавиатуры.
---
## 7. Ресурсы проекта (stroy-bot-project-assigner) — `?page=resources&projectId=`