UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

324 lines (323 loc) 11.4 kB
import { __extends } from "../../../../tslib/tslib.es6.mjs"; import { clone, map, each, isObject } from "../../../../zrender/lib/core/util.mjs"; import VisualMapModel from "./VisualMapModel.mjs"; import VisualMapping from "../../visual/VisualMapping.mjs"; import visualDefault from "../../visual/visualDefault.mjs"; import { reformIntervals } from "../../util/number.mjs"; import { inheritDefaultOption } from "../../util/component.mjs"; var PiecewiseModel = function(_super) { __extends(PiecewiseModel2, _super); function PiecewiseModel2() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = PiecewiseModel2.type; _this._pieceList = []; return _this; } PiecewiseModel2.prototype.optionUpdated = function(newOption, isInit) { _super.prototype.optionUpdated.apply(this, arguments); this.resetExtent(); var mode = this._mode = this._determineMode(); this._pieceList = []; resetMethods[this._mode].call(this, this._pieceList); this._resetSelected(newOption, isInit); var categories = this.option.categories; this.resetVisual(function(mappingOption, state) { if (mode === "categories") { mappingOption.mappingMethod = "category"; mappingOption.categories = clone(categories); } else { mappingOption.dataExtent = this.getExtent(); mappingOption.mappingMethod = "piecewise"; mappingOption.pieceList = map(this._pieceList, function(piece) { piece = clone(piece); if (state !== "inRange") { piece.visual = null; } return piece; }); } }); }; PiecewiseModel2.prototype.completeVisualOption = function() { var option = this.option; var visualTypesInPieces = {}; var visualTypes = VisualMapping.listVisualTypes(); var isCategory = this.isCategory(); each(option.pieces, function(piece) { each(visualTypes, function(visualType) { if (piece.hasOwnProperty(visualType)) { visualTypesInPieces[visualType] = 1; } }); }); each(visualTypesInPieces, function(v, visualType) { var exists = false; each(this.stateList, function(state) { exists = exists || has(option, state, visualType) || has(option.target, state, visualType); }, this); !exists && each(this.stateList, function(state) { (option[state] || (option[state] = {}))[visualType] = visualDefault.get(visualType, state === "inRange" ? "active" : "inactive", isCategory); }); }, this); function has(obj, state, visualType) { return obj && obj[state] && obj[state].hasOwnProperty(visualType); } _super.prototype.completeVisualOption.apply(this, arguments); }; PiecewiseModel2.prototype._resetSelected = function(newOption, isInit) { var thisOption = this.option; var pieceList = this._pieceList; var selected = (isInit ? thisOption : newOption).selected || {}; thisOption.selected = selected; each(pieceList, function(piece, index) { var key = this.getSelectedMapKey(piece); if (!selected.hasOwnProperty(key)) { selected[key] = true; } }, this); if (thisOption.selectedMode === "single") { var hasSel_1 = false; each(pieceList, function(piece, index) { var key = this.getSelectedMapKey(piece); if (selected[key]) { hasSel_1 ? selected[key] = false : hasSel_1 = true; } }, this); } }; PiecewiseModel2.prototype.getItemSymbol = function() { return this.get("itemSymbol"); }; PiecewiseModel2.prototype.getSelectedMapKey = function(piece) { return this._mode === "categories" ? piece.value + "" : piece.index + ""; }; PiecewiseModel2.prototype.getPieceList = function() { return this._pieceList; }; PiecewiseModel2.prototype._determineMode = function() { var option = this.option; return option.pieces && option.pieces.length > 0 ? "pieces" : this.option.categories ? "categories" : "splitNumber"; }; PiecewiseModel2.prototype.setSelected = function(selected) { this.option.selected = clone(selected); }; PiecewiseModel2.prototype.getValueState = function(value) { var index = VisualMapping.findPieceIndex(value, this._pieceList); return index != null ? this.option.selected[this.getSelectedMapKey(this._pieceList[index])] ? "inRange" : "outOfRange" : "outOfRange"; }; PiecewiseModel2.prototype.findTargetDataIndices = function(pieceIndex) { var result = []; var pieceList = this._pieceList; this.eachTargetSeries(function(seriesModel) { var dataIndices = []; var data = seriesModel.getData(); data.each(this.getDataDimensionIndex(data), function(value, dataIndex) { var pIdx = VisualMapping.findPieceIndex(value, pieceList); pIdx === pieceIndex && dataIndices.push(dataIndex); }, this); result.push({ seriesId: seriesModel.id, dataIndex: dataIndices }); }, this); return result; }; PiecewiseModel2.prototype.getRepresentValue = function(piece) { var representValue; if (this.isCategory()) { representValue = piece.value; } else { if (piece.value != null) { representValue = piece.value; } else { var pieceInterval = piece.interval || []; representValue = pieceInterval[0] === -Infinity && pieceInterval[1] === Infinity ? 0 : (pieceInterval[0] + pieceInterval[1]) / 2; } } return representValue; }; PiecewiseModel2.prototype.getVisualMeta = function(getColorVisual) { if (this.isCategory()) { return; } var stops = []; var outerColors = ["", ""]; var visualMapModel = this; function setStop(interval, valueState) { var representValue = visualMapModel.getRepresentValue({ interval }); if (!valueState) { valueState = visualMapModel.getValueState(representValue); } var color = getColorVisual(representValue, valueState); if (interval[0] === -Infinity) { outerColors[0] = color; } else if (interval[1] === Infinity) { outerColors[1] = color; } else { stops.push({ value: interval[0], color }, { value: interval[1], color }); } } var pieceList = this._pieceList.slice(); if (!pieceList.length) { pieceList.push({ interval: [-Infinity, Infinity] }); } else { var edge = pieceList[0].interval[0]; edge !== -Infinity && pieceList.unshift({ interval: [-Infinity, edge] }); edge = pieceList[pieceList.length - 1].interval[1]; edge !== Infinity && pieceList.push({ interval: [edge, Infinity] }); } var curr = -Infinity; each(pieceList, function(piece) { var interval = piece.interval; if (interval) { interval[0] > curr && setStop([curr, interval[0]], "outOfRange"); setStop(interval.slice()); curr = interval[1]; } }, this); return { stops, outerColors }; }; PiecewiseModel2.type = "visualMap.piecewise"; PiecewiseModel2.defaultOption = inheritDefaultOption(VisualMapModel.defaultOption, { selected: null, minOpen: false, maxOpen: false, align: "auto", itemWidth: 20, itemHeight: 14, itemSymbol: "roundRect", pieces: null, categories: null, splitNumber: 5, selectedMode: "multiple", itemGap: 10, hoverLink: true }); return PiecewiseModel2; }(VisualMapModel); var resetMethods = { splitNumber: function(outPieceList) { var thisOption = this.option; var precision = Math.min(thisOption.precision, 20); var dataExtent = this.getExtent(); var splitNumber = thisOption.splitNumber; splitNumber = Math.max(parseInt(splitNumber, 10), 1); thisOption.splitNumber = splitNumber; var splitStep = (dataExtent[1] - dataExtent[0]) / splitNumber; while (+splitStep.toFixed(precision) !== splitStep && precision < 5) { precision++; } thisOption.precision = precision; splitStep = +splitStep.toFixed(precision); if (thisOption.minOpen) { outPieceList.push({ interval: [-Infinity, dataExtent[0]], close: [0, 0] }); } for (var index = 0, curr = dataExtent[0]; index < splitNumber; curr += splitStep, index++) { var max = index === splitNumber - 1 ? dataExtent[1] : curr + splitStep; outPieceList.push({ interval: [curr, max], close: [1, 1] }); } if (thisOption.maxOpen) { outPieceList.push({ interval: [dataExtent[1], Infinity], close: [0, 0] }); } reformIntervals(outPieceList); each(outPieceList, function(piece, index2) { piece.index = index2; piece.text = this.formatValueText(piece.interval); }, this); }, categories: function(outPieceList) { var thisOption = this.option; each(thisOption.categories, function(cate) { outPieceList.push({ text: this.formatValueText(cate, true), value: cate }); }, this); normalizeReverse(thisOption, outPieceList); }, pieces: function(outPieceList) { var thisOption = this.option; each(thisOption.pieces, function(pieceListItem, index) { if (!isObject(pieceListItem)) { pieceListItem = { value: pieceListItem }; } var item = { text: "", index }; if (pieceListItem.label != null) { item.text = pieceListItem.label; } if (pieceListItem.hasOwnProperty("value")) { var value = item.value = pieceListItem.value; item.interval = [value, value]; item.close = [1, 1]; } else { var interval = item.interval = []; var close_1 = item.close = [0, 0]; var closeList = [1, 0, 1]; var infinityList = [-Infinity, Infinity]; var useMinMax = []; for (var lg = 0; lg < 2; lg++) { var names = [["gte", "gt", "min"], ["lte", "lt", "max"]][lg]; for (var i = 0; i < 3 && interval[lg] == null; i++) { interval[lg] = pieceListItem[names[i]]; close_1[lg] = closeList[i]; useMinMax[lg] = i === 2; } interval[lg] == null && (interval[lg] = infinityList[lg]); } useMinMax[0] && interval[1] === Infinity && (close_1[0] = 0); useMinMax[1] && interval[0] === -Infinity && (close_1[1] = 0); if (interval[0] === interval[1] && close_1[0] && close_1[1]) { item.value = interval[0]; } } item.visual = VisualMapping.retrieveVisuals(pieceListItem); outPieceList.push(item); }, this); normalizeReverse(thisOption, outPieceList); reformIntervals(outPieceList); each(outPieceList, function(piece) { var close = piece.close; var edgeSymbols = [["<", "\u2264"][close[1]], [">", "\u2265"][close[0]]]; piece.text = piece.text || this.formatValueText(piece.value != null ? piece.value : piece.interval, false, edgeSymbols); }, this); } }; function normalizeReverse(thisOption, pieceList) { var inverse = thisOption.inverse; if (thisOption.orient === "vertical" ? !inverse : inverse) { pieceList.reverse(); } } var PiecewiseModel$1 = PiecewiseModel; export { PiecewiseModel$1 as default };