feat: parse to right datatype and show parse json error

This commit is contained in:
Joel 2024-03-15 17:41:22 +08:00
parent ff5ab43f9c
commit b5c212f575
4 changed files with 43 additions and 12 deletions

View File

@ -18,12 +18,26 @@ const i18nPrefix = 'workflow.singleRun'
type BeforeRunFormProps = { type BeforeRunFormProps = {
nodeName: string nodeName: string
onHide: () => void onHide: () => void
onRun: () => void onRun: (submitData: Record<string, any>) => void
onStop: () => void onStop: () => void
runningStatus: NodeRunningStatus runningStatus: NodeRunningStatus
result?: JSX.Element result?: JSX.Element
forms: FormProps[] 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<BeforeRunFormProps> = ({ const BeforeRunForm: FC<BeforeRunFormProps> = ({
nodeName, nodeName,
onHide, onHide,
@ -55,7 +69,28 @@ const BeforeRunForm: FC<BeforeRunFormProps> = ({
return return
} }
onRun() const submitData: Record<string, any> = {}
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]) }, [forms, onRun, t])
return ( return (
<div className='absolute inset-0 z-10 rounded-2xl pt-10' style={{ <div className='absolute inset-0 z-10 rounded-2xl pt-10' style={{

View File

@ -126,15 +126,9 @@ const useOneStepRun = <T>({
} }
const runningStatus = data._singleRunningStatus || NodeRunningStatus.NotStart const runningStatus = data._singleRunningStatus || NodeRunningStatus.NotStart
const isCompleted = runningStatus === NodeRunningStatus.Succeeded || runningStatus === NodeRunningStatus.Failed const isCompleted = runningStatus === NodeRunningStatus.Succeeded || runningStatus === NodeRunningStatus.Failed
const handleRun = async () => {
// const { isValid, errorMessage } = beforeRunCheckValid() const handleRun = async (submitData: Record<string, any>) => {
// if (!isValid) { console.log(submitData)
// Toast.notify({
// type: 'error',
// message: errorMessage!,
// })
// return false
// }
handleNodeDataUpdate({ handleNodeDataUpdate({
id, id,
data: { data: {
@ -144,7 +138,7 @@ const useOneStepRun = <T>({
}) })
let res: any let res: any
try { try {
res = await singleNodeRun(appId!, id, { inputs: runInputData }) as any res = await singleNodeRun(appId!, id, { inputs: submitData }) as any
if (res.error) if (res.error)
throw new Error(res.error) throw new Error(res.error)
} }

View File

@ -29,6 +29,7 @@ const translation = {
}, },
errorMsg: { errorMsg: {
fieldRequired: '{{field}} is required', fieldRequired: '{{field}} is required',
invalidJson: '{{field}} is invalid JSON',
fields: { fields: {
variable: 'Variable Name', variable: 'Variable Name',
variableValue: 'Variable Value', variableValue: 'Variable Value',

View File

@ -29,6 +29,7 @@ const translation = {
}, },
errorMsg: { errorMsg: {
fieldRequired: '{{field}} 不能为空', fieldRequired: '{{field}} 不能为空',
invalidJson: '{{field}} 是非法的 JSON',
fields: { fields: {
variable: '变量名', variable: '变量名',
variableValue: '变量值', variableValue: '变量值',