App.tsx 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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 { ProjectsPage } from './pages/ProjectsPage';
  12. import { ProjectDetailPage } from './pages/ProjectDetailPage';
  13. import { FileManagerPage } from './pages/FileManagerPage';
  14. import { CameraPage } from './pages/CameraPage';
  15. import { ExternalLinkPage } from './pages/ExternalLinkPage';
  16. import { SystemInfoPage } from './pages/SystemInfoPage';
  17. import { useWebSocket } from './hooks/useWebSocket';
  18. import { ThemeProvider } from './contexts/ThemeContext';
  19. import { ToastProvider } from './contexts/ToastContext';
  20. const queryClient = new QueryClient({
  21. defaultOptions: {
  22. queries: {
  23. staleTime: 1000 * 60,
  24. retry: 1,
  25. },
  26. },
  27. });
  28. function WebSocketProvider({ children }: { children: React.ReactNode }) {
  29. useWebSocket();
  30. return <>{children}</>;
  31. }
  32. function App() {
  33. return (
  34. <ThemeProvider>
  35. <ToastProvider>
  36. <QueryClientProvider client={queryClient}>
  37. <BrowserRouter>
  38. <Routes>
  39. {/* Camera page - standalone, no layout, no WebSocket (doesn't need real-time updates) */}
  40. <Route path="/camera/:printerId" element={<CameraPage />} />
  41. {/* Main app with WebSocket for real-time updates */}
  42. <Route element={<WebSocketProvider><Layout /></WebSocketProvider>}>
  43. <Route index element={<PrintersPage />} />
  44. <Route path="archives" element={<ArchivesPage />} />
  45. <Route path="queue" element={<QueuePage />} />
  46. <Route path="stats" element={<StatsPage />} />
  47. <Route path="profiles" element={<ProfilesPage />} />
  48. <Route path="maintenance" element={<MaintenancePage />} />
  49. <Route path="projects" element={<ProjectsPage />} />
  50. <Route path="projects/:id" element={<ProjectDetailPage />} />
  51. <Route path="files" element={<FileManagerPage />} />
  52. <Route path="settings" element={<SettingsPage />} />
  53. <Route path="system" element={<SystemInfoPage />} />
  54. <Route path="external/:id" element={<ExternalLinkPage />} />
  55. </Route>
  56. </Routes>
  57. </BrowserRouter>
  58. </QueryClientProvider>
  59. </ToastProvider>
  60. </ThemeProvider>
  61. );
  62. }
  63. export default App;