mirror of
https://gitee.com/nocobase/nocobase.git
synced 2025-07-01 18:52:20 +08:00
* chore(bi): complete chart api * feat(bi): sample plugin for adding custom charts * chore: improve * chore: remove console.log
49 lines
1.3 KiB
TypeScript
49 lines
1.3 KiB
TypeScript
import { RenderProps } from '@nocobase/plugin-data-visualization/client';
|
|
import * as echarts from 'echarts';
|
|
|
|
echarts.registerTransform({
|
|
type: 'data-visualization:transform',
|
|
transform: function (params: any) {
|
|
const fieldProps = params.config.fieldProps as RenderProps['fieldProps'];
|
|
const data = params.upstream.cloneRawData();
|
|
return {
|
|
data: data.map((row: any) => {
|
|
Object.entries(fieldProps).forEach(([key, props]) => {
|
|
if (props.transformer) {
|
|
row[key] = props.transformer(row[key]);
|
|
}
|
|
});
|
|
return row;
|
|
}),
|
|
};
|
|
} as any,
|
|
});
|
|
|
|
echarts.registerTransform({
|
|
type: 'data-visualization:toSeries',
|
|
transform: function (params: any) {
|
|
const data = params.upstream.cloneRawData();
|
|
const { xField, yField, seriesField } = params.config || {};
|
|
if (!seriesField) {
|
|
return { data };
|
|
}
|
|
const dataMap = data.reduce((map: any, row: any) => {
|
|
if (!map[row[xField]]) {
|
|
map[row[xField]] = { [row[seriesField]]: row[yField] };
|
|
return map;
|
|
}
|
|
map[row[xField]][row[seriesField]] = row[yField];
|
|
return map;
|
|
}, {});
|
|
const result = Object.entries(dataMap).map(([key, value]: any) => {
|
|
return {
|
|
[xField]: key,
|
|
...value,
|
|
};
|
|
});
|
|
return {
|
|
data: result,
|
|
};
|
|
},
|
|
});
|