'use strict';
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var constants = require('./constants');
var utils = require('./utils');
var utilsLite = require('utils-lite');
require('echarts/lib/chart/bar');
var Core = _interopDefault(require('./core'));
var defineProperty = function (obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
};
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;
};
// default opacity of bar while dim-axis type is 'value'
var VALUE_AXIS_OPACITY = 0.5;
function getBarDimAxis(args) {
var innerRows = args.innerRows,
dimAxisName = args.dimAxisName,
dimension = args.dimension,
axisVisible = args.axisVisible,
dimAxisType = args.dimAxisType,
dims = args.dims;
return dimension.map(function (item) {
return {
type: 'category',
name: dimAxisName,
nameLocation: 'middle',
nameGap: 22,
data: dimAxisType === 'value' ? getValueAxisData(dims) : innerRows.map(function (row) {
return row[item];
}),
axisLabel: {
formatter: function formatter(v) {
return String(v);
}
},
show: axisVisible
};
});
}
function getValueAxisData(dims) {
var max = Math.max.apply(null, dims);
var min = Math.min.apply(null, dims);
var result = [];
for (var i = min; i <= max; i++) {
result.push(i);
}
return result;
}
function getBarMeaAxis(args) {
var meaAxisName = args.meaAxisName,
meaAxisType = args.meaAxisType,
axisVisible = args.axisVisible,
digit = args.digit,
scale = args.scale,
min = args.min,
max = args.max;
var meaAxisBase = {
type: 'value',
axisTick: {
show: false
},
show: axisVisible
};
var meaAxis = [];
var _loop = function _loop(i) {
if (meaAxisType[i]) {
meaAxis[i] = _extends({}, meaAxisBase, {
axisLabel: {
formatter: function formatter(val) {
return utils.getFormated(val, meaAxisType[i], digit);
}
}
});
} else {
meaAxis[i] = _extends({}, meaAxisBase);
}
meaAxis[i].name = meaAxisName[i] || '';
meaAxis[i].scale = scale[i] || false;
meaAxis[i].min = min[i] || null;
meaAxis[i].max = max[i] || null;
};
for (var i = 0; i < 2; i++) {
_loop(i);
}
return meaAxis;
}
function getBarTooltip(args) {
var axisSite = args.axisSite,
isHistogram = args.isHistogram,
meaAxisType = args.meaAxisType,
digit = args.digit,
labelMap = args.labelMap;
var secondAxis = isHistogram ? axisSite.right || [] : axisSite.top || [];
if (labelMap) {
secondAxis = secondAxis.map(function (item) {
return labelMap[item] === undefined ? item : labelMap[item];
});
}
return {
trigger: 'axis',
formatter: function formatter(items) {
var tpl = [];
tpl.push(items[0].name + '
');
items.forEach(function (item) {
var seriesName = item.seriesName;
var type = ~secondAxis.indexOf(seriesName) ? meaAxisType[1] : meaAxisType[0];
tpl.push(constants.itemPoint(item.color));
tpl.push(seriesName + ': ');
tpl.push(utils.getFormated(item.value, type, digit));
tpl.push('
');
});
return tpl.join('');
}
};
}
function getValueData(seriesTemp, dims) {
var max = Math.max.apply(null, dims);
var min = Math.min.apply(null, dims);
var result = [];
for (var i = min; i <= max; i++) {
var index = dims.indexOf(i);
if (~index) {
result.push(seriesTemp[index]);
} else {
result.push(null);
}
}
return result;
}
function getBarSeries(args) {
var innerRows = args.innerRows,
metrics = args.metrics,
stack = args.stack,
axisSite = args.axisSite,
isHistogram = args.isHistogram,
labelMap = args.labelMap,
itemStyle = args.itemStyle,
label = args.label,
_args$showLine = args.showLine,
showLine = _args$showLine === undefined ? [] : _args$showLine,
dimAxisType = args.dimAxisType,
barGap = args.barGap,
opacity = args.opacity,
dims = args.dims;
var series = [];
var seriesTemp = {};
var secondAxis = isHistogram ? axisSite.right || [] : axisSite.top || [];
var secondDimAxisIndex = isHistogram ? 'yAxisIndex' : 'xAxisIndex';
var stackMap = stack && utils.getStackMap(stack);
metrics.forEach(function (item) {
seriesTemp[item] = [];
});
innerRows.forEach(function (row) {
metrics.forEach(function (item) {
seriesTemp[item].push(row[item]);
});
});
series = Object.keys(seriesTemp).map(function (item, index) {
var data = dimAxisType === 'value' ? getValueData(seriesTemp[item], dims) : seriesTemp[item];
var seriesItem = defineProperty({
name: labelMap[item] != null ? labelMap[item] : item,
type: ~showLine.indexOf(item) ? 'line' : 'bar',
data: data
}, secondDimAxisIndex, ~secondAxis.indexOf(item) ? '1' : '0');
if (stack && stackMap[item]) seriesItem.stack = stackMap[item];
if (label) seriesItem.label = label;
if (itemStyle) seriesItem.itemStyle = itemStyle;
var itemOpacity = opacity || utilsLite.get(seriesItem, 'itemStyle.normal.opacity');
if (dimAxisType === 'value') {
seriesItem.barGap = barGap;
seriesItem.barCategoryGap = '1%';
if (itemOpacity == null) itemOpacity = VALUE_AXIS_OPACITY;
}
if (itemOpacity != null) {
utilsLite.set(seriesItem, 'itemStyle.normal.opacity', itemOpacity);
}
return seriesItem;
});
return series.length ? series : false;
}
function getLegend(args) {
var metrics = args.metrics,
labelMap = args.labelMap,
legendName = args.legendName;
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;
}
};
}
function getDims(rows, dimension) {
return rows.map(function (row) {
return row[dimension[0]];
});
}
var histogram = function histogram(columns, rows, settings, status) {
var innerRows = utilsLite.cloneDeep(rows);
var _settings$axisSite2 = settings.axisSite,
axisSite = _settings$axisSite2 === undefined ? {} : _settings$axisSite2,
_settings$dimension2 = settings.dimension,
dimension = _settings$dimension2 === undefined ? [columns[0]] : _settings$dimension2,
_settings$stack2 = settings.stack,
stack = _settings$stack2 === undefined ? {} : _settings$stack2,
_settings$axisVisible2 = settings.axisVisible,
axisVisible = _settings$axisVisible2 === undefined ? true : _settings$axisVisible2,
_settings$digit2 = settings.digit,
digit = _settings$digit2 === undefined ? 2 : _settings$digit2,
_settings$dataOrder2 = settings.dataOrder,
dataOrder = _settings$dataOrder2 === undefined ? false : _settings$dataOrder2,
_settings$scale2 = settings.scale,
scale = _settings$scale2 === undefined ? [false, false] : _settings$scale2,
_settings$min2 = settings.min,
min = _settings$min2 === undefined ? [null, null] : _settings$min2,
_settings$max2 = settings.max,
max = _settings$max2 === undefined ? [null, null] : _settings$max2,
_settings$labelMap2 = settings.labelMap,
labelMap = _settings$labelMap2 === undefined ? {} : _settings$labelMap2,
_settings$legendName2 = settings.legendName,
legendName = _settings$legendName2 === undefined ? {} : _settings$legendName2,
label = settings.label,
itemStyle = settings.itemStyle,
showLine = settings.showLine,
_settings$barGap2 = settings.barGap,
barGap = _settings$barGap2 === undefined ? '-100%' : _settings$barGap2,
opacity = settings.opacity;
if (dataOrder) {
var _label2 = dataOrder.label,
order = dataOrder.order;
if (!_label2 || !order) {
console.warn('Need to provide name and order parameters');
} else {
innerRows.sort(function (a, b) {
if (order === 'desc') {
return a[_label2] - b[_label2];
} else {
return b[_label2] - a[_label2];
}
});
}
}
var tooltipVisible = status.tooltipVisible,
legendVisible = status.legendVisible;
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 meaAxisType = settings.yAxisType || ['normal', 'normal'];
var dimAxisType = settings.xAxisType || 'category';
var meaAxisName = settings.yAxisName || [];
var dimAxisName = settings.xAxisName || '';
var isHistogram = true;
var dims = getDims(innerRows, dimension);
var legend = legendVisible && getLegend({ metrics: metrics, labelMap: labelMap, legendName: legendName });
var xAxis = getBarDimAxis({
innerRows: innerRows,
dimAxisName: dimAxisName,
dimension: dimension,
axisVisible: axisVisible,
dimAxisType: dimAxisType,
dims: dims
});
var yAxis = getBarMeaAxis({
meaAxisName: meaAxisName,
meaAxisType: meaAxisType,
axisVisible: axisVisible,
digit: digit,
scale: scale,
min: min,
max: max
});
var series = getBarSeries({
innerRows: innerRows,
metrics: metrics,
stack: stack,
axisSite: axisSite,
isHistogram: isHistogram,
labelMap: labelMap,
itemStyle: itemStyle,
label: label,
showLine: showLine,
dimAxisType: dimAxisType,
dimension: dimension,
barGap: barGap,
opacity: opacity,
dims: dims
});
var tooltipParams = { axisSite: axisSite, isHistogram: isHistogram, meaAxisType: meaAxisType, digit: digit, labelMap: labelMap };
var tooltip = tooltipVisible && getBarTooltip(tooltipParams);
var options = { legend: legend, yAxis: yAxis, series: series, xAxis: xAxis, tooltip: tooltip };
return options;
};
var index = _extends({}, Core, {
name: 'VeHistogram',
data: function data() {
this.chartHandler = histogram;
return {};
}
});
module.exports = index;