UNPKG

cione-comp-lib

Version:

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

371 lines (370 loc) 13.2 kB
import { __extends } from "../../../tslib/tslib.es6.mjs"; import { merge, isTypedArray, createHashMap, keys, isObject, mixin, each, curry, concatArray } from "../../../zrender/lib/core/util.mjs"; import env from "../../../zrender/lib/core/env.mjs"; import { defaultEmphasis, isNameSpecified, makeInner } from "../util/model.mjs"; import ComponentModel from "./Component.mjs"; import { PaletteMixin } from "./mixin/palette.mjs"; import { DataFormatMixin } from "./mixin/dataFormat.mjs"; import { fetchLayoutMode, getLayoutParams, mergeLayoutParam } from "../util/layout.mjs"; import { createTask } from "../core/task.mjs"; import { mountExtend } from "../util/clazz.mjs"; import { SourceManager } from "../data/helper/sourceManager.mjs"; import { defaultSeriesFormatTooltip } from "../component/tooltip/seriesFormatTooltip.mjs"; var inner = makeInner(); function getSelectionKey(data, dataIndex) { return data.getName(dataIndex) || data.getId(dataIndex); } var SERIES_UNIVERSAL_TRANSITION_PROP = "__universalTransitionEnabled"; var SeriesModel = function(_super) { __extends(SeriesModel2, _super); function SeriesModel2() { var _this = _super !== null && _super.apply(this, arguments) || this; _this._selectedDataIndicesMap = {}; return _this; } SeriesModel2.prototype.init = function(option, parentModel, ecModel) { this.seriesIndex = this.componentIndex; this.dataTask = createTask({ count: dataTaskCount, reset: dataTaskReset }); this.dataTask.context = { model: this }; this.mergeDefaultAndTheme(option, ecModel); var sourceManager = inner(this).sourceManager = new SourceManager(this); sourceManager.prepareSource(); var data = this.getInitialData(option, ecModel); wrapData(data, this); this.dataTask.context.data = data; inner(this).dataBeforeProcessed = data; autoSeriesName(this); this._initSelectedMapFromData(data); }; SeriesModel2.prototype.mergeDefaultAndTheme = function(option, ecModel) { var layoutMode = fetchLayoutMode(this); var inputPositionParams = layoutMode ? getLayoutParams(option) : {}; var themeSubType = this.subType; if (ComponentModel.hasClass(themeSubType)) { themeSubType += "Series"; } merge(option, ecModel.getTheme().get(this.subType)); merge(option, this.getDefaultOption()); defaultEmphasis(option, "label", ["show"]); this.fillDataTextStyle(option.data); if (layoutMode) { mergeLayoutParam(option, inputPositionParams, layoutMode); } }; SeriesModel2.prototype.mergeOption = function(newSeriesOption, ecModel) { newSeriesOption = merge(this.option, newSeriesOption, true); this.fillDataTextStyle(newSeriesOption.data); var layoutMode = fetchLayoutMode(this); if (layoutMode) { mergeLayoutParam(this.option, newSeriesOption, layoutMode); } var sourceManager = inner(this).sourceManager; sourceManager.dirty(); sourceManager.prepareSource(); var data = this.getInitialData(newSeriesOption, ecModel); wrapData(data, this); this.dataTask.dirty(); this.dataTask.context.data = data; inner(this).dataBeforeProcessed = data; autoSeriesName(this); this._initSelectedMapFromData(data); }; SeriesModel2.prototype.fillDataTextStyle = function(data) { if (data && !isTypedArray(data)) { var props = ["show"]; for (var i = 0; i < data.length; i++) { if (data[i] && data[i].label) { defaultEmphasis(data[i], "label", props); } } } }; SeriesModel2.prototype.getInitialData = function(option, ecModel) { return; }; SeriesModel2.prototype.appendData = function(params) { var data = this.getRawData(); data.appendData(params.data); }; SeriesModel2.prototype.getData = function(dataType) { var task = getCurrentTask(this); if (task) { var data = task.context.data; return dataType == null ? data : data.getLinkedData(dataType); } else { return inner(this).data; } }; SeriesModel2.prototype.getAllData = function() { var mainData = this.getData(); return mainData && mainData.getLinkedDataAll ? mainData.getLinkedDataAll() : [{ data: mainData }]; }; SeriesModel2.prototype.setData = function(data) { var task = getCurrentTask(this); if (task) { var context = task.context; context.outputData = data; if (task !== this.dataTask) { context.data = data; } } inner(this).data = data; }; SeriesModel2.prototype.getEncode = function() { var encode = this.get("encode", true); if (encode) { return createHashMap(encode); } }; SeriesModel2.prototype.getSourceManager = function() { return inner(this).sourceManager; }; SeriesModel2.prototype.getSource = function() { return this.getSourceManager().getSource(); }; SeriesModel2.prototype.getRawData = function() { return inner(this).dataBeforeProcessed; }; SeriesModel2.prototype.getColorBy = function() { var colorBy = this.get("colorBy"); return colorBy || "series"; }; SeriesModel2.prototype.isColorBySeries = function() { return this.getColorBy() === "series"; }; SeriesModel2.prototype.getBaseAxis = function() { var coordSys = this.coordinateSystem; return coordSys && coordSys.getBaseAxis && coordSys.getBaseAxis(); }; SeriesModel2.prototype.formatTooltip = function(dataIndex, multipleSeries, dataType) { return defaultSeriesFormatTooltip({ series: this, dataIndex, multipleSeries }); }; SeriesModel2.prototype.isAnimationEnabled = function() { var ecModel = this.ecModel; if (env.node && !(ecModel && ecModel.ssr)) { return false; } var animationEnabled = this.getShallow("animation"); if (animationEnabled) { if (this.getData().count() > this.getShallow("animationThreshold")) { animationEnabled = false; } } return !!animationEnabled; }; SeriesModel2.prototype.restoreData = function() { this.dataTask.dirty(); }; SeriesModel2.prototype.getColorFromPalette = function(name, scope, requestColorNum) { var ecModel = this.ecModel; var color = PaletteMixin.prototype.getColorFromPalette.call(this, name, scope, requestColorNum); if (!color) { color = ecModel.getColorFromPalette(name, scope, requestColorNum); } return color; }; SeriesModel2.prototype.coordDimToDataDim = function(coordDim) { return this.getRawData().mapDimensionsAll(coordDim); }; SeriesModel2.prototype.getProgressive = function() { return this.get("progressive"); }; SeriesModel2.prototype.getProgressiveThreshold = function() { return this.get("progressiveThreshold"); }; SeriesModel2.prototype.select = function(innerDataIndices, dataType) { this._innerSelect(this.getData(dataType), innerDataIndices); }; SeriesModel2.prototype.unselect = function(innerDataIndices, dataType) { var selectedMap = this.option.selectedMap; if (!selectedMap) { return; } var selectedMode = this.option.selectedMode; var data = this.getData(dataType); if (selectedMode === "series" || selectedMap === "all") { this.option.selectedMap = {}; this._selectedDataIndicesMap = {}; return; } for (var i = 0; i < innerDataIndices.length; i++) { var dataIndex = innerDataIndices[i]; var nameOrId = getSelectionKey(data, dataIndex); selectedMap[nameOrId] = false; this._selectedDataIndicesMap[nameOrId] = -1; } }; SeriesModel2.prototype.toggleSelect = function(innerDataIndices, dataType) { var tmpArr = []; for (var i = 0; i < innerDataIndices.length; i++) { tmpArr[0] = innerDataIndices[i]; this.isSelected(innerDataIndices[i], dataType) ? this.unselect(tmpArr, dataType) : this.select(tmpArr, dataType); } }; SeriesModel2.prototype.getSelectedDataIndices = function() { if (this.option.selectedMap === "all") { return [].slice.call(this.getData().getIndices()); } var selectedDataIndicesMap = this._selectedDataIndicesMap; var nameOrIds = keys(selectedDataIndicesMap); var dataIndices = []; for (var i = 0; i < nameOrIds.length; i++) { var dataIndex = selectedDataIndicesMap[nameOrIds[i]]; if (dataIndex >= 0) { dataIndices.push(dataIndex); } } return dataIndices; }; SeriesModel2.prototype.isSelected = function(dataIndex, dataType) { var selectedMap = this.option.selectedMap; if (!selectedMap) { return false; } var data = this.getData(dataType); return (selectedMap === "all" || selectedMap[getSelectionKey(data, dataIndex)]) && !data.getItemModel(dataIndex).get(["select", "disabled"]); }; SeriesModel2.prototype.isUniversalTransitionEnabled = function() { if (this[SERIES_UNIVERSAL_TRANSITION_PROP]) { return true; } var universalTransitionOpt = this.option.universalTransition; if (!universalTransitionOpt) { return false; } if (universalTransitionOpt === true) { return true; } return universalTransitionOpt && universalTransitionOpt.enabled; }; SeriesModel2.prototype._innerSelect = function(data, innerDataIndices) { var _a, _b; var option = this.option; var selectedMode = option.selectedMode; var len = innerDataIndices.length; if (!selectedMode || !len) { return; } if (selectedMode === "series") { option.selectedMap = "all"; } else if (selectedMode === "multiple") { if (!isObject(option.selectedMap)) { option.selectedMap = {}; } var selectedMap = option.selectedMap; for (var i = 0; i < len; i++) { var dataIndex = innerDataIndices[i]; var nameOrId = getSelectionKey(data, dataIndex); selectedMap[nameOrId] = true; this._selectedDataIndicesMap[nameOrId] = data.getRawIndex(dataIndex); } } else if (selectedMode === "single" || selectedMode === true) { var lastDataIndex = innerDataIndices[len - 1]; var nameOrId = getSelectionKey(data, lastDataIndex); option.selectedMap = (_a = {}, _a[nameOrId] = true, _a); this._selectedDataIndicesMap = (_b = {}, _b[nameOrId] = data.getRawIndex(lastDataIndex), _b); } }; SeriesModel2.prototype._initSelectedMapFromData = function(data) { if (this.option.selectedMap) { return; } var dataIndices = []; if (data.hasItemOption) { data.each(function(idx) { var rawItem = data.getRawDataItem(idx); if (rawItem && rawItem.selected) { dataIndices.push(idx); } }); } if (dataIndices.length > 0) { this._innerSelect(data, dataIndices); } }; SeriesModel2.registerClass = function(clz) { return ComponentModel.registerClass(clz); }; SeriesModel2.protoInitialize = function() { var proto = SeriesModel2.prototype; proto.type = "series.__base__"; proto.seriesIndex = 0; proto.ignoreStyleOnData = false; proto.hasSymbolVisual = false; proto.defaultSymbol = "circle"; proto.visualStyleAccessPath = "itemStyle"; proto.visualDrawType = "fill"; }(); return SeriesModel2; }(ComponentModel); mixin(SeriesModel, DataFormatMixin); mixin(SeriesModel, PaletteMixin); mountExtend(SeriesModel, ComponentModel); function autoSeriesName(seriesModel) { var name = seriesModel.name; if (!isNameSpecified(seriesModel)) { seriesModel.name = getSeriesAutoName(seriesModel) || name; } } function getSeriesAutoName(seriesModel) { var data = seriesModel.getRawData(); var dataDims = data.mapDimensionsAll("seriesName"); var nameArr = []; each(dataDims, function(dataDim) { var dimInfo = data.getDimensionInfo(dataDim); dimInfo.displayName && nameArr.push(dimInfo.displayName); }); return nameArr.join(" "); } function dataTaskCount(context) { return context.model.getRawData().count(); } function dataTaskReset(context) { var seriesModel = context.model; seriesModel.setData(seriesModel.getRawData().cloneShallow()); return dataTaskProgress; } function dataTaskProgress(param, context) { if (context.outputData && param.end > context.outputData.count()) { context.model.getRawData().cloneShallow(context.outputData); } } function wrapData(data, seriesModel) { each(concatArray(data.CHANGABLE_METHODS, data.DOWNSAMPLE_METHODS), function(methodName) { data.wrapMethod(methodName, curry(onDataChange, seriesModel)); }); } function onDataChange(seriesModel, newList) { var task = getCurrentTask(seriesModel); if (task) { task.setOutputEnd((newList || this).count()); } return newList; } function getCurrentTask(seriesModel) { var scheduler = (seriesModel.ecModel || {}).scheduler; var pipeline = scheduler && scheduler.getPipeline(seriesModel.uid); if (pipeline) { var task = pipeline.currentTask; if (task) { var agentStubMap = task.agentStubMap; if (agentStubMap) { task = agentStubMap.get(seriesModel.uid); } } return task; } } var SeriesModel$1 = SeriesModel; export { SERIES_UNIVERSAL_TRANSITION_PROP, SeriesModel$1 as default };