'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 echarts = _interopDefault(require('echarts/lib/echarts')); require('echarts/lib/chart/heatmap'); require('echarts/lib/component/visualMap'); require('echarts/extension/bmap/bmap'); require('echarts/lib/chart/map'); 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; }; var toArray = function (arr) { return Array.isArray(arr) ? arr : Array.from(arr); }; function getAxisList(rows, label) { var result = []; rows.forEach(function (row) { if (!~result.indexOf(row[label])) result.push(row[label]); }); return result; } function getData(args) { var rows = args.rows, innerXAxisList = args.innerXAxisList, innerYAxisList = args.innerYAxisList, xDim = args.xDim, yDim = args.yDim, metrics = args.metrics, type = args.type, extraMetrics = args.extraMetrics; var result = null; if (type === 'cartesian') { result = rows.map(function (row) { var xIndex = innerXAxisList.indexOf(row[xDim]); var yIndex = innerYAxisList.indexOf(row[yDim]); var value = metrics ? row[metrics] : 1; var extraData = extraMetrics.map(function (m) { return row[m] || '-'; }); return { value: [xIndex, yIndex, value].concat(extraData) }; }); } else { result = rows.map(function (row) { var value = metrics ? row[metrics] : 1; return { value: [row[xDim], row[yDim], value] }; }); } return result; } function getAxis(list, name) { return { type: 'category', data: list, name: name, nameLocation: 'end', splitArea: { show: true } }; } function getVisualMap(args) { var min = args.innerMin, max = args.innerMax, type = args.type, heatColor = args.heatColor, series = args.series; var result = { min: min, max: max, calculable: true }; var extra = null; if (type === 'map') { extra = { orient: 'vertical', left: 0, bottom: 0, inRange: { color: heatColor || constants.HEAT_MAP_COLOR } }; if (!series[0].data.length) extra.show = false; } else if (type === 'bmap' || type === 'amap') { extra = { show: false, orient: 'vertical', left: 0, bottom: 0, inRange: { color: heatColor || constants.HEAT_BMAP_COLOR } }; } else { extra = { orient: 'horizontal', left: 'center', bottom: 10, dimension: 2, inRange: heatColor && { color: heatColor } }; } return _extends(result, extra); } function getSeries(args) { var chartData = args.chartData; return [{ type: 'heatmap', data: chartData }]; } function getTooltip(args) { var dataType = args.dataType, innerXAxisList = args.innerXAxisList, innerYAxisList = args.innerYAxisList, digit = args.digit, extraMetrics = args.extraMetrics, metrics = args.metrics; return { trigger: 'item', formatter: function formatter(_ref) { var color = _ref.color, _ref$data$value = toArray(_ref.data.value), xDim = _ref$data$value[0], yDim = _ref$data$value[1], value = _ref$data$value[2], extraData = _ref$data$value.slice(3); var tpl = []; tpl.push(innerXAxisList[xDim] + ' ~ ' + innerYAxisList[yDim] + '
'); extraMetrics.forEach(function (m, index) { tpl.push(m + ': ' + extraData[index] + '
'); }); tpl.push(constants.itemPoint(color) + ' ' + metrics + ': ' + utils.getFormated(value, dataType, digit) + '
'); return tpl.join(''); } }; } var heatmap$1 = function heatmap$$1(columns, rows, settings, status) { var _settings$type = settings.type, type = _settings$type === undefined ? 'cartesian' : _settings$type, xAxisList = settings.xAxisList, yAxisList = settings.yAxisList, _settings$dimension = settings.dimension, dimension = _settings$dimension === undefined ? [columns[0], columns[1]] : _settings$dimension, _settings$metrics = settings.metrics, metrics = _settings$metrics === undefined ? columns[2] : _settings$metrics, _settings$dataType = settings.dataType, dataType = _settings$dataType === undefined ? 'normal' : _settings$dataType, min = settings.min, max = settings.max, digit = settings.digit, bmap$$1 = settings.bmap, amap = settings.amap, geo = settings.geo, key = settings.key, _settings$v = settings.v, v = _settings$v === undefined ? '2.0' : _settings$v, position = settings.position, positionJsonLink = settings.positionJsonLink, beforeRegisterMap = settings.beforeRegisterMap, _settings$pointSize = settings.pointSize, pointSize = _settings$pointSize === undefined ? 10 : _settings$pointSize, _settings$blurSize = settings.blurSize, blurSize = _settings$blurSize === undefined ? 5 : _settings$blurSize, heatColor = settings.heatColor, yAxisName = settings.yAxisName, xAxisName = settings.xAxisName, beforeRegisterMapOnce = settings.beforeRegisterMapOnce, _settings$mapURLProfi = settings.mapURLProfix, mapURLProfix = _settings$mapURLProfi === undefined ? 'https://unpkg.com/echarts@3.6.2/map/json/' : _settings$mapURLProfi, _settings$specialArea = settings.specialAreas, specialAreas = _settings$specialArea === undefined ? {} : _settings$specialArea; var tooltipVisible = status.tooltipVisible; var innerXAxisList = xAxisList; var innerYAxisList = yAxisList; var chartData = []; // add extraMetrics prop for data which only display in tooltip var extraMetrics = []; var mainColumn = dimension.concat([metrics]); columns.forEach(function (column) { if (!~mainColumn.indexOf(column)) extraMetrics.push(column); }); if (type === 'cartesian') { if (!innerXAxisList || !innerXAxisList.length) { innerXAxisList = getAxisList(rows, dimension[0]); } if (!innerYAxisList || !innerYAxisList.length) { innerYAxisList = getAxisList(rows, dimension[1]); } chartData = getData({ rows: rows, innerXAxisList: innerXAxisList, innerYAxisList: innerYAxisList, xDim: dimension[0], yDim: dimension[1], metrics: metrics, type: type, extraMetrics: extraMetrics }); } else { chartData = getData({ rows: rows, xDim: dimension[0], yDim: dimension[1], metrics: metrics, type: type, extraMetrics: extraMetrics }); } var metricsList = metrics ? rows.map(function (row) { return row[metrics]; }) : [0, 5]; if (!metricsList.length) metricsList = [0]; var innerMin = min || Math.min.apply(null, metricsList); var innerMax = max || Math.max.apply(null, metricsList); var xAxis = getAxis(innerXAxisList, xAxisName); var yAxis = getAxis(innerYAxisList, yAxisName); var series = getSeries({ chartData: chartData }); var visualMap$$1 = getVisualMap({ innerMin: innerMin, innerMax: innerMax, type: type, heatColor: heatColor, series: series }); var tooltip = tooltipVisible && getTooltip({ dataType: dataType, innerXAxisList: innerXAxisList, innerYAxisList: innerYAxisList, digit: digit, extraMetrics: extraMetrics, metrics: metrics }); var options = { visualMap: visualMap$$1, series: series }; if (type === 'bmap') { _extends(options.series[0], { coordinateSystem: 'bmap', pointSize: pointSize, blurSize: blurSize }); return utils.getBmap(key, v).then(function (_) { return _extends({ bmap: bmap$$1 }, options); }); } else if (type === 'map') { options.series[0].coordinateSystem = 'geo'; return utils.getMapJSON({ position: position, positionJsonLink: positionJsonLink, beforeRegisterMapOnce: beforeRegisterMapOnce, mapURLProfix: mapURLProfix }).then(function (json) { var geoAttr = _extends({ map: position }, geo); if (beforeRegisterMap) json = beforeRegisterMap(json); echarts.registerMap(position, json, specialAreas); return _extends({ geo: geoAttr }, options); }); } else if (type === 'amap') { _extends(options.series[0], { coordinateSystem: 'amap', pointSize: pointSize, blurSize: blurSize }); return utils.getAmap(key, v).then(function (_) { return _extends({ amap: amap }, options); }); } else { return _extends({ xAxis: xAxis, yAxis: yAxis, tooltip: tooltip }, options); } }; var index = _extends({}, Core, { name: 'VeHeatmap', data: function data() { this.chartHandler = heatmap$1; return {}; } }); module.exports = index;