diff --git a/web/app/components/workflow/block-icon.tsx b/web/app/components/workflow/block-icon.tsx index 2ee06c4156..a4f53f2a64 100644 --- a/web/app/components/workflow/block-icon.tsx +++ b/web/app/components/workflow/block-icon.tsx @@ -40,38 +40,45 @@ const ICON_CONTAINER_CLASSNAME_SIZE_MAP: Record = { sm: 'w-5 h-5 rounded-md shadow-xs', md: 'w-6 h-6 rounded-lg shadow-md', } + +const DEFAULT_ICON_MAP: Record> = { + [BlockEnum.Start]: Home, + [BlockEnum.LLM]: Llm, + [BlockEnum.Code]: Code, + [BlockEnum.End]: End, + [BlockEnum.IfElse]: IfElse, + [BlockEnum.HttpRequest]: Http, + [BlockEnum.Answer]: Answer, + [BlockEnum.KnowledgeRetrieval]: KnowledgeRetrieval, + [BlockEnum.QuestionClassifier]: QuestionClassifier, + [BlockEnum.TemplateTransform]: TemplatingTransform, + [BlockEnum.VariableAssigner]: VariableX, + [BlockEnum.VariableAggregator]: VariableX, + [BlockEnum.Assigner]: Assigner, + [BlockEnum.Tool]: VariableX, + [BlockEnum.IterationStart]: VariableX, + [BlockEnum.Iteration]: Iteration, + [BlockEnum.LoopStart]: VariableX, + [BlockEnum.Loop]: Loop, + [BlockEnum.LoopEnd]: LoopEnd, + [BlockEnum.ParameterExtractor]: ParameterExtractor, + [BlockEnum.DocExtractor]: DocsExtractor, + [BlockEnum.ListFilter]: ListFilter, + [BlockEnum.Agent]: Agent, + [BlockEnum.KnowledgeBase]: KnowledgeBase, + [BlockEnum.DataSource]: Datasource, + [BlockEnum.DataSourceEmpty]: () => null, + [BlockEnum.TriggerSchedule]: Schedule, + [BlockEnum.TriggerWebhook]: WebhookLine, + [BlockEnum.TriggerPlugin]: VariableX, +} + const getIcon = (type: BlockEnum, className: string) => { - return { - [BlockEnum.Start]: , - [BlockEnum.LLM]: , - [BlockEnum.Code]: , - [BlockEnum.End]: , - [BlockEnum.IfElse]: , - [BlockEnum.HttpRequest]: , - [BlockEnum.Answer]: , - [BlockEnum.KnowledgeRetrieval]: , - [BlockEnum.QuestionClassifier]: , - [BlockEnum.TemplateTransform]: , - [BlockEnum.VariableAssigner]: , - [BlockEnum.VariableAggregator]: , - [BlockEnum.Assigner]: , - [BlockEnum.Tool]: , - [BlockEnum.IterationStart]: , - [BlockEnum.Iteration]: , - [BlockEnum.LoopStart]: , - [BlockEnum.Loop]: , - [BlockEnum.LoopEnd]: , - [BlockEnum.ParameterExtractor]: , - [BlockEnum.DocExtractor]: , - [BlockEnum.ListFilter]: , - [BlockEnum.Agent]: , - [BlockEnum.KnowledgeBase]: , - [BlockEnum.DataSource]: , - [BlockEnum.DataSourceEmpty]: <>, - [BlockEnum.TriggerSchedule]: , - [BlockEnum.TriggerWebhook]: , - [BlockEnum.TriggerPlugin]: null, - }[type] + const DefaultIcon = DEFAULT_ICON_MAP[type] + if (!DefaultIcon) + return null + + return } const ICON_CONTAINER_BG_COLOR_MAP: Record = { [BlockEnum.Start]: 'bg-util-colors-blue-brand-blue-brand-500', @@ -99,7 +106,7 @@ const ICON_CONTAINER_BG_COLOR_MAP: Record = { [BlockEnum.DataSource]: 'bg-components-icon-bg-midnight-solid', [BlockEnum.TriggerSchedule]: 'bg-util-colors-violet-violet-500', [BlockEnum.TriggerWebhook]: 'bg-util-colors-blue-blue-500', - [BlockEnum.TriggerPlugin]: 'bg-util-colors-white-white-500', + [BlockEnum.TriggerPlugin]: 'bg-util-colors-blue-blue-500', } const BlockIcon: FC = ({ type, diff --git a/web/app/components/workflow/nodes/_base/components/entry-node-container.tsx b/web/app/components/workflow/nodes/_base/components/entry-node-container.tsx index 5ba5c21a39..b0cecdd0ae 100644 --- a/web/app/components/workflow/nodes/_base/components/entry-node-container.tsx +++ b/web/app/components/workflow/nodes/_base/components/entry-node-container.tsx @@ -2,21 +2,26 @@ import type { FC, ReactNode } from 'react' import { useMemo } from 'react' import { useTranslation } from 'react-i18next' +export enum StartNodeTypeEnum { + Start = 'start', + Trigger = 'trigger', +} + type EntryNodeContainerProps = { children: ReactNode customLabel?: string - nodeType?: 'start' | 'trigger' + nodeType?: StartNodeTypeEnum } const EntryNodeContainer: FC = ({ children, customLabel, - nodeType = 'trigger', + nodeType = StartNodeTypeEnum.Trigger, }) => { const { t } = useTranslation() const label = useMemo(() => { - const translationKey = nodeType === 'start' ? 'entryNodeStatus' : 'triggerStatus' + const translationKey = nodeType === StartNodeTypeEnum.Start ? 'entryNodeStatus' : 'triggerStatus' return customLabel || t(`workflow.${translationKey}.enabled`) }, [customLabel, nodeType, t]) diff --git a/web/app/components/workflow/nodes/_base/node.tsx b/web/app/components/workflow/nodes/_base/node.tsx index 1d3cd920ef..57aea8a1df 100644 --- a/web/app/components/workflow/nodes/_base/node.tsx +++ b/web/app/components/workflow/nodes/_base/node.tsx @@ -43,7 +43,7 @@ import NodeControl from './components/node-control' import ErrorHandleOnNode from './components/error-handle/error-handle-on-node' import RetryOnNode from './components/retry/retry-on-node' import AddVariablePopupWithPosition from './components/add-variable-popup-with-position' -import EntryNodeContainer from './components/entry-node-container' +import EntryNodeContainer, { StartNodeTypeEnum } from './components/entry-node-container' import cn from '@/utils/classnames' import BlockIcon from '@/app/components/workflow/block-icon' import Tooltip from '@/app/components/base/tooltip' @@ -353,12 +353,12 @@ const BaseNode: FC = ({ ) - const isEntryNode = TRIGGER_NODE_TYPES.includes(data.type as any) || data.type === BlockEnum.Start const isStartNode = data.type === BlockEnum.Start + const isEntryNode = TRIGGER_NODE_TYPES.includes(data.type as any) || isStartNode return isEntryNode ? ( {nodeContent}