cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
119 lines (118 loc) • 4.95 kB
JavaScript
import { getPrecision } from "../../util/number.mjs";
import { isDimensionStacked } from "../../data/helper/dataStackHelper.mjs";
import { curry, isArray, clone, indexOf } from "../../../../zrender/lib/core/util.mjs";
import { parseDataValue } from "../../data/helper/dataValueHelper.mjs";
function hasXOrY(item) {
return !(isNaN(parseFloat(item.x)) && isNaN(parseFloat(item.y)));
}
function hasXAndY(item) {
return !isNaN(parseFloat(item.x)) && !isNaN(parseFloat(item.y));
}
function markerTypeCalculatorWithExtent(markerType, data, otherDataDim, targetDataDim, otherCoordIndex, targetCoordIndex) {
var coordArr = [];
var stacked = isDimensionStacked(
data,
targetDataDim
);
var calcDataDim = stacked ? data.getCalculationInfo("stackResultDimension") : targetDataDim;
var value = numCalculate(data, calcDataDim, markerType);
var dataIndex = data.indicesOfNearest(calcDataDim, value)[0];
coordArr[otherCoordIndex] = data.get(otherDataDim, dataIndex);
coordArr[targetCoordIndex] = data.get(calcDataDim, dataIndex);
var coordArrValue = data.get(targetDataDim, dataIndex);
var precision = getPrecision(data.get(targetDataDim, dataIndex));
precision = Math.min(precision, 20);
if (precision >= 0) {
coordArr[targetCoordIndex] = +coordArr[targetCoordIndex].toFixed(precision);
}
return [coordArr, coordArrValue];
}
var markerTypeCalculator = {
min: curry(markerTypeCalculatorWithExtent, "min"),
max: curry(markerTypeCalculatorWithExtent, "max"),
average: curry(markerTypeCalculatorWithExtent, "average"),
median: curry(markerTypeCalculatorWithExtent, "median")
};
function dataTransform(seriesModel, item) {
if (!item) {
return;
}
var data = seriesModel.getData();
var coordSys = seriesModel.coordinateSystem;
var dims = coordSys.dimensions;
if (!hasXAndY(item) && !isArray(item.coord) && coordSys) {
var axisInfo = getAxisInfo(item, data, coordSys, seriesModel);
item = clone(item);
if (item.type && markerTypeCalculator[item.type] && axisInfo.baseAxis && axisInfo.valueAxis) {
var otherCoordIndex = indexOf(dims, axisInfo.baseAxis.dim);
var targetCoordIndex = indexOf(dims, axisInfo.valueAxis.dim);
var coordInfo = markerTypeCalculator[item.type](data, axisInfo.baseDataDim, axisInfo.valueDataDim, otherCoordIndex, targetCoordIndex);
item.coord = coordInfo[0];
item.value = coordInfo[1];
} else {
item.coord = [item.xAxis != null ? item.xAxis : item.radiusAxis, item.yAxis != null ? item.yAxis : item.angleAxis];
}
}
if (item.coord == null) {
item.coord = [];
} else {
var coord = item.coord;
for (var i = 0; i < 2; i++) {
if (markerTypeCalculator[coord[i]]) {
coord[i] = numCalculate(data, data.mapDimension(dims[i]), coord[i]);
}
}
}
return item;
}
function getAxisInfo(item, data, coordSys, seriesModel) {
var ret = {};
if (item.valueIndex != null || item.valueDim != null) {
ret.valueDataDim = item.valueIndex != null ? data.getDimension(item.valueIndex) : item.valueDim;
ret.valueAxis = coordSys.getAxis(dataDimToCoordDim(seriesModel, ret.valueDataDim));
ret.baseAxis = coordSys.getOtherAxis(ret.valueAxis);
ret.baseDataDim = data.mapDimension(ret.baseAxis.dim);
} else {
ret.baseAxis = seriesModel.getBaseAxis();
ret.valueAxis = coordSys.getOtherAxis(ret.baseAxis);
ret.baseDataDim = data.mapDimension(ret.baseAxis.dim);
ret.valueDataDim = data.mapDimension(ret.valueAxis.dim);
}
return ret;
}
function dataDimToCoordDim(seriesModel, dataDim) {
var dimItem = seriesModel.getData().getDimensionInfo(dataDim);
return dimItem && dimItem.coordDim;
}
function dataFilter(coordSys, item) {
return coordSys && coordSys.containData && item.coord && !hasXOrY(item) ? coordSys.containData(item.coord) : true;
}
function zoneFilter(coordSys, item1, item2) {
return coordSys && coordSys.containZone && item1.coord && item2.coord && !hasXOrY(item1) && !hasXOrY(item2) ? coordSys.containZone(item1.coord, item2.coord) : true;
}
function createMarkerDimValueGetter(inCoordSys, dims) {
return inCoordSys ? function(item, dimName, dataIndex, dimIndex) {
var rawVal = dimIndex < 2 ? item.coord && item.coord[dimIndex] : item.value;
return parseDataValue(rawVal, dims[dimIndex]);
} : function(item, dimName, dataIndex, dimIndex) {
return parseDataValue(item.value, dims[dimIndex]);
};
}
function numCalculate(data, valueDataDim, type) {
if (type === "average") {
var sum_1 = 0;
var count_1 = 0;
data.each(valueDataDim, function(val, idx) {
if (!isNaN(val)) {
sum_1 += val;
count_1++;
}
});
return sum_1 / count_1;
} else if (type === "median") {
return data.getMedian(valueDataDim);
} else {
return data.getDataExtent(valueDataDim)[type === "max" ? 1 : 0];
}
}
export { createMarkerDimValueGetter, dataFilter, dataTransform, getAxisInfo, numCalculate, zoneFilter };