'use client' import type { FC } from 'react' import React, { useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger, } from '@/app/components/base/portal-to-follow-elem' import AppTrigger from '@/app/components/plugins/plugin-detail-panel/app-selector/app-trigger' import ToolPicker from '@/app/components/workflow/block-selector/tool-picker' import Button from '@/app/components/base/button' import { useAllBuiltInTools, useAllCustomTools, useAllWorkflowTools, } from '@/service/use-tools' import { CollectionType } from '@/app/components/tools/types' import type { ToolDefaultValue } from '@/app/components/workflow/block-selector/types' import type { OffsetOptions, Placement, } from '@floating-ui/react' import cn from '@/utils/classnames' type Props = { value?: { provider: string tool_name: string } disabled?: boolean placement?: Placement offset?: OffsetOptions onSelect: (tool: { provider: string tool_name: string }) => void supportAddCustomTool?: boolean } const AppSelector: FC = ({ value, disabled, placement = 'bottom', offset = 4, onSelect, }) => { const { t } = useTranslation() const [isShow, onShowChange] = useState(false) const handleTriggerClick = () => { if (disabled) return onShowChange(true) } const { data: buildInTools } = useAllBuiltInTools() const { data: customTools } = useAllCustomTools() const { data: workflowTools } = useAllWorkflowTools() const currentProvider = useMemo(() => { const mergedTools = [...(buildInTools || []), ...(customTools || []), ...(workflowTools || [])] return mergedTools.find((toolWithProvider) => { return toolWithProvider.id === value?.provider && toolWithProvider.tools.some(tool => tool.name === value?.tool_name) }) }, [value, buildInTools, customTools, workflowTools]) const [isShowChooseApp, setIsShowChooseApp] = useState(false) const handleSelectTool = (tool: ToolDefaultValue) => { const toolValue = { provider: tool.provider_id, tool_name: tool.tool_name, } onSelect(toolValue) setIsShowChooseApp(false) if (tool.provider_type === CollectionType.builtIn && tool.is_team_authorization) onShowChange(false) } return ( <>
{t('tools.toolSelector.label')}
} isShow={isShowChooseApp} onShowChange={setIsShowChooseApp} disabled={false} supportAddCustomTool onSelect={handleSelectTool} />
{/* app inputs config panel */}
) } export default React.memo(AppSelector)