@jiaminghi/charts
Version:
Lightweight charting
298 lines (260 loc) • 9.67 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.radar = radar;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _updater = require("../class/updater.class");
var _index = require("../config/index");
var _util = require("@jiaminghi/c-render/lib/plugin/util");
var _color = require("@jiaminghi/color");
var _util2 = require("../util");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function radar(chart) {
var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var series = option.series;
if (!series) series = [];
var radars = (0, _util2.initNeedSeries)(series, _index.radarConfig, 'radar');
radars = calcRadarPosition(radars, chart);
radars = calcRadarLabelPosition(radars, chart);
radars = calcRadarLabelAlign(radars, chart);
(0, _updater.doUpdate)({
chart: chart,
series: radars,
key: 'radar',
getGraphConfig: getRadarConfig,
getStartGraphConfig: getStartRadarConfig,
beforeChange: beforeChangeRadar
});
(0, _updater.doUpdate)({
chart: chart,
series: radars,
key: 'radarPoint',
getGraphConfig: getPointConfig,
getStartGraphConfig: getStartPointConfig
});
(0, _updater.doUpdate)({
chart: chart,
series: radars,
key: 'radarLabel',
getGraphConfig: getLabelConfig
});
}
function calcRadarPosition(radars, chart) {
var radarAxis = chart.radarAxis;
if (!radarAxis) return [];
var indicator = radarAxis.indicator,
axisLineAngles = radarAxis.axisLineAngles,
radius = radarAxis.radius,
centerPos = radarAxis.centerPos;
radars.forEach(function (radarItem) {
var data = radarItem.data;
radarItem.dataRadius = [];
radarItem.radarPosition = indicator.map(function (_ref, i) {
var max = _ref.max,
min = _ref.min;
var v = data[i];
if (typeof max !== 'number') max = v;
if (typeof min !== 'number') min = 0;
if (typeof v !== 'number') v = min;
var dataRadius = (v - min) / (max - min) * radius;
radarItem.dataRadius[i] = dataRadius;
return _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2["default"])(centerPos).concat([dataRadius, axisLineAngles[i]]));
});
});
return radars;
}
function calcRadarLabelPosition(radars, chart) {
var radarAxis = chart.radarAxis;
if (!radarAxis) return [];
var centerPos = radarAxis.centerPos,
axisLineAngles = radarAxis.axisLineAngles;
radars.forEach(function (radarItem) {
var dataRadius = radarItem.dataRadius,
label = radarItem.label;
var labelGap = label.labelGap;
radarItem.labelPosition = dataRadius.map(function (r, i) {
return _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2["default"])(centerPos).concat([r + labelGap, axisLineAngles[i]]));
});
});
return radars;
}
function calcRadarLabelAlign(radars, chart) {
var radarAxis = chart.radarAxis;
if (!radarAxis) return [];
var _radarAxis$centerPos = (0, _slicedToArray2["default"])(radarAxis.centerPos, 2),
x = _radarAxis$centerPos[0],
y = _radarAxis$centerPos[1];
radars.forEach(function (radarItem) {
var labelPosition = radarItem.labelPosition;
var labelAlign = labelPosition.map(function (_ref2) {
var _ref3 = (0, _slicedToArray2["default"])(_ref2, 2),
lx = _ref3[0],
ly = _ref3[1];
var textAlign = lx > x ? 'left' : 'right';
var textBaseline = ly > y ? 'top' : 'bottom';
return {
textAlign: textAlign,
textBaseline: textBaseline
};
});
radarItem.labelAlign = labelAlign;
});
return radars;
}
function getRadarConfig(radarItem) {
var animationCurve = radarItem.animationCurve,
animationFrame = radarItem.animationFrame,
rLevel = radarItem.rLevel;
return [{
name: 'polyline',
index: rLevel,
animationCurve: animationCurve,
animationFrame: animationFrame,
shape: getRadarShape(radarItem),
style: getRadarStyle(radarItem)
}];
}
function getStartRadarConfig(radarItem, updater) {
var centerPos = updater.chart.radarAxis.centerPos;
var config = getRadarConfig(radarItem)[0];
var pointNum = config.shape.points.length;
var points = new Array(pointNum).fill(0).map(function (foo) {
return (0, _toConsumableArray2["default"])(centerPos);
});
config.shape.points = points;
return [config];
}
function getRadarShape(radarItem) {
var radarPosition = radarItem.radarPosition;
return {
points: radarPosition,
close: true
};
}
function getRadarStyle(radarItem) {
var radarStyle = radarItem.radarStyle,
color = radarItem.color;
var colorRgbaValue = (0, _color.getRgbaValue)(color);
colorRgbaValue[3] = 0.5;
var radarDefaultColor = {
stroke: color,
fill: (0, _color.getColorFromRgbValue)(colorRgbaValue)
};
return (0, _util2.deepMerge)(radarDefaultColor, radarStyle);
}
function beforeChangeRadar(graph, _ref4) {
var shape = _ref4.shape;
var graphPoints = graph.shape.points;
var graphPointsNum = graphPoints.length;
var pointsNum = shape.points.length;
if (pointsNum > graphPointsNum) {
var lastPoint = graphPoints.slice(-1)[0];
var newAddPoints = new Array(pointsNum - graphPointsNum).fill(0).map(function (foo) {
return (0, _toConsumableArray2["default"])(lastPoint);
});
graphPoints.push.apply(graphPoints, (0, _toConsumableArray2["default"])(newAddPoints));
} else if (pointsNum < graphPointsNum) {
graphPoints.splice(pointsNum);
}
}
function getPointConfig(radarItem) {
var radarPosition = radarItem.radarPosition,
animationCurve = radarItem.animationCurve,
animationFrame = radarItem.animationFrame,
rLevel = radarItem.rLevel;
return radarPosition.map(function (foo, i) {
return {
name: 'circle',
index: rLevel,
animationCurve: animationCurve,
animationFrame: animationFrame,
visible: radarItem.point.show,
shape: getPointShape(radarItem, i),
style: getPointStyle(radarItem, i)
};
});
}
function getStartPointConfig(radarItem) {
var configs = getPointConfig(radarItem);
configs.forEach(function (config) {
return config.shape.r = 0.01;
});
return configs;
}
function getPointShape(radarItem, i) {
var radarPosition = radarItem.radarPosition,
point = radarItem.point;
var radius = point.radius;
var position = radarPosition[i];
return {
rx: position[0],
ry: position[1],
r: radius
};
}
function getPointStyle(radarItem, i) {
var point = radarItem.point,
color = radarItem.color;
var style = point.style;
return (0, _util2.deepMerge)({
stroke: color
}, style);
}
function getLabelConfig(radarItem) {
var labelPosition = radarItem.labelPosition,
animationCurve = radarItem.animationCurve,
animationFrame = radarItem.animationFrame,
rLevel = radarItem.rLevel;
return labelPosition.map(function (foo, i) {
return {
name: 'text',
index: rLevel,
visible: radarItem.label.show,
animationCurve: animationCurve,
animationFrame: animationFrame,
shape: getLabelShape(radarItem, i),
style: getLabelStyle(radarItem, i)
};
});
}
function getLabelShape(radarItem, i) {
var labelPosition = radarItem.labelPosition,
label = radarItem.label,
data = radarItem.data;
var offset = label.offset,
formatter = label.formatter;
var position = mergePointOffset(labelPosition[i], offset);
var labelText = data[i] ? data[i].toString() : '0';
var formatterType = (0, _typeof2["default"])(formatter);
if (formatterType === 'string') labelText = formatter.replace('{value}', labelText);
if (formatterType === 'function') labelText = formatter(labelText);
return {
content: labelText,
position: position
};
}
function mergePointOffset(_ref5, _ref6) {
var _ref7 = (0, _slicedToArray2["default"])(_ref5, 2),
x = _ref7[0],
y = _ref7[1];
var _ref8 = (0, _slicedToArray2["default"])(_ref6, 2),
ox = _ref8[0],
oy = _ref8[1];
return [x + ox, y + oy];
}
function getLabelStyle(radarItem, i) {
var label = radarItem.label,
color = radarItem.color,
labelAlign = radarItem.labelAlign;
var style = label.style;
var defaultColorAndAlign = _objectSpread({
fill: color
}, labelAlign[i]);
return (0, _util2.deepMerge)(defaultColorAndAlign, style);
}