import React, { Component, ErrorInfo, ReactNode } from "react"; import { BrowserRouter, Navigate, Route, Routes } from "react-router-dom"; import { CmsLayout } from "./components/CmsLayout"; import { useSession } from "./lib/auth-client"; import { AccountSettingsPage } from "./routes/AccountSettingsPage"; import { AgentDetailPage } from "./routes/AgentDetailPage"; import { AgentEditPage } from "./routes/AgentEditPage"; import { AgentNewPage } from "./routes/AgentNewPage"; import { AgentsPage } from "./routes/AgentsPage"; import { AuthCallbackPage } from "./routes/AuthCallbackPage"; import { AuthPage } from "./routes/AuthPage"; import { AuthVerifyPage } from "./routes/AuthVerifyPage"; import { AdminDashboardPage } from "./routes/admin/AdminDashboardPage"; import { AdminLayout } from "./routes/admin/AdminLayout"; import { AdminMachinesPage } from "./routes/admin/AdminMachinesPage"; import { AdminUsersPage } from "./routes/admin/AdminUsersPage"; import { BoardLabelsPage } from "./routes/BoardLabelsPage"; import { BoardPage } from "./routes/BoardPage"; import { BoardSettingsPage } from "./routes/BoardSettingsPage"; import { HomePage } from "./routes/HomePage"; import { LandingPage } from "./routes/LandingPage"; import { MachineDetailPage } from "./routes/MachineDetailPage"; import { MachinesPage } from "./routes/MachinesPage"; import { MaintainerDetailPage } from "./routes/MaintainerDetailPage"; import { MockChatPage } from "./routes/MockChatPage"; import { NewBoardPage } from "./routes/NewBoardPage"; import { OnboardingPage } from "./routes/OnboardingPage"; import { ProjectDetailPage } from "./routes/ProjectDetailPage"; import { ProjectsPage } from "./routes/ProjectsPage"; import { RepositoriesPage } from "./routes/RepositoriesPage"; import { SharePage } from "./routes/SharePage"; import { SkillsPage } from "./routes/SkillsPage"; interface ErrorBoundaryProps { children?: ReactNode; } interface ErrorBoundaryState { hasError: boolean; error?: Error; } class ErrorBoundary extends Component { public state: ErrorBoundaryState = { hasError: false, }; public static getDerivedStateFromError(error: Error): ErrorBoundaryState { return { hasError: true, error }; } public componentDidCatch(error: Error, errorInfo: ErrorInfo) { console.error("Uncaught React error:", error, errorInfo); } public render() { if (this.state.hasError) { return (

Đã xảy ra lỗi hệ thống!

{this.state.error?.message || "Không thể tải giao diện ứng dụng."}

); } return this.props.children; } } function ProtectedRoute({ children }: { children: React.ReactNode }) { const { data: session, isPending } = useSession(); if (isPending) return null; if (!session) return ; return <>{children}; } function AdminRoute({ children }: { children: React.ReactNode }) { const { data: session, isPending } = useSession(); if (isPending) return null; if (!session) return ; if ((session.user as any).role !== "admin") return ; return <>{children}; } function RootRoute() { const { data: session, isPending } = useSession(); if (isPending) return null; if (!session) return ; return ; } export function App() { return ( } /> } /> } /> } /> } /> } /> } /> } /> } > } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } > } /> } /> } /> ); }