From 52d15802d927f7ada697b09f188b0faa0b1b62ca Mon Sep 17 00:00:00 2001 From: Faisal Amir Date: Wed, 25 Jun 2025 14:10:54 +0700 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8enhancement:=20experimental=20feature?= =?UTF-8?q?=20toggle=20(#5514)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web-app/src/containers/SettingsMenu.tsx | 91 +++++++++++++------------ web-app/src/hooks/useGeneralSetting.ts | 4 ++ web-app/src/routes/settings/general.tsx | 17 ++++- 3 files changed, 66 insertions(+), 46 deletions(-) diff --git a/web-app/src/containers/SettingsMenu.tsx b/web-app/src/containers/SettingsMenu.tsx index c23ed6acf..5c3c0768f 100644 --- a/web-app/src/containers/SettingsMenu.tsx +++ b/web-app/src/containers/SettingsMenu.tsx @@ -2,55 +2,12 @@ import { Link, useMatches } from '@tanstack/react-router' import { route } from '@/constants/routes' import { useTranslation } from 'react-i18next' import { useModelProvider } from '@/hooks/useModelProvider' -import { isProd } from '@/lib/version' - -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: 'Hardware', - route: route.settings.hardware, - }, - // Only show MCP Servers in non-production environment - ...(!isProd - ? [ - { - title: 'MCP Servers', - route: route.settings.mcp_servers, - }, - ] - : []), - { - title: 'Local API Server', - route: route.settings.local_api_server, - }, - { - title: 'HTTPS Proxy', - route: route.settings.https_proxy, - }, - { - title: 'Extensions', - route: route.settings.extensions, - }, -] +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() @@ -60,6 +17,50 @@ const SettingsMenu = () => { '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: 'Hardware', + route: route.settings.hardware, + }, + // Only show MCP Servers when experimental features are enabled + ...(experimentalFeatures + ? [ + { + title: 'MCP Servers', + route: route.settings.mcp_servers, + }, + ] + : []), + { + title: 'Local API Server', + route: route.settings.local_api_server, + }, + { + title: 'HTTPS Proxy', + route: route.settings.https_proxy, + }, + { + title: 'Extensions', + route: route.settings.extensions, + }, + ] + return (
diff --git a/web-app/src/hooks/useGeneralSetting.ts b/web-app/src/hooks/useGeneralSetting.ts index 5335f245c..6f4a36fa4 100644 --- a/web-app/src/hooks/useGeneralSetting.ts +++ b/web-app/src/hooks/useGeneralSetting.ts @@ -5,6 +5,8 @@ import { localStorageKey } from '@/constants/localStorage' type LeftPanelStoreState = { currentLanguage: Language spellCheckChatInput: boolean + experimentalFeatures: boolean + setExperimentalFeatures: (value: boolean) => void setSpellCheckChatInput: (value: boolean) => void setCurrentLanguage: (value: Language) => void } @@ -14,6 +16,8 @@ export const useGeneralSetting = create()( (set) => ({ currentLanguage: 'en', spellCheckChatInput: true, + experimentalFeatures: false, + setExperimentalFeatures: (value) => set({ experimentalFeatures: value }), setSpellCheckChatInput: (value) => set({ spellCheckChatInput: value }), setCurrentLanguage: (value) => set({ currentLanguage: value }), }), diff --git a/web-app/src/routes/settings/general.tsx b/web-app/src/routes/settings/general.tsx index cfdd4f298..7a33c5308 100644 --- a/web-app/src/routes/settings/general.tsx +++ b/web-app/src/routes/settings/general.tsx @@ -64,7 +64,12 @@ const openFileTitle = (): string => { function General() { const { t } = useTranslation() - const { spellCheckChatInput, setSpellCheckChatInput } = useGeneralSetting() + const { + spellCheckChatInput, + setSpellCheckChatInput, + experimentalFeatures, + setExperimentalFeatures, + } = useGeneralSetting() const { checkForUpdate } = useAppUpdater() const [janDataFolder, setJanDataFolder] = useState() const [isCopied, setIsCopied] = useState(false) @@ -390,6 +395,16 @@ function General() { /> } /> + setExperimentalFeatures(e)} + /> + } + />