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