@qn-pandora/pandora-visualization
Version:
Pandora 通用可视化库
98 lines (97 loc) • 4.06 kB
JavaScript
import { toNumber, first, last, isNumber } from 'lodash';
import { getRuleColor } from '../transforms/color-splitter';
// 数值color range
function getSplitterRangeColor(defaultColor, colorSplitter, value) {
var colorPalette = colorSplitter.colorPalette, _a = colorSplitter.scale, scale = _a === void 0 ? [] : _a;
var colors = colorPalette.value;
if (!scale || !scale.length) {
// 非初始化,没有设置分段显示
return defaultColor[0];
}
else {
if (!colors.length) {
// 初始化有分段数值,但是没有取到颜色
colors = defaultColor.slice(0, scale.length - 1);
}
}
if (isValueNumber(value)) {
var min = first(scale);
var max = last(scale);
var currentData_1 = toNumber(value);
if (isNumber(min) && toNumber(currentData_1) <= min) {
return colors[0];
}
var index = scale.findIndex(function (item) { return isNumber(item) && toNumber(item) >= toNumber(currentData_1); });
if (index >= 1) {
return colors[index - 1];
}
if (!isNumber(max) || toNumber(currentData_1) >= max) {
return colors[colors.length - 1];
}
}
return colors[colors.length - 1];
}
// 仪表单值 colorRange
function getGaugeColorRange(defaultColor, colorSplitter, gaugeMin, gaugeMax, value) {
var colorPalette = colorSplitter.colorPalette, _a = colorSplitter.scale, scale = _a === void 0 ? [] : _a;
var colors = colorPalette.value;
if (!scale || !scale.length) {
// 非初始化,没有设置分段显示
return { percent: 0, color: defaultColor[0] };
}
else {
if (!colors.length) {
// 初始化有分段数值,但是没有取到颜色
colors = defaultColor.slice(0, scale.length - 1);
}
}
if (isValueNumber(value)) {
var min = first(scale) || gaugeMin;
var max = last(scale) || gaugeMax;
var currentData_2 = toNumber(value);
var percent = (currentData_2 - min) / (max - min);
if (isNumber(min) && toNumber(currentData_2) <= min) {
return { percent: percent, color: colors[0] };
}
var index = scale.findIndex(function (item) { return isNumber(item) && toNumber(item) >= toNumber(currentData_2); });
if (index >= 1) {
return { percent: percent, color: colors[index - 1] };
}
if (!isNumber(gaugeMax) || toNumber(currentData_2) >= gaugeMax) {
return { percent: percent, color: last(colors) };
}
}
return {
percent: 0,
color: colors.length ? colors[colors.length - 1] : defaultColor[0]
};
}
function isValueNumber(value) {
return !isNaN(toNumber(value));
}
// 获取仪表以及占比颜色
export function getGaugeColor(backgroundColor, defaultColor, option, getColorRange, colorData, currentData) {
if (option.colorMetricIsNumberic) {
var colorValue = getGaugeColorRange(defaultColor, option.gaugeSplitters, option.gaugeMin, option.gaugeMax, colorData);
return getColorRange(colorValue.percent, { color: colorValue.color }, backgroundColor);
}
var _a = option.gaugeSplitters, colorPalette = _a.colorPalette, rules = _a.rules;
var colors = colorPalette.value;
if (!rules ||
!rules.length ||
!colors.length ||
!isValueNumber(currentData)) {
return getColorRange(0, { color: defaultColor[0] }, backgroundColor);
}
var percent = (toNumber(currentData) - option.gaugeMin) /
(option.gaugeMax - option.gaugeMin);
var color = getRuleColor(defaultColor[0], option.gaugeSplitters, colorData);
return getColorRange(percent, { color: color }, backgroundColor);
}
// 数值图颜色
export function getColor(defaultColor, option, value) {
if (option.colorMetricIsNumberic) {
return getSplitterRangeColor(defaultColor, option.gaugeSplitters, value);
}
return getRuleColor(defaultColor[0], option.gaugeSplitters, value);
}