mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-27 13:48:51 +01:00
* 🔍 feat: Add SearXNG Web Search support and enhance ApiKeyDialog - Updated WebSearch component to include authentication data for web search functionality so it won't show badge after being revoked - Refactored ApiKeyDialog to streamline provider, scraper, and reranker selection with new InputSection component - Added support for SearXNG as a search provider and updated translation files accordingly - Improved form handling in useAuthSearchTool to accommodate new API keys and URLs * 📜 chore: remove unused i18next key * 📦 chore: address comments (swap API key and URL fields in SearXNG config, change input fields to 'text' from 'password' * 📦 chore: make URL fields go first in ApiKeyDialog * chore: bump @librechat/agents to v2.4.52 * ci: update webSearch configuration to include searxng fields in AppService.spec.js --------- Co-authored-by: Danny Avila <danny@librechat.ai>
45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
import { useRef, useState, useCallback } from 'react';
|
|
import { useForm } from 'react-hook-form';
|
|
import useAuthSearchTool from '~/hooks/Plugins/useAuthSearchTool';
|
|
import type { SearchApiKeyFormData } from '~/hooks/Plugins/useAuthSearchTool';
|
|
|
|
export default function useSearchApiKeyForm({
|
|
onSubmit,
|
|
onRevoke,
|
|
}: {
|
|
onSubmit?: () => void;
|
|
onRevoke?: () => void;
|
|
}) {
|
|
const methods = useForm<SearchApiKeyFormData>();
|
|
const menuTriggerRef = useRef<HTMLButtonElement>(null);
|
|
const badgeTriggerRef = useRef<HTMLInputElement>(null);
|
|
const [isDialogOpen, setIsDialogOpen] = useState(false);
|
|
const { installTool, removeTool } = useAuthSearchTool({ isEntityTool: true });
|
|
const { reset } = methods;
|
|
|
|
const onSubmitHandler = useCallback(
|
|
(data: SearchApiKeyFormData) => {
|
|
installTool(data);
|
|
setIsDialogOpen(false);
|
|
onSubmit?.();
|
|
},
|
|
[onSubmit, installTool],
|
|
);
|
|
|
|
const handleRevokeApiKey = useCallback(() => {
|
|
reset();
|
|
removeTool();
|
|
setIsDialogOpen(false);
|
|
onRevoke?.();
|
|
}, [reset, onRevoke, removeTool]);
|
|
|
|
return {
|
|
methods,
|
|
isDialogOpen,
|
|
setIsDialogOpen,
|
|
handleRevokeApiKey,
|
|
onSubmit: onSubmitHandler,
|
|
badgeTriggerRef,
|
|
menuTriggerRef,
|
|
};
|
|
}
|