import type { BlockEnum, ToolWithProvider } from '../types' import type { ToolActionPreviewPayload } from './tool/action-item' import type { ToolDefaultValue, ToolType, ToolValue } from './types' import { cn } from '@langgenius/dify-ui/cn' import { createPreviewCardHandle, PreviewCard } from '@langgenius/dify-ui/preview-card' import { memo, useMemo, useRef } from 'react' import Empty from '@/app/components/tools/provider/empty' import { useGetLanguage } from '@/context/i18n' import { IndexBar } from './index-bar' import { createToolListData } from './tool-list-data' import { ToolActionPreviewCard } from './tool/action-item' import ToolListFlatView from './tool/tool-list-flat-view/list' import { ToolListTreeView } from './tool/tool-list-tree-view/list' import { ViewType } from './types' type ToolsProps = { onSelect: (type: BlockEnum, tool: ToolDefaultValue) => void canNotSelectMultiple?: boolean onSelectMultiple?: (type: BlockEnum, tools: ToolDefaultValue[]) => void tools: ToolWithProvider[] viewType: ViewType hasSearchText: boolean toolType?: ToolType isAgent?: boolean className?: string indexBarClassName?: string selectedTools?: ToolValue[] } const Tools = ({ onSelect, canNotSelectMultiple, onSelectMultiple, tools, viewType, hasSearchText, toolType, isAgent, className, indexBarClassName, selectedTools, }: ToolsProps) => { const language = useGetLanguage() const previewCardHandle = useMemo(() => createPreviewCardHandle(), []) const isFlatView = viewType === ViewType.flat const isShowLetterIndex = isFlatView && tools.length > 10 const { letters, flatTools, treeGroups } = useMemo( () => createToolListData( tools, (tool) => (tool.label[language] || tool.label['en-US'] || tool.name)[0] || '#', ), [language, tools], ) const toolRefsRef = useRef>({}) return (
{!tools.length && !hasSearchText && (
)} {!!tools.length && (isFlatView ? ( } /> ) : ( ))} {({ payload }) => ( )}
) } export default memo(Tools)