import { useRecoilState } from 'recoil'; import * as Select from '@ariakit/react/select'; import { Fragment, useState, memo } from 'react'; import { FileText, LogOut } from 'lucide-react'; import { useGetUserBalance, useGetStartupConfig } from 'librechat-data-provider/react-query'; import { LinkIcon, GearIcon, DropdownMenuSeparator } from '~/components'; import FilesView from '~/components/Chat/Input/Files/FilesView'; import { useAuthContext } from '~/hooks/AuthContext'; import useAvatar from '~/hooks/Messages/useAvatar'; import { UserIcon } from '~/components/svg'; import { useLocalize } from '~/hooks'; import Settings from './Settings'; import store from '~/store'; function AccountSettings() { const localize = useLocalize(); const { user, isAuthenticated, logout } = useAuthContext(); const { data: startupConfig } = useGetStartupConfig(); const balanceQuery = useGetUserBalance({ enabled: !!isAuthenticated && startupConfig?.checkBalance, }); const [showSettings, setShowSettings] = useState(false); const [showFiles, setShowFiles] = useRecoilState(store.showFiles); const avatarSrc = useAvatar(user); const name = user?.avatar ?? user?.username ?? ''; return (
{name.length === 0 ? ( ) : ( {`${name}'s )}
{user?.name ?? user?.username ?? localize('com_nav_user')}
{user?.email ?? localize('com_nav_user')}
{startupConfig?.checkBalance === true && balanceQuery.data != null && !isNaN(parseFloat(balanceQuery.data)) && ( <>
{`Balance: ${parseFloat(balanceQuery.data).toFixed(2)}`}
)} setShowFiles(true)} className="select-item text-sm" > {startupConfig?.helpAndFaqURL !== '/' && ( window.open(startupConfig?.helpAndFaqURL, '_blank')} className="select-item text-sm" > )} setShowSettings(true)} className="select-item text-sm" > logout()} value="logout" className="select-item text-sm" > {localize('com_nav_log_out')}
{showFiles && } {showSettings && }
); } export default memo(AccountSettings);