feat(tgu-ui): бронирование слотов — виртуализация, автоподбор покрытия, эргономичный мультивыбор

Вкладка «Слоты» масштабирована под ~20k слотов/мес без торможения:
- wktCache: контур слота парсится один раз (кэш по slotKey), не на каждый ререндер сцены
- виртуализация таблицы (@tanstack/react-virtual): в DOM только видимое окно строк
- автоподбор покрытия: проброс coverageStrategy (GREEDY/CONTINUOUS) в request-cover,
  результат — преднабор брони (solver не дублируется, используется бэкендный)
- мультивыбор: Shift-диапазон по отсортированному списку, «все сутки»/«видимые»,
  счётчик охвата выбора
- бронь крупных наборов чанками (по 200) + подтверждение выше 500 + прогресс
- отмена расчёта (AbortController), мягкая подсказка перегруза карты
- чистая логика выбора/чанкинга вынесена в slotSelection.ts + юнит-тесты

Тесты: 70/70 (17 новых). tsc -b и vite build чисто.
This commit is contained in:
Дмитрий Соловьев
2026-06-11 17:09:58 +03:00
parent 345529cde0
commit c64222a90d
8 changed files with 641 additions and 122 deletions
+1
View File
@@ -19,6 +19,7 @@
"@nstart/ui": "^0.4.0",
"@phosphor-icons/react": "^2.1.10",
"@tanstack/react-query": "^5.96.1",
"@tanstack/react-virtual": "^3.14.2",
"d3-geo": "^3.1.1",
"react": "^19.2.4",
"react-dom": "^19.2.4",