@qn-pandora/pandora-visualization
Version:
Pandora 通用可视化库
97 lines (96 loc) • 4.41 kB
JavaScript
import { findIndex, toNumber, sortBy, sumBy, find, get, uniq } from 'lodash';
import { EChartFieldType } from '@qn-pandora/app-sdk';
import { colorMap } from '@qn-pandora/pandora-app-component/es/components/LegendColorPanel';
import { formatString } from '../../../services';
import { BaseLocale } from '../../../constants/language/base/type';
import { normalizeTimeFormat } from '../../../utils/normalizeTimeFormat';
export function getMetricColors(themeOption, chartType, currentMetrics, colors, dataset, maxSlices, sort) {
// tslint:disable-next-line
var data = [];
currentMetrics.forEach(function (metric) {
if (dataset.rows.length > 0) {
var line = dataset.rows[0];
var index = findIndex(dataset.fields, function (field) { return field.key === metric; });
data.push({
value: line[index] ? toNumber(line[index][0]) || 0 : 0,
name: metric
});
}
});
// 排序
if (sort) {
data = sortBy(data, function (series) { return -series.value; });
}
if (data.length > maxSlices) {
var otherData = data.slice(maxSlices);
var otherValue = sumBy(otherData, function (series) { return toNumber(series.value) || 0; });
data = data.slice(0, maxSlices).concat({
name: formatString(BaseLocale.other),
value: otherValue
});
}
return data.map(function (item, index) {
var colorItem = find(colors, function (color) { return color.name === item.name; });
var defaultColor = get(themeOption, [chartType, 'color'])
? get(themeOption, [chartType, 'color'])
: themeOption.color;
return {
name: item.name,
color: colorItem
? colorItem.color
: defaultColor[index % defaultColor.length]
};
});
}
export function getPieBucketColors(themeOption, chartType, dataset, metrics, buckets, maxSlices, colors, colorMode, sort) {
var bucketsObj = dataset.fields.filter(function (field) { return findIndex(buckets, function (bucket) { return field.name === bucket; }) !== -1; });
var isDateSeries = !!bucketsObj.find(function (bucket) { return bucket.fieldType === EChartFieldType.Time; });
var data = getPieData(dataset, metrics, buckets, isDateSeries, maxSlices, sort);
return getPieBucketColorWithData(themeOption, chartType, data, colors, colorMode);
}
export function getPieData(dataset, metrics, buckets, isDateSeries, maxSlices, sort) {
var rows = dataset.rows, fields = dataset.fields;
var metric = metrics[0];
var bucket = buckets[0];
var data = rows.map(function (line) {
var bucketIndex = findIndex(fields, function (field) { return field.key === bucket; });
var metricIndex = findIndex(fields, function (field) { return field.key === metric; });
var name = line[bucketIndex] ? line[bucketIndex][0] : '';
var value = line[metricIndex] ? toNumber(line[metricIndex][0]) || 0 : 0;
return {
value: value,
name: name === null
? 'null'
: isDateSeries
? normalizeTimeFormat(name)
: name.toString()
};
});
// 排序
if (sort) {
data = sortBy(data, function (series) { return -series.value; });
}
// 判断data数据如果超过设置的最大切片数,将多余分片归总到其他分类
if (data.length > maxSlices) {
var otherData = data.slice(maxSlices);
var otherValue = sumBy(otherData, function (series) { return toNumber(series.value) || 0; });
data = data.slice(0, maxSlices).concat({
name: formatString(BaseLocale.other),
value: otherValue
});
}
return data;
}
export function getPieBucketColorWithData(themeOption, chartType, data, colors, colorMode) {
var names = uniq(data.map(function (item) { return item.name; }));
return names.map(function (name, index) {
var color = find(colors, function (color) { return color.name === name; });
var defaultColor = get(colorMap, colorMode) ||
get(themeOption, [chartType, 'color']) ||
themeOption.color;
return {
name: name,
color: color ? color.color : defaultColor[index % defaultColor.length]
};
});
}