| import { | |
| useMemo, | |
| useState, | |
| } from 'react' | |
| import type { | |
| OnSelectBlock, | |
| ToolWithProvider, | |
| } from '../types' | |
| import { useStore } from '../store' | |
| import { ToolTypeEnum } from './types' | |
| import Tools from './tools' | |
| import { useToolTabs } from './hooks' | |
| import cn from '@/utils/classnames' | |
| import { useGetLanguage } from '@/context/i18n' | |
| type AllToolsProps = { | |
| searchText: string | |
| onSelect: OnSelectBlock | |
| } | |
| const AllTools = ({ | |
| searchText, | |
| onSelect, | |
| }: AllToolsProps) => { | |
| const language = useGetLanguage() | |
| const tabs = useToolTabs() | |
| const [activeTab, setActiveTab] = useState(ToolTypeEnum.All) | |
| const buildInTools = useStore(s => s.buildInTools) | |
| const customTools = useStore(s => s.customTools) | |
| const workflowTools = useStore(s => s.workflowTools) | |
| const tools = useMemo(() => { | |
| let mergedTools: ToolWithProvider[] = [] | |
| if (activeTab === ToolTypeEnum.All) | |
| mergedTools = [...buildInTools, ...customTools, ...workflowTools] | |
| if (activeTab === ToolTypeEnum.BuiltIn) | |
| mergedTools = buildInTools | |
| if (activeTab === ToolTypeEnum.Custom) | |
| mergedTools = customTools | |
| if (activeTab === ToolTypeEnum.Workflow) | |
| mergedTools = workflowTools | |
| return mergedTools.filter((toolWithProvider) => { | |
| return toolWithProvider.tools.some((tool) => { | |
| return tool.label[language].toLowerCase().includes(searchText.toLowerCase()) | |
| }) | |
| }) | |
| }, [activeTab, buildInTools, customTools, workflowTools, searchText, language]) | |
| return ( | |
| <div> | |
| <div className='flex items-center px-3 h-8 space-x-1 bg-gray-25 border-b-[0.5px] border-black/[0.08] shadow-xs'> | |
| { | |
| tabs.map(tab => ( | |
| <div | |
| className={cn( | |
| 'flex items-center px-2 h-6 rounded-md hover:bg-gray-100 cursor-pointer', | |
| 'text-xs font-medium text-gray-700', | |
| activeTab === tab.key && 'bg-gray-200', | |
| )} | |
| key={tab.key} | |
| onClick={() => setActiveTab(tab.key)} | |
| > | |
| {tab.name} | |
| </div> | |
| )) | |
| } | |
| </div> | |
| <Tools | |
| showWorkflowEmpty={activeTab === ToolTypeEnum.Workflow} | |
| tools={tools} | |
| onSelect={onSelect} | |
| /> | |
| </div> | |
| ) | |
| } | |
| export default AllTools | |