import { Link, useMatches } from '@tanstack/react-router' import { route } from '@/constants/routes' import { useTranslation } from '@/i18n/react-i18next-compat' import { useModelProvider } from '@/hooks/useModelProvider' import { useGeneralSetting } from '@/hooks/useGeneralSetting' const SettingsMenu = () => { const { t } = useTranslation() const { providers } = useModelProvider() const { experimentalFeatures } = useGeneralSetting() const firstItemProvider = providers.length > 0 ? providers[0].provider : 'llama.cpp' const matches = useMatches() const isActive = matches.some( (match) => match.routeId === '/settings/providers/$providerName' && 'providerName' in match.params ) const menuSettings = [ { title: 'common:general', route: route.settings.general, }, { title: 'common:appearance', route: route.settings.appearance, }, { title: 'common:privacy', route: route.settings.privacy, }, { title: 'common:keyboardShortcuts', route: route.settings.shortcuts, }, { title: 'common:hardware', route: route.settings.hardware, }, // Only show MCP Servers when experimental features are enabled ...(experimentalFeatures ? [ { title: 'common:mcp-servers', route: route.settings.mcp_servers, }, ] : []), { title: 'common:local_api_server', route: route.settings.local_api_server, }, { title: 'common:https_proxy', route: route.settings.https_proxy, }, { title: 'common:extensions', route: route.settings.extensions, }, ] return (
{menuSettings.map((menu, index) => { // Render the menu item const menuItem = ( {t(menu.title)} ) if (index === 2) { return (
{menuItem} {/* Model Providers Link with default parameter */} {isActive ? (
{t('common:modelProviders')}
) : ( {t('common:modelProviders')} )}
) } // For other menu items, just render them normally return menuItem })}
) } export default SettingsMenu