import React, { useState, useEffect } from 'react'; import { Outlet, useNavigate } from 'react-router-dom'; import { useGetStartupConfig } from 'librechat-data-provider/react-query'; import { useUserTermsQuery } from '~/data-provider'; import type { ContextType } from '~/common'; import { AgentsMapContext, AssistantsMapContext, FileMapContext, SearchContext } from '~/Providers'; import { useAuthContext, useAssistantsMap, useAgentsMap, useFileMap, useSearch } from '~/hooks'; import { Nav, MobileNav } from '~/components/Nav'; import TermsAndConditionsModal from '~/components/ui/TermsAndConditionsModal'; import { Banner } from '~/components/Banners'; export default function Root() { const { isAuthenticated, logout } = useAuthContext(); const navigate = useNavigate(); const [navVisible, setNavVisible] = useState(() => { const savedNavVisible = localStorage.getItem('navVisible'); return savedNavVisible !== null ? JSON.parse(savedNavVisible) : true; }); const [bannerHeight, setBannerHeight] = useState(0); const search = useSearch({ isAuthenticated }); const fileMap = useFileMap({ isAuthenticated }); const assistantsMap = useAssistantsMap({ isAuthenticated }); const agentsMap = useAgentsMap({ isAuthenticated }); const [showTerms, setShowTerms] = useState(false); 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); }; const handleDeclineTerms = () => { setShowTerms(false); logout(); navigate('/login'); }; if (!isAuthenticated) { return null; } return (
{config?.interface?.termsOfService?.modalAcceptance === true && ( )}
); }