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

@ -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,