'use strict';
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var constants = require('./constants');
var utils = require('./utils');
require('echarts/lib/chart/radar');
var Core = _interopDefault(require('./core'));
function getRadarLegend(rows, dimension, legendName) {
var legendData = rows.map(function (row) {
return row[dimension];
});
return {
data: legendData,
formatter: function formatter(name) {
return legendName[name] != null ? legendName[name] : name;
}
};
}
function getRadarTooltip(dataType, radar$$1, digit) {
var typeTemp = [];
var nameTemp = [];
radar$$1.indicator.map(function (item, index) {
typeTemp[index] = dataType[item.name];
nameTemp[index] = item.name;
});
return {
formatter: function formatter(item) {
var tpl = [];
tpl.push(constants.itemPoint(item.color));
tpl.push(item.name + '
');
item.data.value.forEach(function (val, index) {
tpl.push(nameTemp[index] + ': ');
tpl.push(utils.getFormated(val, typeTemp[index], digit) + '
');
});
return tpl.join('');
}
};
}
function getRadarSetting(rows, metrics, labelMap) {
var settingBase = {
indicator: [],
shape: 'circle',
splitNumber: 5
};
var indicatorTemp = {};
rows.forEach(function (items) {
metrics.forEach(function (item) {
var key = labelMap[item] != null ? labelMap[item] : item;
if (!indicatorTemp[key]) {
indicatorTemp[key] = [items[item]];
} else {
indicatorTemp[key].push(items[item]);
}
});
});
settingBase.indicator = Object.keys(indicatorTemp).map(function (key) {
return {
name: key,
max: Math.max.apply(null, indicatorTemp[key])
};
});
return settingBase;
}
function getRadarSeries(args) {
var rows = args.rows,
dimension = args.dimension,
metrics = args.metrics,
radar$$1 = args.radar,
label = args.label,
itemStyle = args.itemStyle,
lineStyle = args.lineStyle,
labelMap = args.labelMap,
areaStyle = args.areaStyle;
var radarIndexObj = {};
radar$$1.indicator.forEach(function (item, index) {
var name = item.name;
radarIndexObj[name] = index;
});
var seriesData = rows.map(function (row) {
var serieData = {
value: [],
name: row[dimension]
};
Object.keys(row).forEach(function (key) {
if (~metrics.indexOf(key)) {
var k = labelMap[key] != null ? radarIndexObj[labelMap[key]] : radarIndexObj[key];
serieData.value[k] = row[key];
}
});
return serieData;
});
var result = {
name: dimension,
type: 'radar',
data: seriesData
};
if (label) result.label = label;
if (itemStyle) result.itemStyle = itemStyle;
if (lineStyle) result.lineStyle = lineStyle;
if (areaStyle) result.areaStyle = areaStyle;
return [result];
}
var radar$1 = function radar$$1(columns, rows, settings, extra) {
var _settings$dataType = settings.dataType,
dataType = _settings$dataType === undefined ? {} : _settings$dataType,
_settings$legendName = settings.legendName,
legendName = _settings$legendName === undefined ? {} : _settings$legendName,
_settings$labelMap = settings.labelMap,
labelMap = _settings$labelMap === undefined ? {} : _settings$labelMap,
_settings$dimension = settings.dimension,
dimension = _settings$dimension === undefined ? columns[0] : _settings$dimension,
_settings$digit = settings.digit,
digit = _settings$digit === undefined ? 2 : _settings$digit,
label = settings.label,
itemStyle = settings.itemStyle,
lineStyle = settings.lineStyle,
areaStyle = settings.areaStyle;
var tooltipVisible = extra.tooltipVisible,
legendVisible = extra.legendVisible;
var metrics = columns.slice();
if (settings.metrics) {
metrics = settings.metrics;
} else {
metrics.splice(columns.indexOf(dimension), 1);
}
var legend = legendVisible && getRadarLegend(rows, dimension, legendName);
var radar$$1 = getRadarSetting(rows, metrics, labelMap);
var tooltip = tooltipVisible && getRadarTooltip(dataType, radar$$1, digit);
var series = getRadarSeries({
rows: rows,
dimension: dimension,
metrics: metrics,
radar: radar$$1,
label: label,
itemStyle: itemStyle,
lineStyle: lineStyle,
labelMap: labelMap,
areaStyle: areaStyle
});
var options = { legend: legend, tooltip: tooltip, radar: radar$$1, series: series };
return options;
};
var _extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
var index = _extends({}, Core, {
name: 'VeRadar',
data: function data() {
this.chartHandler = radar$1;
return {};
}
});
module.exports = index;