UNPKG

@qn-pandora/pandora-visualization

Version:

Pandora 通用可视化库

67 lines (66 loc) 3.01 kB
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); }; import { findIndex, groupBy, sum, get, sortBy } from 'lodash'; import { EChartConditionType } from '@qn-pandora/app-sdk'; import { hexToHslGradient } from '../transforms/color'; function getData(rows, fields, metricIndex, buckets, bucketIndex, unitTransformer, maxSlice) { var bucket = buckets[bucketIndex]; var fieldIndex = findIndex(fields, function (field) { return field.key === bucket; }); var result = 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 = sum(result[key].map(function (line) { return line[metricIndex][0]; })); return __assign({ name: key, type: EChartConditionType.Bucket, value: value, itemStyle: {} }, (isLastBucket ? {} : { children: getData(result[key], fields, metricIndex, buckets, bucketIndex + 1, unitTransformer) })); }); } export 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 = findIndex(fields, function (field) { return field.key === metric; }); var defaultColor = get(themeOption, ['sunburst', 'color']) ? get(themeOption, ['sunburst', 'color']) : themeOption.color.map(function (t) { return hexToHslGradient(t); }); var datas = getData(rows, fields, metricIndex, buckets, 0, unitTransformer, maxSlice); // 处理排序和对应的颜色,否则echarts会自动排序,跟原本的颜色排序会不一致 var sortedData = 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; } 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) } : {})); }); }