From a6fc04503d35fda5e14377c1aeab3966ff01aaa3 Mon Sep 17 00:00:00 2001 From: Rairn <958414905@qq.com> Date: Mon, 27 Mar 2023 20:09:34 +0800 Subject: [PATCH] fix(Filter-form): avoid infinit loop --- .../client/src/schema-initializer/utils.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/core/client/src/schema-initializer/utils.ts b/packages/core/client/src/schema-initializer/utils.ts index fc18d4409..991cf8319 100644 --- a/packages/core/client/src/schema-initializer/utils.ts +++ b/packages/core/client/src/schema-initializer/utils.ts @@ -338,15 +338,28 @@ export const useAssociatedFormItemInitializerFields = (options?: any) => { return groups; }; -const getItem = (field: FieldOptions, schemaName: string, collectionName: string, getCollectionFields) => { +const getItem = ( + field: FieldOptions, + schemaName: string, + collectionName: string, + getCollectionFields, + processedCollections: string[], +) => { if (field.interface === 'm2o') { + if (processedCollections.includes(field.target)) return null; + const subFields = getCollectionFields(field.target); return { type: 'subMenu', title: field.uiSchema?.title, children: subFields - .map((subField) => getItem(subField, `${schemaName}.${subField.name}`, collectionName, getCollectionFields)) + .map((subField) => + getItem(subField, `${schemaName}.${subField.name}`, collectionName, getCollectionFields, [ + ...processedCollections, + field.target, + ]), + ) .filter(Boolean), } as SchemaInitializerItemOptions; } @@ -385,7 +398,7 @@ export const useFilterAssociatedFormItemInitializerFields = () => { ?.filter((field) => { return interfaces.includes(field.interface); }) - ?.map((field) => getItem(field, field.name, name, getCollectionFields)); + ?.map((field) => getItem(field, field.name, name, getCollectionFields, [])); return groups; };