@qn-pandora/pandora-visualization
Version:
Pandora 通用可视化库
71 lines (70 loc) • 3.2 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSunburstChartData = void 0;
var lodash_1 = require("lodash");
var app_sdk_1 = require("@qn-pandora/app-sdk");
var color_1 = require("../transforms/color");
function getData(rows, fields, metricIndex, buckets, bucketIndex, unitTransformer, maxSlice) {
var bucket = buckets[bucketIndex];
var fieldIndex = lodash_1.findIndex(fields, function (field) { return field.key === bucket; });
var result = lodash_1.groupBy(rows, fieldIndex);
var keys = Object.keys(result);
if (maxSlice && keys.length > maxSlice) {
keys = keys.slice(0, maxSlice);
}
return keys.map(function (key) {
var isLastBucket = bucketIndex === buckets.length - 1;
var value = lodash_1.sum(result[key].map(function (line) { return line[metricIndex][0]; }));
return __assign({ name: key, type: app_sdk_1.EChartConditionType.Bucket, value: value, itemStyle: {} }, (isLastBucket
? {}
: {
children: getData(result[key], fields, metricIndex, buckets, bucketIndex + 1, unitTransformer)
}));
});
}
function getSunburstChartData(themeOption, dataset, metrics, buckets, unitTransformer, maxSlice) {
var rows = dataset.rows, fields = dataset.fields;
if (metrics.length === 0 || buckets.length === 0) {
return [];
}
var metric = metrics[0];
var metricIndex = lodash_1.findIndex(fields, function (field) { return field.key === metric; });
var defaultColor = lodash_1.get(themeOption, ['sunburst', 'color'])
? lodash_1.get(themeOption, ['sunburst', 'color'])
: themeOption.color.map(function (t) { return color_1.hexToHslGradient(t); });
var datas = getData(rows, fields, metricIndex, buckets, 0, unitTransformer, maxSlice);
// 处理排序和对应的颜色,否则echarts会自动排序,跟原本的颜色排序会不一致
var sortedData = lodash_1.sortBy(datas, ['value']).reverse();
sortedData.forEach(function (data, index) {
data.itemStyle = {
color: defaultColor[index % defaultColor.length][0]
};
if (data.children) {
data.children = setChildrenColor(data.children, 1, defaultColor[index % defaultColor.length]);
}
});
return sortedData;
}
exports.getSunburstChartData = getSunburstChartData;
function setChildrenColor(children, bucketIndex, defaultColor) {
return children.map(function (child) {
return __assign(__assign(__assign({}, child), { itemStyle: {
color: defaultColor[bucketIndex % defaultColor.length]
} }), (child.children
? {
children: setChildrenColor(child.children, bucketIndex + 1, defaultColor)
}
: {}));
});
}