12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- 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
|