fix(trigger): add default icon

This commit is contained in:
yessenia
2025-10-30 15:51:01 +08:00
parent ceb6a09387
commit b7f1394403
3 changed files with 50 additions and 38 deletions

View File

@@ -40,38 +40,45 @@ const ICON_CONTAINER_CLASSNAME_SIZE_MAP: Record<string, string> = {
sm: 'w-5 h-5 rounded-md shadow-xs',
md: 'w-6 h-6 rounded-lg shadow-md',
}
const DEFAULT_ICON_MAP: Record<BlockEnum, React.ComponentType<{ className: string }>> = {
[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]: <Home className={className} />,
[BlockEnum.LLM]: <Llm className={className} />,
[BlockEnum.Code]: <Code className={className} />,
[BlockEnum.End]: <End className={className} />,
[BlockEnum.IfElse]: <IfElse className={className} />,
[BlockEnum.HttpRequest]: <Http className={className} />,
[BlockEnum.Answer]: <Answer className={className} />,
[BlockEnum.KnowledgeRetrieval]: <KnowledgeRetrieval className={className} />,
[BlockEnum.QuestionClassifier]: <QuestionClassifier className={className} />,
[BlockEnum.TemplateTransform]: <TemplatingTransform className={className} />,
[BlockEnum.VariableAssigner]: <VariableX className={className} />,
[BlockEnum.VariableAggregator]: <VariableX className={className} />,
[BlockEnum.Assigner]: <Assigner className={className} />,
[BlockEnum.Tool]: <VariableX className={className} />,
[BlockEnum.IterationStart]: <VariableX className={className} />,
[BlockEnum.Iteration]: <Iteration className={className} />,
[BlockEnum.LoopStart]: <VariableX className={className} />,
[BlockEnum.Loop]: <Loop className={className} />,
[BlockEnum.LoopEnd]: <LoopEnd className={className} />,
[BlockEnum.ParameterExtractor]: <ParameterExtractor className={className} />,
[BlockEnum.DocExtractor]: <DocsExtractor className={className} />,
[BlockEnum.ListFilter]: <ListFilter className={className} />,
[BlockEnum.Agent]: <Agent className={className} />,
[BlockEnum.KnowledgeBase]: <KnowledgeBase className={className} />,
[BlockEnum.DataSource]: <Datasource className={className} />,
[BlockEnum.DataSourceEmpty]: <></>,
[BlockEnum.TriggerSchedule]: <Schedule className={className} />,
[BlockEnum.TriggerWebhook]: <WebhookLine className={className} />,
[BlockEnum.TriggerPlugin]: null,
}[type]
const DefaultIcon = DEFAULT_ICON_MAP[type]
if (!DefaultIcon)
return null
return <DefaultIcon className={className} />
}
const ICON_CONTAINER_BG_COLOR_MAP: Record<string, string> = {
[BlockEnum.Start]: 'bg-util-colors-blue-brand-blue-brand-500',
@@ -99,7 +106,7 @@ const ICON_CONTAINER_BG_COLOR_MAP: Record<string, string> = {
[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<BlockIconProps> = ({
type,

View File

@@ -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<EntryNodeContainerProps> = ({
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])

View File

@@ -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<BaseNodeProps> = ({
</div>
)
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 ? (
<EntryNodeContainer
nodeType={isStartNode ? 'start' : 'trigger'}
nodeType={isStartNode ? StartNodeTypeEnum.Start : StartNodeTypeEnum.Trigger}
>
{nodeContent}
</EntryNodeContainer>