Fix:Resolves the issue of sessions not being saved when the variable is array<object>. (#11446)

### What problem does this PR solve?

Fix:Resolves the issue of sessions not being saved when the variable is
array<object>.

### Type of change

- [x] Bug Fix (non-breaking change which fixes an issue)
This commit is contained in:
chanx
2025-11-21 17:20:26 +08:00
committed by GitHub
parent 13299197b8
commit a0959b9d38
5 changed files with 38 additions and 10 deletions

View File

@ -356,6 +356,13 @@ const DynamicForm = {
...combinedErrors,
...fieldErrors,
} as any;
console.log('combinedErrors', combinedErrors);
for (const key in combinedErrors) {
if (Array.isArray(combinedErrors[key])) {
combinedErrors[key] = combinedErrors[key][0];
}
}
console.log('combinedErrors', combinedErrors);
return {
values: Object.keys(combinedErrors).length ? {} : data,
@ -720,9 +727,7 @@ const DynamicForm = {
type="button"
disabled={submitLoading}
onClick={() => {
console.log('form submit');
(async () => {
console.log('form submit2');
try {
let beValid = await form.formControl.trigger();
console.log('form valid', beValid, form, form.formControl);

View File

@ -1046,7 +1046,7 @@ Example: https://fsn1.your-objectstorage.com`,
downloadFileType: 'Download file type',
formatTypeError: 'Format or type error',
variableNameMessage:
'Variable name can only contain letters and underscores',
'Variable name can only contain letters and underscores and numbers',
variableDescription: 'Variable Description',
defaultValue: 'Default Value',
conversationVariable: 'Conversation variable',

View File

@ -980,7 +980,7 @@ General实体和关系提取提示来自 GitHub - microsoft/graphrag基于
downloadFileTypeTip: '文件下载的类型',
downloadFileType: '文件类型',
formatTypeError: '格式或类型错误',
variableNameMessage: '名称只能包含字母和下划线',
variableNameMessage: '名称只能包含字母,数字和下划线',
variableDescription: '变量的描述',
defaultValue: '默认值',
conversationVariable: '会话变量',

View File

@ -18,7 +18,7 @@ export const GlobalFormFields = [
placeholder: t('common.namePlaceholder'),
required: true,
validation: {
pattern: /^[a-zA-Z_]+$/,
pattern: /^[a-zA-Z_0-9]+$/,
message: t('flow.variableNameMessage'),
},
type: FormFieldType.Text,

View File

@ -3,6 +3,7 @@ import { BlockButton, Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { Segmented } from '@/components/ui/segmented';
import { t } from 'i18next';
import { isEmpty } from 'lodash';
import { Trash2, X } from 'lucide-react';
import { useCallback } from 'react';
import { FieldValues } from 'react-hook-form';
@ -36,14 +37,19 @@ export const useObjectFields = () => {
path: (string | number)[] = [],
): Array<{ path: (string | number)[]; message: string }> => {
const errors: Array<{ path: (string | number)[]; message: string }> = [];
if (obj !== null && typeof obj === 'object' && !Array.isArray(obj)) {
if (typeof obj === 'object' && !Array.isArray(obj)) {
if (isEmpty(obj)) {
errors.push({
path: [...path],
message: 'No empty parameters are allowed.',
});
}
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
if (!/^[a-zA-Z_]+$/.test(key)) {
if (!/^[a-zA-Z_0-9]+$/.test(key)) {
errors.push({
path: [...path, key],
message: `Key "${key}" is invalid. Keys can only contain letters and underscores.`,
message: `Key "${key}" is invalid. Keys can only contain letters and underscores and numbers.`,
});
}
const nestedErrors = validateKeys(obj[key], [...path, key]);
@ -108,6 +114,21 @@ export const useObjectFields = () => {
}
}, []);
const arrayObjectValidate = useCallback((value: any) => {
try {
if (validateKeys(value, [])?.length > 0) {
throw new Error(t('flow.formatTypeError'));
}
if (value && typeof value === 'string' && !JSON.parse(value)) {
throw new Error(t('flow.formatTypeError'));
}
return true;
} catch (e) {
console.log('object-render-error', e, value);
throw new Error(t('flow.formatTypeError'));
}
}, []);
const arrayStringRender = useCallback((field: FieldValues, type = 'text') => {
const values = Array.isArray(field.value)
? field.value
@ -253,8 +274,9 @@ export const useObjectFields = () => {
const handleCustomValidate = (value: TypesWithArray) => {
switch (value) {
case TypesWithArray.Object:
case TypesWithArray.ArrayObject:
return objectValidate;
case TypesWithArray.ArrayObject:
return arrayObjectValidate;
case TypesWithArray.ArrayString:
return arrayStringValidate;
case TypesWithArray.ArrayNumber:
@ -284,6 +306,7 @@ export const useObjectFields = () => {
return {
objectRender,
objectValidate,
arrayObjectValidate,
arrayStringRender,
arrayStringValidate,
arrayNumberRender,