import { useRecoilValue } from 'recoil'; import { ChevronDownIcon } from 'lucide-react'; import { useState, useEffect, useMemo } from 'react'; import { useAvailablePluginsQuery } from 'librechat-data-provider/react-query'; import { Button, SelectDropDown, SelectDropDownPop, MultiSelectDropDown, useMediaQuery, } from '@librechat/client'; import type { TPlugin } from 'librechat-data-provider'; import type { TModelSelectProps } from '~/common'; import { useSetIndexOptions, useAuthContext, useLocalize } from '~/hooks'; import { cn, cardStyle, selectPlugins, processPlugins } from '~/utils'; import MultiSelectPop from './MultiSelectPop'; import store from '~/store'; export default function PluginsByIndex({ conversation, setOption, models, showAbove, popover = false, }: TModelSelectProps) { const localize = useLocalize(); const { user } = useAuthContext(); const [visible, setVisibility] = useState(true); const isSmallScreen = useMediaQuery('(max-width: 640px)'); const availableTools = useRecoilValue(store.availableTools); const { checkPluginSelection, setTools } = useSetIndexOptions(); const { data: allPlugins } = useAvailablePluginsQuery({ enabled: !!user?.plugins, select: selectPlugins, }); useEffect(() => { if (isSmallScreen) { setVisibility(false); } }, [isSmallScreen]); const conversationTools: TPlugin[] = useMemo(() => { if (!conversation?.tools) { return []; } return processPlugins(conversation.tools, allPlugins?.map); }, [conversation, allPlugins]); const availablePlugins = useMemo(() => { if (!availableTools) { return []; } return Object.values(availableTools); }, [availableTools]); if (!conversation) { return null; } const Menu = popover ? SelectDropDownPop : SelectDropDown; const PluginsMenu = popover ? MultiSelectPop : MultiSelectDropDown; return ( <> {visible && ( <> )} ); }