diff --git a/web/app/components/workflow/nodes/_base/components/before-run-form/form-item.tsx b/web/app/components/workflow/nodes/_base/components/before-run-form/form-item.tsx index 3eef34bd7b..d66d47cc1f 100644 --- a/web/app/components/workflow/nodes/_base/components/before-run-form/form-item.tsx +++ b/web/app/components/workflow/nodes/_base/components/before-run-form/form-item.tsx @@ -82,7 +82,7 @@ const FormItem: FC = ({
-
+
{nodeName}
diff --git a/web/app/components/workflow/nodes/human-input/components/delivery-method/test-email-sender.tsx b/web/app/components/workflow/nodes/human-input/components/delivery-method/test-email-sender.tsx index 93e15fdb29..20fa9dfb44 100644 --- a/web/app/components/workflow/nodes/human-input/components/delivery-method/test-email-sender.tsx +++ b/web/app/components/workflow/nodes/human-input/components/delivery-method/test-email-sender.tsx @@ -110,6 +110,7 @@ const EmailSenderModal = ({ }, variable: `#${item.join('.')}#`, value_selector: item, + required: true, } }) const varInputs = variables.filter(item => !isENV(item.value_selector) && !isOutput(item.value_selector)).map((item) => { @@ -119,7 +120,7 @@ const EmailSenderModal = ({ label: item.label || item.variable, variable: item.variable, type: InputVarType.textInput, - required: false, + required: true, value_selector: item.value_selector, } } @@ -127,14 +128,14 @@ const EmailSenderModal = ({ label: item.label || item.variable, variable: item.variable, type: originalVar.type === VarType.number ? InputVarType.number : InputVarType.textInput, - required: false, + required: true, } }) return varInputs }, [availableNodes, config?.body, formContent, formInputs, nodesOutputVars]) const [inputs, setInputs] = useState>({}) - const [collapsed, setCollapsed] = useState(true) + const [collapsed, setCollapsed] = useState(!(generatedInputs.length > 0)) const [sendingEmail, setSendingEmail] = useState(false) const [done, setDone] = useState(false) @@ -145,7 +146,21 @@ const EmailSenderModal = ({ }) } + const confirmChecked = useMemo(() => { + for (const variable of generatedInputs) { + if (variable.required) { + const value = inputs[variable.variable] + if (value === undefined || value === null || value === '') { + return false + } + } + } + return true + }, [generatedInputs, inputs]) + const handleConfirm = useCallback(async () => { + if (!confirmChecked) + return setSendingEmail(true) try { await testEmailSender({ @@ -159,7 +174,7 @@ const EmailSenderModal = ({ finally { setSendingEmail(false) } - }, [testEmailSender, appDetail?.id, nodeId, deliveryId, inputs]) + }, [confirmChecked, testEmailSender, appDetail?.id, nodeId, deliveryId, inputs]) if (done) { return ( @@ -303,39 +318,40 @@ const EmailSenderModal = ({ )} {/* vars */} - <> -
- -
-
-
setCollapsed(!collapsed)}> -
{t(`${i18nPrefix}.deliveryMethod.emailSender.vars`, { ns: 'workflow' })}
-
{t(`${i18nPrefix}.deliveryMethod.emailSender.optional`, { ns: 'workflow' })}
- + {generatedInputs.length > 0 && ( + <> +
+
-
{t(`${i18nPrefix}.deliveryMethod.emailSender.varsTip`, { ns: 'workflow' })}
- {!collapsed && ( -
- {generatedInputs.map((variable, index) => ( -
- handleValueChange(variable.variable, v)} - /> -
- ))} +
+
setCollapsed(!collapsed)}> +
{t(`${i18nPrefix}.deliveryMethod.emailSender.vars`, { ns: 'workflow' })}
+
- )} -
- +
{t(`${i18nPrefix}.deliveryMethod.emailSender.varsTip`, { ns: 'workflow' })}
+ {!collapsed && ( +
+ {generatedInputs.map((variable, index) => ( +
+ handleValueChange(variable.variable, v)} + /> +
+ ))} +
+ )} +
+ + )}