diff --git a/web/app/components/app/configuration/config-var/config-modal/index.tsx b/web/app/components/app/configuration/config-var/config-modal/index.tsx index e69b1cd2f0..c179e3f886 100644 --- a/web/app/components/app/configuration/config-var/config-modal/index.tsx +++ b/web/app/components/app/configuration/config-var/config-modal/index.tsx @@ -19,10 +19,8 @@ import Switch from '@/app/components/base/switch' export type IConfigModalProps = { isCreate?: boolean payload?: InputVar - type?: string isShow: boolean onClose: () => void - // onConfirm: (newValue: { type: string; value: any }) => void onConfirm: (newValue: InputVar) => void } @@ -54,13 +52,20 @@ const ConfigModal: FC = ({ }, []) const handleConfirm = () => { + if (!tempPayload.variable) { + Toast.notify({ type: 'error', message: t('appDebug.variableConig.errorMsg.varNameRequired') }) + return + } + if (!tempPayload.label) { + Toast.notify({ type: 'error', message: t('appDebug.variableConig.errorMsg.labelNameRequired') }) + return + } if (isStringInput) { onConfirm(tempPayload) - // onConfirm({ type: type, value: tempMaxLength }) } else { if (options?.length === 0) { - Toast.notify({ type: 'error', message: 'At least one option requied' }) + Toast.notify({ type: 'error', message: t('appDebug.variableConig.errorMsg.atLeastOneOption') }) return } const obj: Record = {} @@ -73,7 +78,7 @@ const ConfigModal: FC = ({ obj[o] = true }) if (hasRepeatedItem) { - Toast.notify({ type: 'error', message: 'Has repeat items' }) + Toast.notify({ type: 'error', message: t('appDebug.variableConig.errorMsg.optionRepeat') }) return } onConfirm(tempPayload) @@ -124,7 +129,7 @@ const ConfigModal: FC = ({ )} {type === InputVarType.select && ( - + )} diff --git a/web/app/components/workflow/nodes/start/components/var-item.tsx b/web/app/components/workflow/nodes/start/components/var-item.tsx index da646f3b2b..b31ee641d4 100644 --- a/web/app/components/workflow/nodes/start/components/var-item.tsx +++ b/web/app/components/workflow/nodes/start/components/var-item.tsx @@ -1,13 +1,14 @@ 'use client' import type { FC } from 'react' -import React, { useRef } from 'react' -import { useHover } from 'ahooks' +import React, { useCallback, useRef } from 'react' +import { useBoolean, useHover } from 'ahooks' import { useTranslation } from 'react-i18next' import InputVarTypeIcon from '../../_base/components/input-var-type-icon' import type { InputVar } from '@/app/components/workflow/types' import { Variable02 } from '@/app/components/base/icons/src/vender/solid/development' import { Edit03 } from '@/app/components/base/icons/src/vender/solid/general' import { Trash03 } from '@/app/components/base/icons/src/vender/line/general' +import ConfigVarModal from '@/app/components/app/configuration/config-var/config-modal' type Props = { readonly: boolean @@ -19,11 +20,22 @@ type Props = { const VarItem: FC = ({ readonly, payload, + onChange, + onRemove, }) => { const { t } = useTranslation() const ref = useRef(null) const isHovering = useHover(ref) + const [isShowEditVarModal, { + setTrue: showEditVarModal, + setFalse: hideEditVarModal, + }] = useBoolean(false) + + const handlePayloadChange = useCallback((payload: InputVar) => { + onChange(payload) + hideEditVarModal() + }, [onChange, hideEditVarModal]) return (
@@ -44,15 +56,25 @@ const VarItem: FC = ({ ) : (!readonly && ( <> -
+
-
+
))}
+ { + isShowEditVarModal && ( + + ) + }
) } diff --git a/web/i18n/lang/app-debug.en.ts b/web/i18n/lang/app-debug.en.ts index 3273c8eb33..adcebced3b 100644 --- a/web/i18n/lang/app-debug.en.ts +++ b/web/i18n/lang/app-debug.en.ts @@ -283,6 +283,13 @@ const translation = { 'varName': 'Variable Name', 'labelName': 'Label Name', 'required': 'Required', + 'errorMsg': { + varNameRequired: 'Variable name is required', + labelNameRequired: 'Label name is required', + varNameCanBeRepeat: 'Variable name can not be repeated', + atLeastOneOption: 'At least one option is required', + optionRepeat: 'Has repeat options', + }, }, vision: { name: 'Vision', diff --git a/web/i18n/lang/app-debug.zh.ts b/web/i18n/lang/app-debug.zh.ts index d41cac24b0..8e134f2fc0 100644 --- a/web/i18n/lang/app-debug.zh.ts +++ b/web/i18n/lang/app-debug.zh.ts @@ -248,9 +248,6 @@ const translation = { action: '操作', typeString: '文本', typeSelect: '下拉选项', - varName: '变量名称', - labelName: '显示名称', - required: '必填', }, varKeyError: { canNoBeEmpty: '变量不能为空', @@ -279,6 +276,16 @@ const translation = { 'options': '选项', 'addOption': '添加选项', 'apiBasedVar': '基于 API 的变量', + 'varName': '变量名称', + 'labelName': '显示名称', + 'required': '必填', + 'errorMsg': { + varNameRequired: '变量名称必填', + labelNameRequired: '显示名称必填', + varNameCanBeRepeat: '变量名称不能重复', + atLeastOneOption: '至少需要一个选项', + optionRepeat: '选项不能重复', + }, }, vision: { name: '视觉',