import { useMemo } from 'react'; import { useMediaQuery } from '@librechat/client'; import { useOutletContext } from 'react-router-dom'; import { getConfigDefaults, PermissionTypes, Permissions } from 'librechat-data-provider'; import type { ContextType } from '~/common'; import ModelSelector from './Menus/Endpoints/ModelSelector'; import { PresetsMenu, HeaderNewChat, OpenSidebar } from './Menus'; import { useGetStartupConfig } from '~/data-provider'; import ExportAndShareMenu from './ExportAndShareMenu'; import BookmarkMenu from './Menus/BookmarkMenu'; import { TemporaryChat } from './TemporaryChat'; import AddMultiConvo from './AddMultiConvo'; import { useHasAccess } from '~/hooks'; const defaultInterface = getConfigDefaults().interface; export default function Header() { const { data: startupConfig } = useGetStartupConfig(); const { navVisible, setNavVisible } = useOutletContext(); const interfaceConfig = useMemo( () => startupConfig?.interface ?? defaultInterface, [startupConfig], ); const hasAccessToBookmarks = useHasAccess({ permissionType: PermissionTypes.BOOKMARKS, permission: Permissions.USE, }); const hasAccessToMultiConvo = useHasAccess({ permissionType: PermissionTypes.MULTI_CONVO, permission: Permissions.USE, }); const isSmallScreen = useMediaQuery('(max-width: 768px)'); return (
{interfaceConfig.presets === true && interfaceConfig.modelSelect && } {hasAccessToBookmarks === true && } {hasAccessToMultiConvo === true && } {isSmallScreen && ( <> )}
{!isSmallScreen && (
)}
{/* Empty div for spacing */}
); }