"use strict"; 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); }