UNPKG

@qn-pandora/pandora-visualization

Version:

Pandora 通用可视化库

97 lines (96 loc) 4.41 kB
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] }; }); }