feat(data-vi): allows pie chart to accept negative numbers, fix T-4075 (#4094)

This commit is contained in:
YANG QIA 2024-04-18 23:44:14 +08:00 committed by GitHub
parent 2d9ed8d1ff
commit 067042ac3a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 6 deletions

View File

@ -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 };
},

View File

@ -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;
}