Files
Дмитрий Соловьев c64222a90d 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 чисто.
2026-06-11 17:09:58 +03:00

43 lines
1.4 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"name": "pcp-tgu-ui-service",
"version": "0.1.0",
"private": true,
"type": "module",
"engines": {
"node": "^24.0.0 || ^22.0.0"
},
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"preview": "vite preview",
"test": "vitest run"
},
"comment-deps": "@nstart/ui и соседние пакеты — peer-зависимости barrel-экспорта @nstart/auth (его ProfilePage/UserPanel). В наших экранах НЕ используются и вырезаются tree-shaking из итогового бандла, но должны быть установлены, чтобы сборка резолвила реэкспорты.",
"dependencies": {
"@hookform/resolvers": "^5.2.2",
"@nstart/auth": "^0.3.3",
"@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",
"react-hook-form": "^7.66.0",
"react-i18next": "^17.0.2",
"topojson-client": "^3.1.0",
"zod": "^4.1.12"
},
"devDependencies": {
"@types/node": "^22.10.0",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^6.0.1",
"jsdom": "^27.2.0",
"playwright": "^1.60.0",
"typescript": "^6.0.2",
"vite": "^8.0.3",
"vitest": "^4.0.14"
}
}