import { useMemo } from 'react'; 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 } from './Menus'; import { useGetStartupConfig } from '~/data-provider'; import ExportAndShareMenu from './ExportAndShareMenu'; import { useMediaQuery, useHasAccess } from '~/hooks'; import BookmarkMenu from './Menus/BookmarkMenu'; import AddMultiConvo from './AddMultiConvo'; const defaultInterface = getConfigDefaults().interface; export default function Header() { const { data: startupConfig } = useGetStartupConfig(); const { navVisible } = useOutletContext(); const modelSpecs = useMemo(() => startupConfig?.modelSpecs?.list ?? [], [startupConfig]); 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 (
{!navVisible && } {} {interfaceConfig.presets === true && interfaceConfig.modelSelect && } {hasAccessToBookmarks === true && } {hasAccessToMultiConvo === true && } {isSmallScreen && ( )}
{!isSmallScreen && ( )}
{/* Empty div for spacing */}
); }