UNPKG

@qn-pandora/pandora-visualization

Version:

Pandora 通用可视化库

117 lines (116 loc) 5.86 kB
var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spread = (this && this.__spread) || function () { for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); return ar; }; import { get, find, uniq, isUndefined } from 'lodash'; import { colorMap as TwodColorMap } from '@qn-pandora/pandora-app-component/es/components/LegendColorPanel'; import { getSeriesFromDataset, getSeriesFromDatasetWithoutGroup } from '../../components/Charts/transforms/two-d'; import { hexToRgb } from '../../components/Charts/transforms/color'; import { ChartType } from '../../constants/chart-style'; import { OVERLAP_LINE_SUFFIX } from '../../constants/chart-style'; export function getColors(themeOption, dataset, chartStyleService) { var chartType = chartStyleService.chartType, colorFields = chartStyleService.colors.fields, mainAxisField = chartStyleService.mainAxis.field, _a = chartStyleService.crossAxis1, originCrossAxisFields = _a.fields, subFields = _a.subFields, fieldsGetter = _a.fieldsGetter, _b = chartStyleService.crossAxis2, crossAxis2Fields = _b.fields, y2Buckets = _b.y2Buckets, useCrossAxis2 = chartStyleService.useCrossAxis2, displayColors = chartStyleService.displayColors, colorMode = chartStyleService.colorMode; var crossAxisFields = __spread(originCrossAxisFields, ((fieldsGetter === null || fieldsGetter === void 0 ? void 0 : fieldsGetter(dataset.fields)) || [])); var showMetricInName = __spread(uniq(crossAxisFields), (useCrossAxis2 ? uniq(crossAxis2Fields) : []), subFields).length > 1; // 主y轴 var baseData = getSeriesFromDataset(dataset, colorFields, mainAxisField, crossAxisFields, [], showMetricInName); var baseColors = toTwdColors(themeOption, chartType, baseData, displayColors, false, 0, colorMode); if (chartType === ChartType.LineBar) { // 主y轴中叠加的折线 var subData = getSeriesFromDatasetWithoutGroup(dataset, mainAxisField, subFields || [], []); var subColors = toTwdColors(themeOption, chartType, subData, displayColors, true, baseData.length, colorMode); return __spread(baseColors, subColors); } if (chartType === ChartType.LineBarY2 || chartType === ChartType.LineY2) { // 次y轴data var overlapData = getSeriesFromDataset(dataset, y2Buckets, mainAxisField, crossAxis2Fields); var realOverlapData = chartType === ChartType.LineBarY2 ? overlapData.map(function (serie) { return serie.map(function (item) { item.name += OVERLAP_LINE_SUFFIX; return item; }); }) : overlapData; var overlapColors = toTwdColors(themeOption, chartType, realOverlapData, displayColors, chartType === ChartType.LineBarY2, baseData.length, colorMode); return __spread(baseColors, overlapColors); } return __spread(baseColors); } export var toTwdColors = function (themeOption, chartType, data, displayColors, isOverlap, length, colorMode) { if (data === void 0) { data = []; } if (isOverlap === void 0) { isOverlap = false; } if (length === void 0) { length = 0; } if (data) { var defaultColors_1 = getDefaultColors(themeOption, chartType, colorMode); return data.map(function (item, index) { var name = get(item, [0, 'name']) || ''; var fieldType = get(item, [0, 'fieldType']) || ''; var color = find(displayColors, function (color) { return color.name === name; }); var realIndex = index + length; var defaultColor = defaultColors_1[realIndex % defaultColors_1.length]; return { name: name, fieldType: fieldType, isOverlap: isOverlap, color: color ? color.color : defaultColor ? "rgb(" + defaultColor.r + "," + defaultColor.g + "," + defaultColor.b + ")" : undefined, isCustomColor: isUndefined(color === null || color === void 0 ? void 0 : color.isCustomColor) ? true : color === null || color === void 0 ? void 0 : color.isCustomColor }; }); } return []; }; // 获取默认的颜色组 function getDefaultColors(themeOption, chartType, colorMode) { switch (chartType) { case ChartType.Line: case ChartType.StackLine: case ChartType.PercentageLine: case ChartType.Area: case ChartType.PercentageArea: case ChartType.StackArea: case ChartType.LineY2: chartType = ChartType.Line; break; case ChartType.Bar: case ChartType.StackBar: case ChartType.PercentageBar: case ChartType.VerticalBar: case ChartType.StackVerticalBar: case ChartType.PercentageVerticalBar: case ChartType.LineBar: case ChartType.LineBarY2: chartType = ChartType.Bar; break; default: } var defaultColors = get(TwodColorMap, colorMode) || get(themeOption, [chartType, 'color']); var twodColor = get(themeOption, 'twodColor'); return defaultColors && defaultColors.length ? defaultColors.map(hexToRgb) : twodColor && twodColor.length ? twodColor.map(hexToRgb) : themeOption.color.map(hexToRgb); }