import { Component, type ReactNode, type ErrorInfo } from 'react'; import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { Layout } from './components/Layout'; import { PrintersPage } from './pages/PrintersPage'; import { ArchivesPage } from './pages/ArchivesPage'; import { QueuePage } from './pages/QueuePage'; import { StatsPage } from './pages/StatsPage'; import { SettingsPage } from './pages/SettingsPage'; import { ProfilesPage } from './pages/ProfilesPage'; import { MaintenancePage } from './pages/MaintenancePage'; import { ProjectsPage } from './pages/ProjectsPage'; import { ProjectDetailPage } from './pages/ProjectDetailPage'; import { FileManagerPage } from './pages/FileManagerPage'; import { LibraryTrashPage } from './pages/LibraryTrashPage'; import { CameraPage } from './pages/CameraPage'; import { StreamOverlayPage } from './pages/StreamOverlayPage'; import { ExternalLinkPage } from './pages/ExternalLinkPage'; import { GroupEditPage } from './pages/GroupEditPage'; import InventoryPage from './pages/InventoryPage'; import { MakerworldPage } from './pages/MakerworldPage'; import { SystemInfoPage } from './pages/SystemInfoPage'; import { LoginPage } from './pages/LoginPage'; import { SetupPage } from './pages/SetupPage'; import { NotificationsPage } from './pages/NotificationsPage'; import { GCodeViewerPage } from './pages/GCodeViewerPage'; import { useWebSocket } from './hooks/useWebSocket'; import { useStreamTokenSync } from './hooks/useCameraStreamToken'; import { ThemeProvider } from './contexts/ThemeContext'; import { ToastProvider } from './contexts/ToastContext'; import { AuthProvider, useAuth } from './contexts/AuthContext'; import { ColorCatalogProvider } from './contexts/ColorCatalogContext'; import { SpoolBuddyLayout } from './components/spoolbuddy/SpoolBuddyLayout'; import { SpoolBuddyDashboard } from './pages/spoolbuddy/SpoolBuddyDashboard'; import { SpoolBuddyAmsPage } from './pages/spoolbuddy/SpoolBuddyAmsPage'; import { SpoolBuddySettingsPage } from './pages/spoolbuddy/SpoolBuddySettingsPage'; import { SpoolBuddyCalibrationPage } from './pages/spoolbuddy/SpoolBuddyCalibrationPage'; import { SpoolBuddyWriteTagPage } from './pages/spoolbuddy/SpoolBuddyWriteTagPage'; import { SpoolBuddyInventoryPage } from './pages/spoolbuddy/SpoolBuddyInventoryPage'; class ErrorBoundary extends Component<{ children: ReactNode }, { error: Error | null; errorInfo: ErrorInfo | null }> { state = { error: null as Error | null, errorInfo: null as ErrorInfo | null }; static getDerivedStateFromError(error: Error) { return { error }; } componentDidCatch(error: Error, errorInfo: ErrorInfo) { this.setState({ errorInfo }); console.error('React crash:', error, errorInfo); } render() { if (this.state.error) { return (
{this.state.error.message}
{this.state.error.stack}