import { Button } from "@/components/ui/button" import { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger } from "@/components/ui/dropdown-menu" import { Input } from "@/components/ui/input" import { ChatbotUIContext } from "@/context/context" import { Tables } from "@/supabase/types" import { IconBolt, IconChevronDown, IconCircleCheckFilled } from "@tabler/icons-react" import { FC, useContext, useEffect, useRef, useState } from "react" import { useTranslation } from 'react-i18next' interface AssistantToolSelectProps { selectedAssistantTools: Tables<"tools">[] onAssistantToolsSelect: (tool: Tables<"tools">) => void } export const AssistantToolSelect: FC = ({ selectedAssistantTools, onAssistantToolsSelect }) => { const { t } = useTranslation() const { tools } = useContext(ChatbotUIContext) const inputRef = useRef(null) const triggerRef = useRef(null) const [isOpen, setIsOpen] = useState(false) const [search, setSearch] = useState("") useEffect(() => { if (isOpen) { setTimeout(() => { inputRef.current?.focus() }, 100) // FIX: hacky } }, [isOpen]) const handleToolSelect = (tool: Tables<"tools">) => { onAssistantToolsSelect(tool) } if (!tools) return null return ( { setIsOpen(isOpen) setSearch("") }} > setSearch(e.target.value)} onKeyDown={e => e.stopPropagation()} /> {selectedAssistantTools .filter(item => item.name.toLowerCase().includes(search.toLowerCase()) ) .map(tool => ( selectedAssistantRetrieval.id === tool.id )} onSelect={handleToolSelect} /> ))} {tools .filter( tool => !selectedAssistantTools.some( selectedAssistantRetrieval => selectedAssistantRetrieval.id === tool.id ) && tool.name.toLowerCase().includes(search.toLowerCase()) ) .map(tool => ( selectedAssistantRetrieval.id === tool.id )} onSelect={handleToolSelect} /> ))} ) } interface AssistantToolItemProps { tool: Tables<"tools"> selected: boolean onSelect: (tool: Tables<"tools">) => void } const AssistantToolItem: FC = ({ tool, selected, onSelect }) => { const handleSelect = () => { onSelect(tool) } return (
{tool.name}
{selected && ( )}
) }