diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/client/__tests__/utils.test.ts b/packages/plugins/@nocobase/plugin-data-visualization/src/client/__tests__/utils.test.ts index b862bedd63..f05e5d4169 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/client/__tests__/utils.test.ts +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/client/__tests__/utils.test.ts @@ -10,35 +10,72 @@ import { processData } from '../utils'; describe('utils', () => { - it('processFields', () => { - expect( - processData( - [ - { - name: 'tag', - type: 'bigInt', - interface: 'select', - uiSchema: { - type: 'string', - enum: [ - { - value: '1', - label: 'Yes', - }, - { - value: '2', - label: 'No', - }, - ], + describe('process data', () => { + it('should process select field', () => { + expect( + processData( + [ + { + name: 'tag', + type: 'bigInt', + interface: 'select', + uiSchema: { + type: 'string', + enum: [ + { + value: '1', + label: 'Yes', + }, + { + value: '2', + label: 'No', + }, + ], + }, + label: 'Tag', + value: 'tag', + key: 'tag', }, - label: 'Tag', - value: 'tag', - key: 'tag', - }, - ], - [{ tag: 1 }], - {}, - ), - ).toEqual([{ tag: 'Yes' }]); + ], + [{ tag: 1 }], + {}, + ), + ).toEqual([{ tag: 'Yes' }]); + }); + it('should not process when aggregating', () => { + expect( + processData( + [ + { + name: 'tag', + type: 'bigInt', + interface: 'select', + uiSchema: { + type: 'string', + enum: [ + { + value: '1', + label: 'Yes', + }, + { + value: '2', + label: 'No', + }, + ], + }, + label: 'Tag', + value: 'tag', + key: 'tag', + query: { + field: 'tag', + aggregation: 'count', + }, + }, + ], + [{ tag: 1 }], + {}, + ), + ).toEqual([{ tag: 1 }]); + }); }); }); diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/client/utils.ts b/packages/plugins/@nocobase/plugin-data-visualization/src/client/utils.ts index 43701e5a42..7db59e21d4 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/client/utils.ts +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/client/utils.ts @@ -94,6 +94,7 @@ export const getSelectedFields = (fields: FieldOption[], query: QueryProps) => { key: selectedField.alias || fieldProps?.key, label: selectedField.alias || fieldProps?.label, value: selectedField.alias || fieldProps?.value, + query: selectedField, }; }); }; @@ -105,7 +106,7 @@ export const getSelectedFields = (fields: FieldOption[], query: QueryProps) => { return selectedFields; }; -export const processData = (selectedFields: FieldOption[], data: any[], scope: any) => { +export const processData = (selectedFields: (FieldOption & { query?: any })[], data: any[], scope: any) => { const parseEnum = (field: FieldOption, value: any) => { const options = field.uiSchema?.enum as { value: string; label: string }[]; if (!options || !Array.isArray(options)) { @@ -120,7 +121,7 @@ export const processData = (selectedFields: FieldOption[], data: any[], scope: a return data.map((record) => { const processed = {}; Object.entries(record).forEach(([key, value]) => { - const field = selectedFields.find((field) => field.value === key); + const field = selectedFields.find((field) => field.value === key && !field?.query?.aggregation); if (!field) { processed[key] = value; return;