From 40958ffb2ca269210fd87a3a45236e805583c1e1 Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Thu, 13 Feb 2025 13:38:46 +0800 Subject: [PATCH] feat: Add useSidebarIconShow hook to conditionally render sidebar icons --- src/renderer/src/hooks/useSidebarIcon.ts | 8 ++++++++ .../pages/agents/components/AddAgentPopup.tsx | 20 +++++++++++-------- .../src/pages/home/Inputbar/Inputbar.tsx | 10 +++++----- .../settings/AssistantSettings/index.tsx | 9 ++++++--- 4 files changed, 31 insertions(+), 16 deletions(-) create mode 100644 src/renderer/src/hooks/useSidebarIcon.ts diff --git a/src/renderer/src/hooks/useSidebarIcon.ts b/src/renderer/src/hooks/useSidebarIcon.ts new file mode 100644 index 00000000..0bd252d8 --- /dev/null +++ b/src/renderer/src/hooks/useSidebarIcon.ts @@ -0,0 +1,8 @@ +import { SidebarIcon } from '@renderer/types' + +import { useSettings } from './useSettings' + +export function useSidebarIconShow(icon: SidebarIcon) { + const { sidebarIcons } = useSettings() + return sidebarIcons.visible.includes(icon) +} diff --git a/src/renderer/src/pages/agents/components/AddAgentPopup.tsx b/src/renderer/src/pages/agents/components/AddAgentPopup.tsx index 04a6a382..cd169edf 100644 --- a/src/renderer/src/pages/agents/components/AddAgentPopup.tsx +++ b/src/renderer/src/pages/agents/components/AddAgentPopup.tsx @@ -5,6 +5,7 @@ import EmojiPicker from '@renderer/components/EmojiPicker' import { TopView } from '@renderer/components/TopView' import { AGENT_PROMPT } from '@renderer/config/prompts' import { useAgents } from '@renderer/hooks/useAgents' +import { useSidebarIconShow } from '@renderer/hooks/useSidebarIcon' import { fetchGenerate } from '@renderer/services/ApiService' import { getDefaultModel } from '@renderer/services/AssistantService' import { useAppSelector } from '@renderer/store' @@ -37,6 +38,7 @@ const PopupContainer: React.FC = ({ resolve }) => { const [loading, setLoading] = useState(false) const knowledgeState = useAppSelector((state) => state.knowledge) const knowledgeOptions: SelectProps['options'] = [] + const showKnowledgeIcon = useSidebarIconShow('knowledge') knowledgeState.bases.forEach((base) => { knowledgeOptions.push({ @@ -151,14 +153,16 @@ const PopupContainer: React.FC = ({ resolve }) => { disabled={loading} /> - - } + options={knowledgeOptions} + /> + + )} ) diff --git a/src/renderer/src/pages/home/Inputbar/Inputbar.tsx b/src/renderer/src/pages/home/Inputbar/Inputbar.tsx index 811c3ec3..283b698c 100644 --- a/src/renderer/src/pages/home/Inputbar/Inputbar.tsx +++ b/src/renderer/src/pages/home/Inputbar/Inputbar.tsx @@ -16,6 +16,7 @@ import { useAssistant } from '@renderer/hooks/useAssistant' import { modelGenerating, useRuntime } from '@renderer/hooks/useRuntime' import { useMessageStyle, useSettings } from '@renderer/hooks/useSettings' import { useShortcut, useShortcutDisplay } from '@renderer/hooks/useShortcuts' +import { useSidebarIconShow } from '@renderer/hooks/useSidebarIcon' import { useShowTopics } from '@renderer/hooks/useStore' import { addAssistantMessagesToTopic, getDefaultTopic } from '@renderer/services/AssistantService' import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService' @@ -65,8 +66,7 @@ const Inputbar: FC = ({ assistant: _assistant, setActiveTopic }) => { pasteLongTextThreshold, showInputEstimatedTokens, clickAssistantToShowTopic, - autoTranslateWithSpace, - sidebarIcons + autoTranslateWithSpace } = useSettings() const [expended, setExpend] = useState(false) const [estimateTokenCount, setEstimateTokenCount] = useState(0) @@ -90,7 +90,7 @@ const Inputbar: FC = ({ assistant: _assistant, setActiveTopic }) => { const isVision = useMemo(() => isVisionModel(model), [model]) const supportExts = useMemo(() => [...textExts, ...documentExts, ...(isVision ? imageExts : [])], [isVision]) - const showKnowledgeIcon = sidebarIcons.visible.includes('knowledge') + const showKnowledgeIcon = useSidebarIconShow('knowledge') const estimateTextTokens = useCallback(debounce(estimateTxtTokens, 1000), []) const inputTokenCount = useMemo( @@ -453,8 +453,8 @@ const Inputbar: FC = ({ assistant: _assistant, setActiveTopic }) => { }, []) useEffect(() => { - setSelectedKnowledgeBase(assistant.knowledge_base) - }, [assistant.id, assistant.knowledge_base]) + setSelectedKnowledgeBase(showKnowledgeIcon ? assistant.knowledge_base : undefined) + }, [assistant.id, assistant.knowledge_base, showKnowledgeIcon]) const textareaRows = window.innerHeight >= 1000 || isBubbleStyle ? 2 : 1 diff --git a/src/renderer/src/pages/settings/AssistantSettings/index.tsx b/src/renderer/src/pages/settings/AssistantSettings/index.tsx index 008ff9c5..f6359ae4 100644 --- a/src/renderer/src/pages/settings/AssistantSettings/index.tsx +++ b/src/renderer/src/pages/settings/AssistantSettings/index.tsx @@ -2,6 +2,7 @@ import { HStack } from '@renderer/components/Layout' import { TopView } from '@renderer/components/TopView' import { useAgent } from '@renderer/hooks/useAgents' import { useAssistant } from '@renderer/hooks/useAssistant' +import { useSidebarIconShow } from '@renderer/hooks/useSidebarIcon' import { Assistant } from '@renderer/types' import { Menu, Modal } from 'antd' import { useState } from 'react' @@ -34,6 +35,8 @@ const AssistantSettingPopupContainer: React.FC = ({ resolve, ...props }) const updateAssistant = isAgent ? _useAgent.updateAgent : _useAssistant.updateAssistant const updateAssistantSettings = isAgent ? _useAgent.updateAgentSettings : _useAssistant.updateAssistantSettings + const showKnowledgeIcon = useSidebarIconShow('knowledge') + const onOk = () => { setOpen(false) } @@ -59,11 +62,11 @@ const AssistantSettingPopupContainer: React.FC = ({ resolve, ...props }) key: 'messages', label: t('assistants.settings.preset_messages') }, - { + showKnowledgeIcon && { key: 'knowledge_base', label: t('assistants.settings.knowledge_base') } - ] + ].filter(Boolean) as { key: string; label: string }[] return ( = ({ resolve, ...props }) updateAssistantSettings={updateAssistantSettings} /> )} - {menu === 'knowledge_base' && ( + {menu === 'knowledge_base' && showKnowledgeIcon && (