From 868a487b2d2a24475a29aa72dbad1e27851ffeec Mon Sep 17 00:00:00 2001 From: YANG QIA <2013xile@gmail.com> Date: Fri, 29 Mar 2024 14:13:59 +0800 Subject: [PATCH] fix(data-vi): bug when filtering chart with assocations (#3867) * fix(data-vi): bug when filtering chart with assocations * fix: remote select --- .../schema-component/antd/remote-select/RemoteSelect.tsx | 3 ++- .../plugin-data-visualization/src/client/hooks/filter.ts | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/core/client/src/schema-component/antd/remote-select/RemoteSelect.tsx b/packages/core/client/src/schema-component/antd/remote-select/RemoteSelect.tsx index 03c0684e0e..b7e59590d8 100644 --- a/packages/core/client/src/schema-component/antd/remote-select/RemoteSelect.tsx +++ b/packages/core/client/src/schema-component/antd/remote-select/RemoteSelect.tsx @@ -52,7 +52,8 @@ const InternalRemoteSelect = connect( const { getField } = useCollection_deprecated(); const searchData = useRef(null); const { getCollectionJoinField, getInterface } = useCollectionManager_deprecated(); - const collectionField = getField(fieldSchema.name) || getCollectionJoinField(fieldSchema.name as string); + const colletionFieldName = fieldSchema['x-collection-field'] || fieldSchema.name; + const collectionField = getField(colletionFieldName) || getCollectionJoinField(colletionFieldName); const targetField = _targetField || (collectionField?.target && diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/client/hooks/filter.ts b/packages/plugins/@nocobase/plugin-data-visualization/src/client/hooks/filter.ts index ac76a94477..6f8ab46de0 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/client/hooks/filter.ts +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/client/hooks/filter.ts @@ -305,12 +305,15 @@ export const useChartFilter = () => { .filter(([_, props]) => props) .forEach(([name, props]) => { const { operator } = props || {}; - const { dataSource, fieldName } = parseFilterFieldName(name); + const { dataSource, fieldName: _fieldName } = parseFilterFieldName(name); + let fieldName = _fieldName; const ds = dm.getDataSource(dataSource); const cm = ds.collectionManager; const field = cm.getCollectionField(fieldName); if (field?.target) { - name = `${fieldName}.${field.targetKey || 'id'}`; + const tk = field.targetKey || 'id'; + fieldName = `${fieldName}.${tk}`; + name = `${name}.${tk}`; } const [collection, ...fields] = fieldName.split('.'); const value = getValuesByPath(values, name);