import { Download } from 'lucide-react'; import { useRecoilValue } from 'recoil'; import { Fragment, useState, memo } from 'react'; import { useLocation } from 'react-router-dom'; import { Menu, Transition } from '@headlessui/react'; import { useGetUserBalance, useGetStartupConfig } from 'librechat-data-provider/react-query'; import type { TConversation } from 'librechat-data-provider'; import { ExportModal } from './ExportConversation'; import { LinkIcon, GearIcon } from '~/components'; import { useAuthContext } from '~/hooks/AuthContext'; import { useLocalize } from '~/hooks'; import Settings from './Settings'; import NavLink from './NavLink'; import Logout from './Logout'; import { cn } from '~/utils/'; import store from '~/store'; function NavLinks() { const localize = useLocalize(); const location = useLocation(); const { user, isAuthenticated } = useAuthContext(); const { data: startupConfig } = useGetStartupConfig(); const balanceQuery = useGetUserBalance({ enabled: !!isAuthenticated && startupConfig?.checkBalance, }); const [showExports, setShowExports] = useState(false); const [showSettings, setShowSettings] = useState(false); let conversation; const activeConvo = useRecoilValue(store.conversationByIndex(0)); const globalConvo = useRecoilValue(store.conversation) ?? ({} as TConversation); if (location.state?.from?.pathname.includes('/chat')) { conversation = globalConvo; } else { conversation = activeConvo; } const exportable = conversation && conversation.conversationId && conversation.conversationId !== 'new' && conversation.conversationId !== 'search'; const clickHandler = () => { if (exportable) { setShowExports(true); } }; return ( <> {({ open }) => ( <> {startupConfig?.checkBalance && balanceQuery.data && (
{`Balance: ${balanceQuery.data}`}
)}
{user?.name || localize('com_nav_user')}
} text={localize('com_nav_export_conversation')} clickHandler={clickHandler} />
} text={localize('com_nav_help_faq')} clickHandler={() => window.open('https://docs.librechat.ai/', '_blank')} /> } text={localize('com_nav_settings')} clickHandler={() => setShowSettings(true)} />
)}
{showExports && ( )} {showSettings && } ); } export default memo(NavLinks);