import { useLocation } from 'react-router-dom'; import { Fragment, useState, memo } from 'react'; import { Download, FileText } from 'lucide-react'; import { Menu, Transition } from '@headlessui/react'; import { useRecoilValue, useRecoilState } from 'recoil'; import { useGetUserBalance, useGetStartupConfig } from 'librechat-data-provider/react-query'; import type { TConversation } from 'librechat-data-provider'; import FilesView from '~/components/Chat/Input/Files/FilesView'; import { useAuthContext } from '~/hooks/AuthContext'; import useAvatar from '~/hooks/Messages/useAvatar'; import { ExportModal } from './ExportConversation'; import { LinkIcon, GearIcon } from '~/components'; 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); const [showFiles, setShowFiles] = useRecoilState(store.showFiles); const activeConvo = useRecoilValue(store.conversationByIndex(0)); const globalConvo = useRecoilValue(store.conversation) ?? ({} as TConversation); const avatarSrc = useAvatar(user); let conversation: TConversation | null | undefined; 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 ( <>
{showExports && (