import React, { useState, useEffect } from 'react'; import { Outlet } from 'react-router-dom'; import type { ContextType } from '~/common'; import { AgentsMapContext, AssistantsMapContext, FileMapContext, SearchContext, SetConvoProvider, } from '~/Providers'; import { useAuthContext, useAssistantsMap, useAgentsMap, useFileMap, useSearch } from '~/hooks'; import TermsAndConditionsModal from '~/components/ui/TermsAndConditionsModal'; import { useUserTermsQuery, useGetStartupConfig } from '~/data-provider'; import { Nav, MobileNav } from '~/components/Nav'; 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(); const assistantsMap = useAssistantsMap({ isAuthenticated }); const agentsMap = useAgentsMap({ isAuthenticated }); const fileMap = useFileMap({ isAuthenticated }); const search = useSearch({ isAuthenticated }); const { data: config } = useGetStartupConfig(); const { data: termsData } = useUserTermsQuery({ enabled: isAuthenticated && config?.interface?.termsOfService?.modalAcceptance === true, }); useEffect(() => { if (termsData) { setShowTerms(!termsData.termsAccepted); } }, [termsData]); const handleAcceptTerms = () => { setShowTerms(false); }; // Pass the desired redirect parameter to logout const handleDeclineTerms = () => { setShowTerms(false); logout('/login?redirect=false'); }; if (!isAuthenticated) { return null; } return (
{config?.interface?.termsOfService?.modalAcceptance === true && ( )}
); }