import React, { useState, useEffect } from 'react'; import { Outlet } from 'react-router-dom'; import type { ContextType } from '~/common'; import { useSearchEnabled, useAssistantsMap, useAuthContext, useAgentsMap, useFileMap, } from '~/hooks'; import { PromptGroupsProvider, AssistantsMapContext, AgentsMapContext, SetConvoProvider, FileMapContext, } from '~/Providers'; import { useUserTermsQuery, useGetStartupConfig } from '~/data-provider'; import { TermsAndConditionsModal } from '~/components/ui'; import { Nav, MobileNav } from '~/components/Nav'; import { useHealthCheck } from '~/data-provider'; import { Banner } from '~/components/Banners'; export default function Root() { const [showTerms, setShowTerms] = useState(false); const [bannerHeight, setBannerHeight] = useState(0); const [navVisible, setNavVisible] = useState(() => { const savedNavVisible = localStorage.getItem('navVisible'); return savedNavVisible !== null ? JSON.parse(savedNavVisible) : true; }); const { isAuthenticated, logout } = useAuthContext(); // Global health check - runs once per authenticated session useHealthCheck(isAuthenticated); const assistantsMap = useAssistantsMap({ isAuthenticated }); const agentsMap = useAgentsMap({ isAuthenticated }); const fileMap = useFileMap({ isAuthenticated }); const { data: config } = useGetStartupConfig(); const { data: termsData } = useUserTermsQuery({ enabled: isAuthenticated && config?.interface?.termsOfService?.modalAcceptance === true, }); useSearchEnabled(isAuthenticated); useEffect(() => { if (termsData) { setShowTerms(!termsData.termsAccepted); } }, [termsData]); const handleAcceptTerms = () => { setShowTerms(false); }; const handleDeclineTerms = () => { setShowTerms(false); logout('/login?redirect=false'); }; if (!isAuthenticated) { return null; } return (
{config?.interface?.termsOfService?.modalAcceptance === true && ( )}
); }