App.tsx 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { BrowserRouter, Routes, Route } from 'react-router-dom';
  2. import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
  3. import { Layout } from './components/Layout';
  4. import { PrintersPage } from './pages/PrintersPage';
  5. import { ArchivesPage } from './pages/ArchivesPage';
  6. import { QueuePage } from './pages/QueuePage';
  7. import { StatsPage } from './pages/StatsPage';
  8. import { SettingsPage } from './pages/SettingsPage';
  9. import { ProfilesPage } from './pages/ProfilesPage';
  10. import { MaintenancePage } from './pages/MaintenancePage';
  11. import { useWebSocket } from './hooks/useWebSocket';
  12. import { ThemeProvider } from './contexts/ThemeContext';
  13. import { ToastProvider } from './contexts/ToastContext';
  14. const queryClient = new QueryClient({
  15. defaultOptions: {
  16. queries: {
  17. staleTime: 1000 * 60,
  18. retry: 1,
  19. },
  20. },
  21. });
  22. function WebSocketProvider({ children }: { children: React.ReactNode }) {
  23. useWebSocket();
  24. return <>{children}</>;
  25. }
  26. function App() {
  27. return (
  28. <ThemeProvider>
  29. <ToastProvider>
  30. <QueryClientProvider client={queryClient}>
  31. <WebSocketProvider>
  32. <BrowserRouter>
  33. <Routes>
  34. <Route path="/" element={<Layout />}>
  35. <Route index element={<PrintersPage />} />
  36. <Route path="archives" element={<ArchivesPage />} />
  37. <Route path="queue" element={<QueuePage />} />
  38. <Route path="stats" element={<StatsPage />} />
  39. <Route path="profiles" element={<ProfilesPage />} />
  40. <Route path="maintenance" element={<MaintenancePage />} />
  41. <Route path="settings" element={<SettingsPage />} />
  42. </Route>
  43. </Routes>
  44. </BrowserRouter>
  45. </WebSocketProvider>
  46. </QueryClientProvider>
  47. </ToastProvider>
  48. </ThemeProvider>
  49. );
  50. }
  51. export default App;