From b45a5d57ea1bdd352171d1ce4718ef6cd5671ba9 Mon Sep 17 00:00:00 2001 From: chenos Date: Wed, 20 Apr 2022 22:21:15 +0800 Subject: [PATCH] fix: options property for filter component --- .../client/src/collection-manager/action-hooks.ts | 12 +++++------- .../antd/filter/useFilterActionProps.ts | 12 +++++------- packages/plugins/users/src/collections/users.ts | 9 +++++++++ 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/packages/core/client/src/collection-manager/action-hooks.ts b/packages/core/client/src/collection-manager/action-hooks.ts index ff662320a..e497cb4cc 100644 --- a/packages/core/client/src/collection-manager/action-hooks.ts +++ b/packages/core/client/src/collection-manager/action-hooks.ts @@ -81,8 +81,7 @@ export const useSortFields = (collectionName: string) => { export const useCollectionFilterOptions = (collectionName: string) => { const { getCollectionFields, getInterface } = useCollectionManager(); const fields = getCollectionFields(collectionName); - let depth = 0; - const field2option = (field) => { + const field2option = (field, depth) => { if (!field.interface) { return; } @@ -111,24 +110,23 @@ export const useCollectionFilterOptions = (collectionName: string) => { } if (nested) { const targetFields = getCollectionFields(field.target); - const options = getOptions(targetFields).filter(Boolean); + const options = getOptions(targetFields, depth+1).filter(Boolean); option['children'] = option['children'] || []; option['children'].push(...options); } return option; }; - const getOptions = (fields) => { - ++depth; + const getOptions = (fields, depth) => { const options = []; fields.forEach((field) => { - const option = field2option(field); + const option = field2option(field, depth); if (option) { options.push(option); } }); return options; }; - return getOptions(fields); + return getOptions(fields, 1); }; export const useFilterDataSource = (options) => { diff --git a/packages/core/client/src/schema-component/antd/filter/useFilterActionProps.ts b/packages/core/client/src/schema-component/antd/filter/useFilterActionProps.ts index 0be3c3fa5..128a3cef2 100644 --- a/packages/core/client/src/schema-component/antd/filter/useFilterActionProps.ts +++ b/packages/core/client/src/schema-component/antd/filter/useFilterActionProps.ts @@ -10,8 +10,7 @@ export const useFilterOptions = (collectionName: string) => { const nonfilterable = fieldSchema?.['x-component-props']?.nonfilterable || []; const { getCollectionFields, getInterface } = useCollectionManager(); const fields = getCollectionFields(collectionName); - let depth = 0; - const field2option = (field) => { + const field2option = (field, depth) => { if (nonfilterable.length && depth !== 1 && nonfilterable.includes(field.name)) { return; } @@ -43,24 +42,23 @@ export const useFilterOptions = (collectionName: string) => { } if (nested) { const targetFields = getCollectionFields(field.target); - const options = getOptions(targetFields).filter(Boolean); + const options = getOptions(targetFields, depth+1).filter(Boolean); option['children'] = option['children'] || []; option['children'].push(...options); } return option; }; - const getOptions = (fields) => { - ++depth; + const getOptions = (fields, depth) => { const options = []; fields.forEach((field) => { - const option = field2option(field); + const option = field2option(field, depth); if (option) { options.push(option); } }); return options; }; - return getOptions(fields); + return getOptions(fields, 1); }; const isEmpty = (obj) => { diff --git a/packages/plugins/users/src/collections/users.ts b/packages/plugins/users/src/collections/users.ts index 4905d5545..3a38e805e 100644 --- a/packages/plugins/users/src/collections/users.ts +++ b/packages/plugins/users/src/collections/users.ts @@ -8,6 +8,15 @@ export default { createdBy: true, updatedBy: true, fields: [ + { + name: 'id', + type: 'integer', + autoIncrement: true, + primaryKey: true, + allowNull: false, + uiSchema: { type: 'number', title: '{{t("ID")}}', 'x-component': 'InputNumber', 'x-read-pretty': true }, + interface: 'id', + }, { interface: 'input', type: 'string',