import { createBrowserRouter, Navigate, RouterProvider, } from "react-router-dom"; import classNames from "classnames"; import AppProvider, { useAppContext } from "./contexts/AppContext"; import { useAuthContext } from "./contexts/AuthContext"; import { useThemeContext } from "./contexts/ThemeContext"; import ChatProvider from "./contexts/ChatContext"; import { ComponentsProvider, useComponents } from "./contexts/ComponentContext"; import { usePageAccess } from "./hooks/usePageAccess"; import AnalyticsLayout from "./layouts/AnalyticsLayout"; import Analytics from "./components/Analytics/Analytics"; import ChatInput from "./components/Chat/ChatInput"; import Header from "./components/Header"; import Login from "./components/Login"; import SessionModal from "./components/SessionEditor/SessionEditorModal"; import SettingsModal from "./components/Settings/SettingsModal"; import Sidebar from "./components/Sidebar"; import LoadingScreen from "./components/Base/LoadingScreen"; import Chat from "./components/Chat/Chat"; import { CreateRootConfig } from "./CreateRoot"; interface ProtectedRouteProps { children: React.ReactElement; requiredAccess?: string[]; } interface AppProps { customChatComponent?: React.ComponentType; config?: CreateRootConfig; } const Layout = () => { const { configs, customConfig, isSidebarOpen, toggleSidebar } = useAppContext(); const { ChatComponent } = useComponents(); const { chatBackground, theme } = useThemeContext(); const ActiveChatComponent = ChatComponent || Chat; const defaultFlow = configs?.default_flow; const sessionModal = configs?.list_flows || (Array.isArray(defaultFlow) && defaultFlow.length > 1) ? : null; if (!configs) { return ; } return (
{sessionModal}
); }; function AppContent({ customChatComponent, config }: AppProps) { const { isLoading, user } = useAuthContext(); if (isLoading) { return ; } if (!user) { const router = createBrowserRouter([ { path: "/login", element: , }, { path: "*", element: , }, ]); return ; } const CheckAccess = ({ children, requiredAccess }: ProtectedRouteProps) => { const { hasAccess } = usePageAccess(); if (requiredAccess && !requiredAccess.every((access) => hasAccess[access as keyof typeof hasAccess])) { return ; } if (requiredAccess?.includes('analytics')) { return children; } return ( {children} ); }; const Protected = ({ children, requiredAccess }: ProtectedRouteProps) => ( {children} ); const router = createBrowserRouter([ { path: "/", element: ( ), }, { path: "/analytics", element: ( ), }, { path: "/login", element: , }, { path: "*", element: , }, ]); return ; } function App(props: AppProps) { return (
); } export default App;