diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/client/filter/FilterForm.tsx b/packages/plugins/@nocobase/plugin-data-visualization/src/client/filter/FilterForm.tsx index 9bdf72ce31..19357c3081 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/client/filter/FilterForm.tsx +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/client/filter/FilterForm.tsx @@ -52,6 +52,8 @@ export const ChartFilterForm: React.FC = memo((props) => { setField(name, { title: field.title, operator: field.componentProps['filter-operator'], + dataSource: field.componentProps['data-source'], + collectionField: field.componentProps['collection-field'], }); // parse field title diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/client/filter/FilterProvider.tsx b/packages/plugins/@nocobase/plugin-data-visualization/src/client/filter/FilterProvider.tsx index 8105bdbba3..fbdc8e341d 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/client/filter/FilterProvider.tsx +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/client/filter/FilterProvider.tsx @@ -16,6 +16,8 @@ type FilterField = { value: string; noValue?: boolean; }; + dataSource?: string; + collectionField?: string; }; export const ChartFilterContext = createContext<{ 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 25126d192f..b6745f9dc4 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 @@ -137,6 +137,8 @@ export const useChartFilter = () => { 'x-component-props': { ...field.uiSchema?.['x-component-props'], 'filter-operator': defaultOperator, + 'data-source': dataSource, + 'collection-field': `${fieldName}.${field.name}`, }, 'x-filter-operators': defaultOperator?.value, }; @@ -195,6 +197,8 @@ export const useChartFilter = () => { title, 'x-component-props': { 'filter-operator': defaultOperator, + 'data-source': dataSource, + 'collection-field': `${fieldName}.${child.name}`, }, 'x-filter-operators': defaultOperator?.value, }; @@ -319,8 +323,12 @@ export const useChartFilter = () => { .filter(([_, props]) => props) .forEach(([name, props]) => { const { operator } = props || {}; - const { dataSource, fieldName: _fieldName } = parseFilterFieldName(name); - let fieldName = _fieldName; + let { dataSource, collectionField: fieldName } = props || {}; + if (!fieldName) { + const parsed = parseFilterFieldName(name); + dataSource = parsed.dataSource; + fieldName = parsed.fieldName; + } const ds = dm.getDataSource(dataSource); const cm = ds.collectionManager; const field = cm.getCollectionField(fieldName);