feat(humanInput): enhance web app delivery method handling in trigger mode

This commit is contained in:
twwu 2026-01-28 22:03:47 +08:00
parent bf161d01a8
commit 4e34fa3d70
3 changed files with 22 additions and 5 deletions

View File

@ -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<MethodSelectorProps> = ({
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<MethodSelectorProps> = ({
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<MethodSelectorProps> = ({
<div className="w-[360px] rounded-xl border-[0.5px] border-components-panel-border bg-components-panel-bg-blur shadow-lg backdrop-blur-sm">
<div className="p-1">
<div
className={cn('relative flex cursor-pointer items-center gap-1 rounded-lg p-1 pl-3 hover:bg-state-base-hover', data.some(method => 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<MethodSelectorProps> = ({
})
}}
>
<div className={cn('rounded-[4px] border border-divider-regular bg-components-icon-bg-indigo-solid p-1', data.some(method => method.type === DeliveryMethodType.WebApp) && 'opacity-50')}>
<div className={cn('rounded-[4px] border border-divider-regular bg-components-icon-bg-indigo-solid p-1', webAppDeliveryInfo.disabled && 'opacity-50')}>
<RiRobot2Fill className="h-4 w-4 text-text-primary-on-surface" />
</div>
<div className={cn('p-1', data.some(method => method.type === DeliveryMethodType.WebApp) && 'opacity-50')}>
<div className={cn('p-1', webAppDeliveryInfo.disabled && 'opacity-50')}>
<div className="system-sm-medium mb-0.5 truncate text-text-primary">{t(`${i18nPrefix}.deliveryMethod.types.webapp.title`, { ns: 'workflow' })}</div>
<div className="system-xs-regular truncate text-text-tertiary">{t(`${i18nPrefix}.deliveryMethod.types.webapp.description`, { ns: 'workflow' })}</div>
</div>
{data.some(method => method.type === DeliveryMethodType.WebApp) && (
{webAppDeliveryInfo.added && (
<div className="system-xs-regular absolute right-[12px] top-[13px] text-text-tertiary">{t(`${i18nPrefix}.deliveryMethod.added`, { ns: 'workflow' })}</div>
)}
{webAppDeliveryInfo.isTriggerMode && !webAppDeliveryInfo.added && (
<div className="system-xs-regular absolute right-[12px] top-[13px] text-text-tertiary">{t(`${i18nPrefix}.deliveryMethod.notAvailableInTriggerMode`, { ns: 'workflow' })}</div>
)}
</div>
<div
className={cn(

View File

@ -544,6 +544,7 @@
"nodes.humanInput.deliveryMethod.emailSender.wholeTeamTip2": "Email will be sent to <team>{{team}}</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.",

View File

@ -544,6 +544,7 @@
"nodes.humanInput.deliveryMethod.emailSender.wholeTeamTip2": "邮件将发送给 <team>{{team}}</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": "人工介入表单如何传递给用户。",