fix(web): error/404 экраны, сплит бандла и bulk-мутации

- RouteErrorComponent/RouteNotFoundComponent на root-маршруте (RU-копирайт,
  retry + переход на главную; redirect в портал не мигает ошибкой)
- settings: форма инициализируется один раз — фоновый refetch больше не
  затирает ввод пользователя
- code splitting: autoCodeSplitting роутов + manualChunks (react/router/query/
  charts/dnd); вход ~507KB вместо единого чанка 1.57MB, recharts (330KB) грузится
  лениво; версия recharts в packages/ui выровнена с apps/web (3.8.0)
- bulk-эндпоинты: POST /agents/approve-bulk и PUT /policy-sets/:id/agents —
  назначение набора агентам одним запросом вместо N×(GET+PUT)
- оптимистичные обновления с rollback: approve, approve-bulk, удаление агента,
  переключение набора
- тесты bulk-операций (45 passed)
This commit is contained in:
Denozordec
2026-09-20 19:12:58 +07:00
parent 40030ce06c
commit 454c5009d1
12 changed files with 418 additions and 129 deletions
+35 -1
View File
@@ -6,10 +6,44 @@ import { TanStackRouterVite } from '@tanstack/router-plugin/vite'
export default defineConfig({
plugins: [
TanStackRouterVite({ routesDirectory: './src/routes', target: 'react' }),
TanStackRouterVite({
routesDirectory: './src/routes',
target: 'react',
autoCodeSplitting: true,
}),
react(),
tailwindcss(),
],
build: {
rollupOptions: {
output: {
manualChunks(id) {
if (
/node_modules[\\/](recharts|victory-vendor|d3-[a-z-]+|react-smooth|recharts-scale)[\\/]/.test(
id,
)
) {
return 'charts'
}
if (/node_modules[\\/]@dnd-kit[\\/]/.test(id)) return 'dnd'
if (
/node_modules[\\/](react|react-dom|scheduler|clsx|tailwind-merge)[\\/]/.test(
id,
)
) {
return 'react'
}
if (/node_modules[\\/]@tanstack[\\/]react-router[\\/]/.test(id)) {
return 'router'
}
if (/node_modules[\\/]@tanstack[\\/]react-query[\\/]/.test(id)) {
return 'query'
}
return undefined
},
},
},
},
resolve: {
alias: {
'@': path.resolve(__dirname, './src'),