/
t3
/
web-ui
Обзор
Документация
Войти
/
t3
/
web-ui
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
src/App.tsx
61 строка
3 KB
Ivan Shibkikh
init
22 июл 2026, 22:03
22 июл 2026, 22:03
c56855a
Код
Авторство
О чём код?
import { BrowserRouter, Routes, Route, Navigate } from "react-router-dom"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { ThemeProvider } from "@/theme/ThemeProvider"; import { AuthProvider, useAuth } from "@/features/auth/AuthContext"; import { AppShell } from "@/components/layout/AppShell"; import { LoginPage } from "@/features/auth/LoginPage"; import { DashboardPage } from "@/features/auth/DashboardPage"; import { UsersPage } from "@/features/users/UsersPage"; import { RolesPage } from "@/features/roles/RolesPage"; import { AuditPage } from "@/features/audit/AuditPage"; import { BucketsPage } from "@/features/buckets/BucketsPage"; const queryClient = new QueryClient({ defaultOptions: { queries: { retry: 1, staleTime: 30_000, refetchOnWindowFocus: false, }, }, }); function ProtectedRoute() { const { token, loading } = useAuth(); if (loading) { return ( <div className="flex h-screen items-center justify-center"> <div className="text-sm text-muted-foreground">Загрузка...</div> </div> ); } if (!token) return <Navigate to="/login" replace />; return <AppShell />; } export default function App() { return ( <QueryClientProvider client={queryClient}> <ThemeProvider> <AuthProvider> <BrowserRouter> <Routes> <Route path="/login" element={<LoginPage />} /> <Route element={<ProtectedRoute />}> <Route index element={<DashboardPage />} /> <Route path="users" element={<UsersPage />} /> <Route path="users/:id" element={<UsersPage />} /> <Route path="roles" element={<RolesPage />} /> <Route path="roles/:id" element={<RolesPage />} /> <Route path="audit" element={<AuditPage />} /> <Route path="buckets" element={<BucketsPage />} /> <Route path="buckets/:bucket" element={<BucketsPage />} /> </Route> <Route path="*" element={<Navigate to="/" replace />} /> </Routes> </BrowserRouter> </AuthProvider> </ThemeProvider> </QueryClientProvider> ); }