'use strict';
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var utils = require('./utils');
var utilsLite = require('utils-lite');
var constants = require('./constants');
require('echarts/lib/chart/scatter');
var Core = _interopDefault(require('./core'));
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;
};
function getLineXAxis(args) {
var dimension = args.dimension,
rows = args.rows,
xAxisName = args.xAxisName,
axisVisible = args.axisVisible,
xAxisType = args.xAxisType;
return dimension.map(function (item, index) {
return {
type: xAxisType,
nameLocation: 'middle',
nameGap: 22,
name: xAxisName[index] || '',
axisTick: { show: true, lineStyle: { color: '#eee' } },
data: rows.map(function (row) {
return row[item];
}),
show: axisVisible
};
});
}
function getLineSeries(args) {
var rows = args.rows,
axisSite = args.axisSite,
metrics = args.metrics,
area = args.area,
stack = args.stack,
nullAddZero = args.nullAddZero,
labelMap = args.labelMap,
label = args.label,
itemStyle = args.itemStyle,
lineStyle = args.lineStyle,
areaStyle = args.areaStyle,
dimension = args.dimension;
var series = [];
var dataTemp = {};
var stackMap = stack && utils.getStackMap(stack);
metrics.forEach(function (item) {
dataTemp[item] = [];
});
rows.forEach(function (row) {
metrics.forEach(function (item) {
var value = null;
if (row[item] != null) {
value = row[item];
} else if (nullAddZero) {
value = 0;
}
dataTemp[item].push([row[dimension[0]], value]);
});
});
metrics.forEach(function (item) {
var seriesItem = {
name: labelMap[item] != null ? labelMap[item] : item,
type: 'line',
data: dataTemp[item]
};
if (area) seriesItem.areaStyle = { normal: {} };
if (axisSite.right) {
seriesItem.yAxisIndex = ~axisSite.right.indexOf(item) ? 1 : 0;
}
if (stack && stackMap[item]) seriesItem.stack = stackMap[item];
if (label) seriesItem.label = label;
if (itemStyle) seriesItem.itemStyle = itemStyle;
if (lineStyle) seriesItem.lineStyle = lineStyle;
if (areaStyle) seriesItem.areaStyle = areaStyle;
series.push(seriesItem);
});
return series;
}
function getLineYAxis(args) {
var yAxisName = args.yAxisName,
yAxisType = args.yAxisType,
axisVisible = args.axisVisible,
scale = args.scale,
min = args.min,
max = args.max,
digit = args.digit;
var yAxisBase = {
type: 'value',
axisTick: {
show: false
},
show: axisVisible
};
var yAxis = [];
var _loop = function _loop(i) {
if (yAxisType[i]) {
yAxis[i] = _extends({}, yAxisBase, {
axisLabel: {
formatter: function formatter(val) {
return utils.getFormated(val, yAxisType[i], digit);
}
}
});
} else {
yAxis[i] = _extends({}, yAxisBase);
}
yAxis[i].name = yAxisName[i] || '';
yAxis[i].scale = scale[i] || false;
yAxis[i].min = min[i] || null;
yAxis[i].max = max[i] || null;
};
for (var i = 0; i < 2; i++) {
_loop(i);
}
return yAxis;
}
function getLineTooltip(args) {
var axisSite = args.axisSite,
yAxisType = args.yAxisType,
digit = args.digit,
labelMap = args.labelMap,
tooltipFormatter = args.tooltipFormatter;
var rightItems = axisSite.right || [];
var rightList = labelMap ? rightItems.map(function (item) {
return labelMap[item] === undefined ? item : labelMap[item];
}) : rightItems;
return {
trigger: 'axis',
formatter: function formatter(items) {
if (tooltipFormatter) {
return tooltipFormatter.apply(null, arguments);
}
var tpl = [];
var _items$ = items[0],
name = _items$.name,
axisValueLabel = _items$.axisValueLabel;
var title = name || axisValueLabel;
tpl.push(title + '
');
items.forEach(function (_ref) {
var seriesName = _ref.seriesName,
data = _ref.data,
marker = _ref.marker;
var showData = null;
var type = ~rightList.indexOf(seriesName) ? yAxisType[1] : yAxisType[0];
var itemData = utilsLite.isArray(data) ? data[1] : data;
showData = utils.getFormated(itemData, type, digit);
tpl.push(marker);
tpl.push(seriesName + ': ' + showData);
tpl.push('
');
});
return tpl.join('');
}
};
}
function getLegend(args) {
var metrics = args.metrics,
legendName = args.legendName,
labelMap = args.labelMap;
if (!legendName && !labelMap) return { data: metrics };
var data = labelMap ? metrics.map(function (item) {
return labelMap[item] == null ? item : labelMap[item];
}) : metrics;
return {
data: data,
formatter: function formatter(name) {
return legendName[name] != null ? legendName[name] : name;
}
};
}
var line = function line(columns, rows, settings, extra) {
rows = utilsLite.isArray(rows) ? rows : [];
columns = utilsLite.isArray(columns) ? columns : [];
var _settings$axisSite = settings.axisSite,
axisSite = _settings$axisSite === undefined ? {} : _settings$axisSite,
_settings$yAxisType = settings.yAxisType,
yAxisType = _settings$yAxisType === undefined ? ['normal', 'normal'] : _settings$yAxisType,
_settings$xAxisType = settings.xAxisType,
xAxisType = _settings$xAxisType === undefined ? 'category' : _settings$xAxisType,
_settings$yAxisName = settings.yAxisName,
yAxisName = _settings$yAxisName === undefined ? [] : _settings$yAxisName,
_settings$dimension = settings.dimension,
dimension = _settings$dimension === undefined ? [columns[0]] : _settings$dimension,
_settings$xAxisName = settings.xAxisName,
xAxisName = _settings$xAxisName === undefined ? [] : _settings$xAxisName,
_settings$axisVisible = settings.axisVisible,
axisVisible = _settings$axisVisible === undefined ? true : _settings$axisVisible,
area = settings.area,
stack = settings.stack,
_settings$scale = settings.scale,
scale = _settings$scale === undefined ? [false, false] : _settings$scale,
_settings$min = settings.min,
min = _settings$min === undefined ? [null, null] : _settings$min,
_settings$max = settings.max,
max = _settings$max === undefined ? [null, null] : _settings$max,
_settings$nullAddZero = settings.nullAddZero,
nullAddZero = _settings$nullAddZero === undefined ? false : _settings$nullAddZero,
_settings$digit = settings.digit,
digit = _settings$digit === undefined ? 2 : _settings$digit,
_settings$legendName = settings.legendName,
legendName = _settings$legendName === undefined ? {} : _settings$legendName,
_settings$labelMap = settings.labelMap,
labelMap = _settings$labelMap === undefined ? {} : _settings$labelMap,
label = settings.label,
itemStyle = settings.itemStyle,
lineStyle = settings.lineStyle,
areaStyle = settings.areaStyle;
var tooltipVisible = extra.tooltipVisible,
legendVisible = extra.legendVisible,
tooltipFormatter = extra.tooltipFormatter;
var metrics = columns.slice();
if (axisSite.left && axisSite.right) {
metrics = axisSite.left.concat(axisSite.right);
} else if (axisSite.left && !axisSite.right) {
metrics = axisSite.left;
} else if (settings.metrics) {
metrics = settings.metrics;
} else {
metrics.splice(columns.indexOf(dimension[0]), 1);
}
var legend = legendVisible && getLegend({ metrics: metrics, legendName: legendName, labelMap: labelMap });
var tooltip = tooltipVisible && getLineTooltip({
axisSite: axisSite,
yAxisType: yAxisType,
digit: digit,
labelMap: labelMap,
xAxisType: xAxisType,
tooltipFormatter: tooltipFormatter
});
var xAxis = getLineXAxis({
dimension: dimension,
rows: rows,
xAxisName: xAxisName,
axisVisible: axisVisible,
xAxisType: xAxisType
});
var yAxis = getLineYAxis({
yAxisName: yAxisName,
yAxisType: yAxisType,
axisVisible: axisVisible,
scale: scale,
min: min,
max: max,
digit: digit
});
var series = getLineSeries({
rows: rows,
axisSite: axisSite,
metrics: metrics,
area: area,
stack: stack,
nullAddZero: nullAddZero,
labelMap: labelMap,
label: label,
itemStyle: itemStyle,
lineStyle: lineStyle,
areaStyle: areaStyle,
xAxisType: xAxisType,
dimension: dimension
});
var options = { legend: legend, xAxis: xAxis, series: series, yAxis: yAxis, tooltip: tooltip };
return options;
};
function getScatterLegend(dataLabels, legendName) {
return {
data: dataLabels,
formatter: function formatter(name) {
return legendName[name] != null ? legendName[name] : name;
}
};
}
function getScatterTooltip(args) {
var tooltipTrigger = args.tooltipTrigger;
return {
trigger: tooltipTrigger,
formatter: function formatter(item) {
if (utilsLite.isArray(item)) {
return item.map(function (i) {
return getTooltipContent(i, args);
}).join('');
} else {
return getTooltipContent(item, args);
}
}
};
}
function getTooltipContent(item, args) {
var labelMap = args.labelMap,
columns = args.columns,
dataType = args.dataType,
digit = args.digit;
var tpl = [];
var color = item.color,
seriesName = item.seriesName,
value = item.data.value;
tpl.push(constants.itemPoint(color) + ' ' + seriesName + '
');
value.forEach(function (d, i) {
var name = labelMap[columns[i]] || columns[i];
var num = isNaN(d) ? d : utils.getFormated(d, dataType[columns[i]], digit);
tpl.push(name + ': ' + num + '
');
});
return tpl.join('');
}
function getScatterXAxis(args) {
var xAxisName = args.xAxisName,
axisVisible = args.axisVisible,
xAxisType = args.xAxisType,
rows = args.rows,
dataLabels = args.dataLabels,
dimension = args.dimension;
var data = [];
dataLabels.forEach(function (dataLabel) {
var itemData = rows[dataLabel];
itemData.forEach(function (item) {
var name = item[dimension];
if (name && !~data.indexOf(name)) data.push(name);
});
});
return [{
type: xAxisType,
show: axisVisible,
name: xAxisName,
data: data
}];
}
function getScatterYAxis(args) {
var min = args.min,
max = args.max,
scale = args.scale,
yAxisName = args.yAxisName,
dataType = args.dataType,
metrics = args.metrics,
digit = args.digit,
axisVisible = args.axisVisible;
return {
type: 'value',
show: axisVisible,
scale: scale,
min: min,
max: max,
axisTick: { show: false },
name: yAxisName,
axisLabel: {
formatter: function formatter(val) {
return utils.getFormated(val, dataType[metrics[0]], digit);
}
}
};
}
function getScatterSeries(args) {
var rows = args.rows,
dataLabels = args.dataLabels,
columns = args.columns,
metrics = args.metrics,
dimension = args.dimension,
label = args.label,
itemStyle = args.itemStyle,
symbol = args.symbol,
symbolSizeMax = args.symbolSizeMax,
symbolSize = args.symbolSize,
symbolRotate = args.symbolRotate,
symbolOffset = args.symbolOffset,
cursor = args.cursor;
var extraMetrics = columns.filter(function (column) {
return !~metrics.indexOf(column) && column !== dimension;
});
var numbers = [];
dataLabels.forEach(function (dataLabel) {
rows[dataLabel].forEach(function (row) {
numbers.push(row[metrics[1]]);
});
});
var maxNum = Math.max.apply(null, numbers);
var series = [];
dataLabels.forEach(function (dataLabel) {
var result = [];
var itemData = rows[dataLabel];
itemData.forEach(function (item) {
var itemResult = { value: [] };
itemResult.value.push(item[dimension], item[metrics[0]], item[metrics[1]]);
extraMetrics.forEach(function (ext) {
itemResult.value.push(item[ext]);
});
itemResult.symbolSize = symbolSize || item[metrics[1]] / maxNum * symbolSizeMax;
result.push(itemResult);
});
series.push({
type: 'scatter',
data: result,
name: dataLabel,
label: label,
itemStyle: itemStyle,
symbol: symbol,
symbolRotate: symbolRotate,
symbolOffset: symbolOffset,
cursor: cursor
});
});
return series;
}
var scatter$1 = function scatter$$1(columns, rows, settings, extra) {
var _settings$dimension = settings.dimension,
dimension = _settings$dimension === undefined ? columns[0] : _settings$dimension,
_settings$metrics = settings.metrics,
metrics = _settings$metrics === undefined ? [columns[1], columns[2]] : _settings$metrics,
_settings$dataType = settings.dataType,
dataType = _settings$dataType === undefined ? {} : _settings$dataType,
_settings$xAxisType = settings.xAxisType,
xAxisType = _settings$xAxisType === undefined ? 'category' : _settings$xAxisType,
xAxisName = settings.xAxisName,
yAxisName = settings.yAxisName,
_settings$digit = settings.digit,
digit = _settings$digit === undefined ? 2 : _settings$digit,
_settings$legendName = settings.legendName,
legendName = _settings$legendName === undefined ? {} : _settings$legendName,
_settings$labelMap = settings.labelMap,
labelMap = _settings$labelMap === undefined ? {} : _settings$labelMap,
_settings$tooltipTrig = settings.tooltipTrigger,
tooltipTrigger = _settings$tooltipTrig === undefined ? 'item' : _settings$tooltipTrig,
_settings$axisVisible = settings.axisVisible,
axisVisible = _settings$axisVisible === undefined ? true : _settings$axisVisible,
_settings$symbolSizeM = settings.symbolSizeMax,
symbolSizeMax = _settings$symbolSizeM === undefined ? 50 : _settings$symbolSizeM,
symbol = settings.symbol,
symbolSize = settings.symbolSize,
symbolRotate = settings.symbolRotate,
symbolOffset = settings.symbolOffset,
cursor = settings.cursor,
min = settings.min,
max = settings.max,
scale = settings.scale,
label = settings.label,
itemStyle = settings.itemStyle;
if (utilsLite.isArray(rows)) {
var lineSettings = _extends({}, settings, {
xAxisName: xAxisName ? [xAxisName] : undefined,
yAxisName: yAxisName ? [yAxisName] : undefined,
scale: scale ? [scale] : undefined,
min: min ? [min] : undefined,
max: max ? [max] : undefined,
dimension: dimension ? [dimension] : undefined
});
var options = line(columns, rows, lineSettings, extra);
if (!options || !options.series) return {};
options.series.forEach(function (item) {
_extends(item, {
type: 'scatter',
symbol: symbol,
symbolSize: symbolSize || 10,
symbolRotate: symbolRotate,
symbolOffset: symbolOffset,
cursor: cursor,
label: label,
itemStyle: itemStyle
});
});
return options;
}
var tooltipVisible = extra.tooltipVisible,
legendVisible = extra.legendVisible;
var dataLabels = Object.keys(rows);
var legend = legendVisible && getScatterLegend(dataLabels, legendName);
var tooltip = tooltipVisible && getScatterTooltip({
tooltipTrigger: tooltipTrigger,
labelMap: labelMap,
columns: columns,
dataType: dataType,
digit: digit
});
var xAxis = getScatterXAxis({
xAxisName: xAxisName,
axisVisible: axisVisible,
xAxisType: xAxisType,
dataLabels: dataLabels,
dimension: dimension,
rows: rows
});
var yAxis = getScatterYAxis({
min: min,
max: max,
scale: scale,
yAxisName: yAxisName,
dataType: dataType,
metrics: metrics,
digit: digit,
axisVisible: axisVisible
});
var series = getScatterSeries({
rows: rows,
dataLabels: dataLabels,
columns: columns,
metrics: metrics,
dimension: dimension,
label: label,
itemStyle: itemStyle,
symbol: symbol,
symbolSizeMax: symbolSizeMax,
symbolSize: symbolSize,
symbolRotate: symbolRotate,
symbolOffset: symbolOffset,
cursor: cursor
});
return { legend: legend, tooltip: tooltip, xAxis: xAxis, yAxis: yAxis, series: series };
};
var index = _extends({}, Core, {
name: 'VeScatter',
data: function data() {
this.chartHandler = scatter$1;
return {};
}
});
module.exports = index;