Spaces:
Building
Building
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 | |