'use strict';
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var echarts = _interopDefault(require('echarts/lib/echarts'));
var constants = require('./constants');
var utils = require('./utils');
require('echarts/lib/chart/map');
var Core = _interopDefault(require('./core'));
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
return typeof obj;
} : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof 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;
};
function getTooltip(dataType, digit, dataStore, metrics, color, labelMap) {
return {
formatter: function formatter(item) {
var tpl = [];
if (!item.name) return '';
tpl.push(item.name + '
');
metrics.forEach(function (label, index) {
var title = labelMap[label] != null ? labelMap[label] : label;
tpl.push(constants.itemPoint(color[index]) + ' ' + title + ' : ');
if (dataStore[item.name]) {
tpl.push(utils.getFormated(dataStore[item.name][label], dataType[label], digit));
} else {
tpl.push('-');
}
tpl.push('
');
});
return tpl.join(' ');
}
};
}
function getSeries(args) {
var position = args.position,
selectData = args.selectData,
dimension = args.dimension,
metrics = args.metrics,
rows = args.rows,
label = args.label,
itemStyle = args.itemStyle,
selectedMode = args.selectedMode,
roam = args.roam,
center = args.center,
aspectScale = args.aspectScale,
boundingCoords = args.boundingCoords,
zoom = args.zoom,
labelMap = args.labelMap,
scaleLimit = args.scaleLimit,
mapGrid = args.mapGrid;
var result = [];
var mapBase = {
type: 'map',
mapType: position
};
metrics.forEach(function (itemName) {
var itemResult = _extends({
name: labelMap[itemName] != null ? labelMap[itemName] : itemName,
data: [],
selectedMode: selectedMode,
roam: roam,
center: center,
aspectScale: aspectScale,
boundingCoords: boundingCoords,
zoom: zoom,
scaleLimit: scaleLimit
}, mapBase);
if (mapGrid) {
Object.keys(mapGrid).forEach(function (key) {
itemResult[key] = mapGrid[key];
});
}
setGeoLabel(itemStyle, itemResult, 'itemStyle');
setGeoLabel(label, itemResult, 'label');
rows.forEach(function (row) {
itemResult.data.push({
name: row[dimension],
value: row[itemName],
selected: selectData
});
});
result.push(itemResult);
});
return result;
}
function setGeoLabel(value, target, label) {
if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {
target[label] = value;
} else if (value) {
target[label] = {
normal: { show: true },
emphasis: { show: true }
};
}
}
function getLegendMap(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;
}
};
}
function registerMap(args, mapOrigin) {
var _once = args._once,
registerSign = args.registerSign,
beforeRegisterMap = args.beforeRegisterMap,
beforeRegisterMapOnce = args.beforeRegisterMapOnce,
registerSignOnce = args.registerSignOnce,
position = args.position,
specialAreas = args.specialAreas;
if (!_once[registerSign]) {
if (beforeRegisterMap) mapOrigin = beforeRegisterMap(mapOrigin);
if (beforeRegisterMapOnce && !_once[registerSignOnce]) {
_once[registerSignOnce] = true;
mapOrigin = beforeRegisterMapOnce(mapOrigin);
}
_once[registerSign] = true;
echarts.registerMap(position, mapOrigin, specialAreas);
}
}
var map$1 = function map$$1(columns, rows, settings, extra) {
var _settings$position = settings.position,
position = _settings$position === undefined ? 'china' : _settings$position,
_settings$selectData = settings.selectData,
selectData = _settings$selectData === undefined ? false : _settings$selectData,
selectedMode = settings.selectedMode,
_settings$label = settings.label,
label = _settings$label === undefined ? true : _settings$label,
_settings$dataType = settings.dataType,
dataType = _settings$dataType === undefined ? {} : _settings$dataType,
_settings$digit = settings.digit,
digit = _settings$digit === undefined ? 2 : _settings$digit,
_settings$dimension = settings.dimension,
dimension = _settings$dimension === undefined ? columns[0] : _settings$dimension,
roam = settings.roam,
center = settings.center,
aspectScale = settings.aspectScale,
boundingCoords = settings.boundingCoords,
zoom = settings.zoom,
scaleLimit = settings.scaleLimit,
_settings$legendName = settings.legendName,
legendName = _settings$legendName === undefined ? {} : _settings$legendName,
_settings$labelMap = settings.labelMap,
labelMap = _settings$labelMap === undefined ? {} : _settings$labelMap,
mapGrid = settings.mapGrid,
itemStyle = settings.itemStyle,
positionJsonLink = settings.positionJsonLink,
beforeRegisterMap = settings.beforeRegisterMap,
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 mapOrigin = settings.mapOrigin;
var metrics = columns.slice();
if (settings.metrics) {
metrics = settings.metrics;
} else {
metrics.splice(columns.indexOf(dimension), 1);
}
var tooltipVisible = extra.tooltipVisible,
legendVisible = extra.legendVisible,
color = extra.color,
_once = extra._once;
var dataStore = {};
rows.forEach(function (row) {
dataStore[row[dimension]] = row;
});
var tooltip = tooltipVisible && getTooltip(dataType, digit, dataStore, metrics, color, labelMap);
var legend = legendVisible && getLegendMap({ metrics: metrics, legendName: legendName, labelMap: labelMap });
var seriesParams = {
position: position,
selectData: selectData,
label: label,
itemStyle: itemStyle,
dimension: dimension,
metrics: metrics,
rows: rows,
selectedMode: selectedMode,
roam: roam,
center: center,
aspectScale: aspectScale,
boundingCoords: boundingCoords,
zoom: zoom,
labelMap: labelMap,
scaleLimit: scaleLimit,
mapGrid: mapGrid
};
var series = getSeries(seriesParams);
var registerOptions = {
_once: _once,
beforeRegisterMap: beforeRegisterMap,
beforeRegisterMapOnce: beforeRegisterMapOnce,
registerSign: 'MAP_REGISTER_' + position,
registerSignOnce: 'ONCE_MAP_REGISTER_' + position,
position: position,
specialAreas: specialAreas
};
if (mapOrigin) {
registerMap(registerOptions, mapOrigin);
return { series: series, tooltip: tooltip, legend: legend };
} else {
return utils.getMapJSON({
position: position,
positionJsonLink: positionJsonLink,
beforeRegisterMapOnce: beforeRegisterMapOnce,
mapURLProfix: mapURLProfix
}).then(function (json) {
registerMap(registerOptions, json);
return { series: series, tooltip: tooltip, legend: legend };
});
}
};
var index = _extends({}, Core, {
name: 'VeMap',
data: function data() {
this.chartHandler = map$1;
return {};
}
});
module.exports = index;