From 4e34fa3d7028da526c9d382bed8eab5249ab51ac Mon Sep 17 00:00:00 2001 From: twwu Date: Wed, 28 Jan 2026 22:03:47 +0800 Subject: [PATCH] feat(humanInput): enhance web app delivery method handling in trigger mode --- .../delivery-method/method-selector.tsx | 25 +++++++++++++++---- web/i18n/en-US/workflow.json | 1 + web/i18n/zh-Hans/workflow.json | 1 + 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/web/app/components/workflow/nodes/human-input/components/delivery-method/method-selector.tsx b/web/app/components/workflow/nodes/human-input/components/delivery-method/method-selector.tsx index ea1b69184c..0f7b86bc49 100644 --- a/web/app/components/workflow/nodes/human-input/components/delivery-method/method-selector.tsx +++ b/web/app/components/workflow/nodes/human-input/components/delivery-method/method-selector.tsx @@ -19,6 +19,8 @@ import { PortalToFollowElemContent, PortalToFollowElemTrigger, } from '@/app/components/base/portal-to-follow-elem' +import useWorkflowNodes from '@/app/components/workflow/store/workflow/use-nodes' +import { isTriggerWorkflow } from '@/app/components/workflow/utils/workflow-entry' import { IS_CE_EDITION } from '@/config' import { useProviderContextSelector } from '@/context/provider-context' import { cn } from '@/utils/classnames' @@ -41,6 +43,7 @@ const MethodSelector: FC = ({ const [open, doSetOpen] = useState(false) const humanInputEmailDeliveryEnabled = useProviderContextSelector(s => s.humanInputEmailDeliveryEnabled) const openRef = useRef(open) + const nodes = useWorkflowNodes() const setOpen = useCallback((v: boolean) => { doSetOpen(v) @@ -51,6 +54,15 @@ const MethodSelector: FC = ({ setOpen(!openRef.current) }, [setOpen]) + const webAppDeliveryInfo = useMemo(() => { + const isTriggerMode = isTriggerWorkflow(nodes) + return { + disabled: isTriggerMode || data.some(method => method.type === DeliveryMethodType.WebApp), + added: data.some(method => method.type === DeliveryMethodType.WebApp), + isTriggerMode, + } + }, [data, nodes]) + const emailDeliveryInfo = useMemo(() => { return { noPermission: !humanInputEmailDeliveryEnabled, @@ -79,9 +91,9 @@ const MethodSelector: FC = ({
method.type === DeliveryMethodType.WebApp) && 'cursor-not-allowed bg-transparent hover:bg-transparent')} + className={cn('relative flex cursor-pointer items-center gap-1 rounded-lg p-1 pl-3 hover:bg-state-base-hover', webAppDeliveryInfo.disabled && 'cursor-not-allowed bg-transparent hover:bg-transparent')} onClick={() => { - if (data.some(method => method.type === DeliveryMethodType.WebApp)) + if (webAppDeliveryInfo.disabled) return onAdd({ id: uuid4(), @@ -90,16 +102,19 @@ const MethodSelector: FC = ({ }) }} > -
method.type === DeliveryMethodType.WebApp) && 'opacity-50')}> +
-
method.type === DeliveryMethodType.WebApp) && 'opacity-50')}> +
{t(`${i18nPrefix}.deliveryMethod.types.webapp.title`, { ns: 'workflow' })}
{t(`${i18nPrefix}.deliveryMethod.types.webapp.description`, { ns: 'workflow' })}
- {data.some(method => method.type === DeliveryMethodType.WebApp) && ( + {webAppDeliveryInfo.added && (
{t(`${i18nPrefix}.deliveryMethod.added`, { ns: 'workflow' })}
)} + {webAppDeliveryInfo.isTriggerMode && !webAppDeliveryInfo.added && ( +
{t(`${i18nPrefix}.deliveryMethod.notAvailableInTriggerMode`, { ns: 'workflow' })}
+ )}
{{team}} members.", "nodes.humanInput.deliveryMethod.emailSender.wholeTeamTip3": "Email will be sent to the following email addresses:", "nodes.humanInput.deliveryMethod.emptyTip": "No delivery method added, the operation cannot be triggered.", + "nodes.humanInput.deliveryMethod.notAvailableInTriggerMode": "Not available", "nodes.humanInput.deliveryMethod.notConfigured": "Not configured", "nodes.humanInput.deliveryMethod.title": "Delivery Method", "nodes.humanInput.deliveryMethod.tooltip": "How the human input form is delivered to the user.", diff --git a/web/i18n/zh-Hans/workflow.json b/web/i18n/zh-Hans/workflow.json index ac7eea6023..acda7db2fc 100644 --- a/web/i18n/zh-Hans/workflow.json +++ b/web/i18n/zh-Hans/workflow.json @@ -544,6 +544,7 @@ "nodes.humanInput.deliveryMethod.emailSender.wholeTeamTip2": "邮件将发送给 {{team}} 成员。", "nodes.humanInput.deliveryMethod.emailSender.wholeTeamTip3": "邮件将发送到以下邮件地址:", "nodes.humanInput.deliveryMethod.emptyTip": "未添加提交方式,无法触发操作。", + "nodes.humanInput.deliveryMethod.notAvailableInTriggerMode": "不可用", "nodes.humanInput.deliveryMethod.notConfigured": "未配置", "nodes.humanInput.deliveryMethod.title": "提交方式", "nodes.humanInput.deliveryMethod.tooltip": "人工介入表单如何传递给用户。",