diff --git a/web/app/components/workflow/hooks/use-nodes-meta-data.ts b/web/app/components/workflow/hooks/use-nodes-meta-data.ts index 1e140ffaf1..885e6f147f 100644 --- a/web/app/components/workflow/hooks/use-nodes-meta-data.ts +++ b/web/app/components/workflow/hooks/use-nodes-meta-data.ts @@ -1,6 +1,12 @@ import { useMemo } from 'react' import type { AvailableNodesMetaData } from '@/app/components/workflow/hooks-store' import { useHooksStore } from '@/app/components/workflow/hooks-store' +import { BlockEnum } from '@/app/components/workflow/types' +import type { Node } from '@/app/components/workflow/types' +import { CollectionType } from '@/app/components/tools/types' +import { useStore } from '@/app/components/workflow/store' +import { canFindTool } from '@/utils' +import { useGetLanguage } from '@/context/i18n' export const useNodesMetaData = () => { const availableNodesMetaData = useHooksStore(s => s.availableNodesMetaData) @@ -12,3 +18,48 @@ export const useNodesMetaData = () => { } as AvailableNodesMetaData }, [availableNodesMetaData]) } + +export const useNodeMetaData = (node: Node) => { + const language = useGetLanguage() + const buildInTools = useStore(s => s.buildInTools) + const customTools = useStore(s => s.customTools) + const workflowTools = useStore(s => s.workflowTools) + const dataSourceList = useStore(s => s.dataSourceList) + const availableNodesMetaData = useNodesMetaData() + const { data } = node + const nodeMetaData = availableNodesMetaData.nodesMap?.[data.type] + const author = useMemo(() => { + if (data.type === BlockEnum.DataSource) + return dataSourceList?.find(dataSource => dataSource.id === data.provider_id)?.author + + if (data.type === BlockEnum.Tool) { + if (data.provider_type === CollectionType.builtIn) + return buildInTools.find(toolWithProvider => canFindTool(toolWithProvider.id, data.provider_id))?.author + if (data.provider_type === CollectionType.workflow) + return workflowTools.find(toolWithProvider => toolWithProvider.id === data.provider_id)?.author + return customTools.find(toolWithProvider => toolWithProvider.id === data.provider_id)?.author + } + return nodeMetaData?.metaData.author + }, [data, buildInTools, customTools, workflowTools, nodeMetaData, dataSourceList]) + + const description = useMemo(() => { + if (data.type === BlockEnum.DataSource) + return dataSourceList?.find(dataSource => dataSource.id === data.provider_id)?.description[language] + if (data.type === BlockEnum.Tool) { + if (data.provider_type === CollectionType.builtIn) + return buildInTools.find(toolWithProvider => canFindTool(toolWithProvider.id, data.provider_id))?.description[language] + if (data.provider_type === CollectionType.workflow) + return workflowTools.find(toolWithProvider => toolWithProvider.id === data.provider_id)?.description[language] + return customTools.find(toolWithProvider => toolWithProvider.id === data.provider_id)?.description[language] + } + return nodeMetaData?.metaData.description + }, [data, buildInTools, customTools, workflowTools, nodeMetaData, dataSourceList, language]) + + return useMemo(() => { + return { + ...nodeMetaData?.metaData, + author, + description, + } + }, [author, nodeMetaData, description]) +} diff --git a/web/app/components/workflow/nodes/_base/components/panel-operator/index.tsx b/web/app/components/workflow/nodes/_base/components/panel-operator/index.tsx index cf05eb97bb..e1af8cc84f 100644 --- a/web/app/components/workflow/nodes/_base/components/panel-operator/index.tsx +++ b/web/app/components/workflow/nodes/_base/components/panel-operator/index.tsx @@ -31,7 +31,6 @@ const PanelOperator = ({ crossAxis: 53, }, onOpenChange, - inNode, showHelpLink = true, }: PanelOperatorProps) => { const [open, setOpen] = useState(false) diff --git a/web/app/components/workflow/nodes/_base/components/panel-operator/panel-operator-popup.tsx b/web/app/components/workflow/nodes/_base/components/panel-operator/panel-operator-popup.tsx index 374517c4aa..cf5efa5e01 100644 --- a/web/app/components/workflow/nodes/_base/components/panel-operator/panel-operator-popup.tsx +++ b/web/app/components/workflow/nodes/_base/components/panel-operator/panel-operator-popup.tsx @@ -1,28 +1,22 @@ import { memo, - useMemo, } from 'react' import { useTranslation } from 'react-i18next' import { useEdges } from 'reactflow' -import { useNodeHelpLink } from '../../hooks/use-node-help-link' import ChangeBlock from './change-block' import { canRunBySingle, } from '@/app/components/workflow/utils' -import { useStore } from '@/app/components/workflow/store' import { useNodeDataUpdate, + useNodeMetaData, useNodesInteractions, - useNodesMetaData, useNodesReadOnly, useNodesSyncDraft, } from '@/app/components/workflow/hooks' import ShortcutsName from '@/app/components/workflow/shortcuts-name' import type { Node } from '@/app/components/workflow/types' import { BlockEnum } from '@/app/components/workflow/types' -import { useGetLanguage } from '@/context/i18n' -import { CollectionType } from '@/app/components/tools/types' -import { canFindTool } from '@/utils' type PanelOperatorPopupProps = { id: string @@ -37,7 +31,6 @@ const PanelOperatorPopup = ({ showHelpLink, }: PanelOperatorPopupProps) => { const { t } = useTranslation() - const language = useGetLanguage() const edges = useEdges() const { handleNodeDelete, @@ -48,41 +41,10 @@ const PanelOperatorPopup = ({ const { handleNodeDataUpdate } = useNodeDataUpdate() const { handleSyncWorkflowDraft } = useNodesSyncDraft() const { nodesReadOnly } = useNodesReadOnly() - const { nodesMap: nodesExtraData } = useNodesMetaData() - const buildInTools = useStore(s => s.buildInTools) - const customTools = useStore(s => s.customTools) - const workflowTools = useStore(s => s.workflowTools) const edge = edges.find(edge => edge.target === id) - const author = useMemo(() => { - if (data.type !== BlockEnum.Tool) - return nodesExtraData![data.type].metaData.author - - if (data.provider_type === CollectionType.builtIn) - return buildInTools.find(toolWithProvider => canFindTool(toolWithProvider.id, data.provider_id))?.author - - if (data.provider_type === CollectionType.workflow) - return workflowTools.find(toolWithProvider => toolWithProvider.id === data.provider_id)?.author - - return customTools.find(toolWithProvider => toolWithProvider.id === data.provider_id)?.author - }, [data, nodesExtraData, buildInTools, customTools, workflowTools]) - - const about = useMemo(() => { - if (data.type !== BlockEnum.Tool) - return nodesExtraData![data.type].metaData.description - - if (data.provider_type === CollectionType.builtIn) - return buildInTools.find(toolWithProvider => canFindTool(toolWithProvider.id, data.provider_id))?.description[language] - - if (data.provider_type === CollectionType.workflow) - return workflowTools.find(toolWithProvider => toolWithProvider.id === data.provider_id)?.description[language] - - return customTools.find(toolWithProvider => toolWithProvider.id === data.provider_id)?.description[language] - }, [data, nodesExtraData, language, buildInTools, customTools, workflowTools]) + const nodeMetaData = useNodeMetaData({ id, data } as Node) const showChangeBlock = data.type !== BlockEnum.Start && !nodesReadOnly && data.type !== BlockEnum.Iteration && data.type !== BlockEnum.Loop - - const link = useNodeHelpLink(data.type) - return (