From 067042ac3a01afb5b2dcc866b3c56a162d434be3 Mon Sep 17 00:00:00 2001 From: YANG QIA <2013xile@gmail.com> Date: Thu, 18 Apr 2024 23:44:14 +0800 Subject: [PATCH] feat(data-vi): allows pie chart to accept negative numbers, fix T-4075 (#4094) --- .../src/client/chart/g2plot/pie.ts | 20 ++++++++++++++++--- .../src/client/transformers.ts | 6 +++--- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/client/chart/g2plot/pie.ts b/packages/plugins/@nocobase/plugin-data-visualization/src/client/chart/g2plot/pie.ts index b93b491109..e63ddbc45a 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/client/chart/g2plot/pie.ts +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/client/chart/g2plot/pie.ts @@ -32,15 +32,29 @@ export class Pie extends G2PlotChart { }; getProps({ data, general, advanced, fieldProps }: RenderProps) { - const angleFieldProps = fieldProps[general.angleField]; + const angleField = general.angleField; + const angleFieldProps: any = fieldProps[angleField] || {}; + const hasMinus = data.some((item: any) => item[angleField] < 0); + if (hasMinus) { + const min = Math.min(...data.map((item: any) => item[angleField])); + data = data.map((item: any) => ({ + ...item, + [angleField]: item[angleField] - min, + })); + const transformer = angleFieldProps.transformer; + angleFieldProps.transformer = (value: number) => { + const v = value + min; + return transformer ? transformer(v) : v; + }; + } const props = super.getProps({ data, general, advanced, fieldProps }); return { ...props, tooltip: { items: [ (data: any) => { - const { [general.colorField]: color, [general.angleField]: angle } = data; - const name = color || angleFieldProps?.label || general.angleField; + const { [general.colorField]: color, [angleField]: angle } = data; + const name = color || angleFieldProps?.label || angleField; const transformer = angleFieldProps?.transformer; return { name, value: transformer ? transformer(angle) : angle }; }, diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/client/transformers.ts b/packages/plugins/@nocobase/plugin-data-visualization/src/client/transformers.ts index 796e50c7ad..d22361d23e 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/client/transformers.ts +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/client/transformers.ts @@ -174,11 +174,11 @@ const transformers: { fn: (val: number, separator: string) => { switch (separator) { case 'en-US': - return val.toLocaleString('en-US', { maximumFractionDigits: 2 }); + return val.toLocaleString('en-US', { minimumFractionDigits: 2 }); case 'de-DE': - return val.toLocaleString('de-DE', { maximumFractionDigits: 2 }); + return val.toLocaleString('de-DE', { minimumFractionDigits: 2 }); case 'ru-RU': - return val.toLocaleString('ru-RU', { maximumFractionDigits: 2 }); + return val.toLocaleString('ru-RU', { minimumFractionDigits: 2 }); default: return val; }