'use client' import type { FC } from 'react' import React, { useMemo } from 'react' import cn from '@/utils/classnames' import { RiArrowDownSLine, RiArrowRightSLine } from '@remixicon/react' import { useGetLanguage } from '@/context/i18n' import { CollectionType } from '../../../tools/types' import type { ToolWithProvider } from '../../types' import { BlockEnum } from '../../types' import type { ToolDefaultValue } from '../types' import { ViewType } from '../view-type-select' import ActonItem from './action-item' import BlockIcon from '../../block-icon' import { useBoolean } from 'ahooks' import { useTranslation } from 'react-i18next' type Props = { className?: string payload: ToolWithProvider viewType: ViewType isShowLetterIndex: boolean onSelect: (type: BlockEnum, tool?: ToolDefaultValue) => void } const Tool: FC = ({ className, payload, viewType, isShowLetterIndex, onSelect, }) => { const { t } = useTranslation() const language = useGetLanguage() const isFlatView = viewType === ViewType.flat const actions = payload.tools const hasAction = payload.type === CollectionType.builtIn const [isFold, { toggle: toggleFold, }] = useBoolean(false) const FoldIcon = isFold ? RiArrowDownSLine : RiArrowRightSLine const groupName = useMemo(() => { if (payload.type === CollectionType.builtIn) return payload.author if (payload.type === CollectionType.custom) return t('workflow.tabs.customTool') if (payload.type === CollectionType.workflow) return t('workflow.tabs.workflowTool') return '' }, [payload.author, payload.type, t]) return (
{ if (hasAction) { toggleFold() return } // TODO: get workflow and custom tool params // if (payload.parameters) { // payload.parameters.forEach((item) => { // params[item.name] = '' // }) // } onSelect(BlockEnum.Tool, { provider_id: payload.id, provider_type: payload.type, provider_name: payload.name, tool_name: payload.name, tool_label: payload.label[language], title: payload.label[language], params: {}, }) }} >
{payload.label[language]}
{isFlatView && (
{groupName}
)} {hasAction && ( )}
{hasAction && isFold && ( actions.map(action => ( )) )}
) } export default React.memo(Tool)