From b5c212f5750119e23f34e9e2feb43457580cd1de Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 15 Mar 2024 17:41:22 +0800 Subject: [PATCH] feat: parse to right datatype and show parse json error --- .../components/before-run-form/index.tsx | 39 ++++++++++++++++++- .../nodes/_base/hooks/use-one-step-run.ts | 14 ++----- web/i18n/en-US/workflow.ts | 1 + web/i18n/zh-Hans/workflow.ts | 1 + 4 files changed, 43 insertions(+), 12 deletions(-) diff --git a/web/app/components/workflow/nodes/_base/components/before-run-form/index.tsx b/web/app/components/workflow/nodes/_base/components/before-run-form/index.tsx index b7efbc27aa..55c408a97a 100644 --- a/web/app/components/workflow/nodes/_base/components/before-run-form/index.tsx +++ b/web/app/components/workflow/nodes/_base/components/before-run-form/index.tsx @@ -18,12 +18,26 @@ const i18nPrefix = 'workflow.singleRun' type BeforeRunFormProps = { nodeName: string onHide: () => void - onRun: () => void + onRun: (submitData: Record) => void onStop: () => void runningStatus: NodeRunningStatus result?: JSX.Element forms: FormProps[] } + +function formatValue(value: string | any, type: InputVarType) { + if (type === InputVarType.number) + return parseFloat(value) + if (type === InputVarType.json) + return JSON.parse(value) + if (type === InputVarType.contexts) { + return value.map((item: any) => { + return JSON.parse(item) + }) + } + + return value +} const BeforeRunForm: FC = ({ nodeName, onHide, @@ -55,7 +69,28 @@ const BeforeRunForm: FC = ({ return } - onRun() + const submitData: Record = {} + let parseErrorJsonField = '' + forms.forEach((form) => { + form.inputs.forEach((input) => { + try { + const value = formatValue(form.values[input.variable], input.type) + submitData[input.variable] = value + } + catch (e) { + parseErrorJsonField = input.variable + } + }) + }) + if (parseErrorJsonField) { + Toast.notify({ + message: t('workflow.errorMsg.invalidJson', { field: parseErrorJsonField }), + type: 'error', + }) + return + } + + onRun(submitData) }, [forms, onRun, t]) return (
({ } const runningStatus = data._singleRunningStatus || NodeRunningStatus.NotStart const isCompleted = runningStatus === NodeRunningStatus.Succeeded || runningStatus === NodeRunningStatus.Failed - const handleRun = async () => { - // const { isValid, errorMessage } = beforeRunCheckValid() - // if (!isValid) { - // Toast.notify({ - // type: 'error', - // message: errorMessage!, - // }) - // return false - // } + + const handleRun = async (submitData: Record) => { + console.log(submitData) handleNodeDataUpdate({ id, data: { @@ -144,7 +138,7 @@ const useOneStepRun = ({ }) let res: any try { - res = await singleNodeRun(appId!, id, { inputs: runInputData }) as any + res = await singleNodeRun(appId!, id, { inputs: submitData }) as any if (res.error) throw new Error(res.error) } diff --git a/web/i18n/en-US/workflow.ts b/web/i18n/en-US/workflow.ts index 0c4e09f8ca..f17097c3cb 100644 --- a/web/i18n/en-US/workflow.ts +++ b/web/i18n/en-US/workflow.ts @@ -29,6 +29,7 @@ const translation = { }, errorMsg: { fieldRequired: '{{field}} is required', + invalidJson: '{{field}} is invalid JSON', fields: { variable: 'Variable Name', variableValue: 'Variable Value', diff --git a/web/i18n/zh-Hans/workflow.ts b/web/i18n/zh-Hans/workflow.ts index 3f1aa8546f..7d3c57387d 100644 --- a/web/i18n/zh-Hans/workflow.ts +++ b/web/i18n/zh-Hans/workflow.ts @@ -29,6 +29,7 @@ const translation = { }, errorMsg: { fieldRequired: '{{field}} 不能为空', + invalidJson: '{{field}} 是非法的 JSON', fields: { variable: '变量名', variableValue: '变量值',