diff --git a/client/src/Providers/BadgeRowContext.tsx b/client/src/Providers/BadgeRowContext.tsx index d39a631e83..4615c7f4d1 100644 --- a/client/src/Providers/BadgeRowContext.tsx +++ b/client/src/Providers/BadgeRowContext.tsx @@ -1,12 +1,14 @@ import React, { createContext, useContext } from 'react'; -import { useMCPSelect, useToolToggle, useCodeApiKeyForm, useSearchApiKeyForm } from '~/hooks'; import { Tools, LocalStorageKeys } from 'librechat-data-provider'; +import { useMCPSelect, useToolToggle, useCodeApiKeyForm, useSearchApiKeyForm } from '~/hooks'; interface BadgeRowContextType { conversationId?: string | null; mcpSelect: ReturnType; - codeInterpreter: ReturnType; webSearch: ReturnType; + codeInterpreter: ReturnType; + codeApiKeyForm: ReturnType; + searchApiKeyForm: ReturnType; } const BadgeRowContext = createContext(undefined); @@ -25,11 +27,12 @@ interface BadgeRowProviderProps { } export default function BadgeRowProvider({ children, conversationId }: BadgeRowProviderProps) { - // MCPSelect hook + /** MCPSelect hook */ const mcpSelect = useMCPSelect({ conversationId }); - // CodeInterpreter hooks - const { setIsDialogOpen: setCodeDialogOpen } = useCodeApiKeyForm({}); + /** CodeInterpreter hooks */ + const codeApiKeyForm = useCodeApiKeyForm({}); + const { setIsDialogOpen: setCodeDialogOpen } = codeApiKeyForm; const codeInterpreter = useToolToggle({ conversationId, @@ -42,8 +45,9 @@ export default function BadgeRowProvider({ children, conversationId }: BadgeRowP }, }); - // WebSearch hooks - const { setIsDialogOpen: setWebSearchDialogOpen } = useSearchApiKeyForm({}); + /** WebSearch hooks */ + const searchApiKeyForm = useSearchApiKeyForm({}); + const { setIsDialogOpen: setWebSearchDialogOpen } = searchApiKeyForm; const webSearch = useToolToggle({ conversationId, @@ -57,10 +61,12 @@ export default function BadgeRowProvider({ children, conversationId }: BadgeRowP }); const value: BadgeRowContextType = { - conversationId, mcpSelect, - codeInterpreter, webSearch, + conversationId, + codeApiKeyForm, + codeInterpreter, + searchApiKeyForm, }; return {children}; diff --git a/client/src/components/Chat/Input/CodeInterpreter.tsx b/client/src/components/Chat/Input/CodeInterpreter.tsx index 1fab2d99c2..7a06887dd2 100644 --- a/client/src/components/Chat/Input/CodeInterpreter.tsx +++ b/client/src/components/Chat/Input/CodeInterpreter.tsx @@ -2,15 +2,16 @@ import React, { memo, useMemo, useRef } from 'react'; import { TerminalSquareIcon } from 'lucide-react'; import { AuthType, PermissionTypes, Permissions } from 'librechat-data-provider'; import ApiKeyDialog from '~/components/SidePanel/Agents/Code/ApiKeyDialog'; -import { useLocalize, useHasAccess, useCodeApiKeyForm } from '~/hooks'; import CheckboxButton from '~/components/ui/CheckboxButton'; +import { useLocalize, useHasAccess } from '~/hooks'; import { useBadgeRowContext } from '~/Providers'; function CodeInterpreter() { const triggerRef = useRef(null); const localize = useLocalize(); - const { codeInterpreter } = useBadgeRowContext(); + const { codeInterpreter, codeApiKeyForm } = useBadgeRowContext(); const { toggleState: runCode, debouncedChange, authData } = codeInterpreter; + const { methods, onSubmit, isDialogOpen, setIsDialogOpen, handleRevokeApiKey } = codeApiKeyForm; const canRunCode = useHasAccess({ permissionType: PermissionTypes.RUN_CODE, @@ -18,8 +19,6 @@ function CodeInterpreter() { }); const authType = useMemo(() => authData?.message ?? false, [authData?.message]); - const { methods, onSubmit, isDialogOpen, setIsDialogOpen, handleRevokeApiKey } = - useCodeApiKeyForm({}); if (!canRunCode) { return null; diff --git a/client/src/components/Chat/Input/WebSearch.tsx b/client/src/components/Chat/Input/WebSearch.tsx index dcf3d94471..455aa2d21b 100644 --- a/client/src/components/Chat/Input/WebSearch.tsx +++ b/client/src/components/Chat/Input/WebSearch.tsx @@ -2,15 +2,16 @@ import React, { memo, useRef, useMemo } from 'react'; import { Globe } from 'lucide-react'; import { Permissions, PermissionTypes } from 'librechat-data-provider'; import ApiKeyDialog from '~/components/SidePanel/Agents/Search/ApiKeyDialog'; -import { useLocalize, useHasAccess, useSearchApiKeyForm } from '~/hooks'; import CheckboxButton from '~/components/ui/CheckboxButton'; +import { useLocalize, useHasAccess } from '~/hooks'; import { useBadgeRowContext } from '~/Providers'; function WebSearch() { const triggerRef = useRef(null); const localize = useLocalize(); - const { webSearch: webSearchData } = useBadgeRowContext(); + const { webSearch: webSearchData, searchApiKeyForm } = useBadgeRowContext(); const { toggleState: webSearch, debouncedChange, authData } = webSearchData; + const { methods, onSubmit, isDialogOpen, setIsDialogOpen, handleRevokeApiKey } = searchApiKeyForm; const canUseWebSearch = useHasAccess({ permissionType: PermissionTypes.WEB_SEARCH, @@ -18,8 +19,6 @@ function WebSearch() { }); const authTypes = useMemo(() => authData?.authTypes ?? [], [authData?.authTypes]); - const { methods, onSubmit, isDialogOpen, setIsDialogOpen, handleRevokeApiKey } = - useSearchApiKeyForm({}); if (!canUseWebSearch) { return null;