refactor: consolidate codeApiKeyForm and searchApiKeyForm from CodeInterpreter and WebSearch to utilize new context properties

This commit is contained in:
Danny Avila 2025-06-22 08:48:31 -04:00
parent cf24d66101
commit 727d4a8a77
No known key found for this signature in database
GPG key ID: BF31EEB2C5CA0956
3 changed files with 21 additions and 17 deletions

View file

@ -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<typeof useMCPSelect>;
codeInterpreter: ReturnType<typeof useToolToggle>;
webSearch: ReturnType<typeof useToolToggle>;
codeInterpreter: ReturnType<typeof useToolToggle>;
codeApiKeyForm: ReturnType<typeof useCodeApiKeyForm>;
searchApiKeyForm: ReturnType<typeof useSearchApiKeyForm>;
}
const BadgeRowContext = createContext<BadgeRowContextType | undefined>(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 <BadgeRowContext.Provider value={value}>{children}</BadgeRowContext.Provider>;

View file

@ -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<HTMLInputElement>(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;

View file

@ -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<HTMLInputElement>(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;