UNPKG

cione-comp-lib

Version:

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

197 lines (196 loc) 7.49 kB
import { __extends } from "../../../../../tslib/tslib.es6.mjs"; import { bind, clone, each as each$1 } from "../../../../../zrender/lib/core/util.mjs"; import BrushController from "../../helper/BrushController.mjs"; import BrushTargetManager from "../../helper/BrushTargetManager.mjs"; import { push, pop, count } from "../../dataZoom/history.mjs"; import sliderMove from "../../helper/sliderMove.mjs"; import { ToolboxFeature } from "../featureManager.mjs"; import { parseFinder, makeInternalComponentId } from "../../../util/model.mjs"; import { registerInternalOptionCreator } from "../../../model/internalComponentCreator.mjs"; var each = each$1; var DATA_ZOOM_ID_BASE = makeInternalComponentId("toolbox-dataZoom_"); var DataZoomFeature = function(_super) { __extends(DataZoomFeature2, _super); function DataZoomFeature2() { return _super !== null && _super.apply(this, arguments) || this; } DataZoomFeature2.prototype.render = function(featureModel, ecModel, api, payload) { if (!this._brushController) { this._brushController = new BrushController(api.getZr()); this._brushController.on("brush", bind(this._onBrush, this)).mount(); } updateZoomBtnStatus(featureModel, ecModel, this, payload, api); updateBackBtnStatus(featureModel, ecModel); }; DataZoomFeature2.prototype.onclick = function(ecModel, api, type) { handlers[type].call(this); }; DataZoomFeature2.prototype.remove = function(ecModel, api) { this._brushController && this._brushController.unmount(); }; DataZoomFeature2.prototype.dispose = function(ecModel, api) { this._brushController && this._brushController.dispose(); }; DataZoomFeature2.prototype._onBrush = function(eventParam) { var areas = eventParam.areas; if (!eventParam.isEnd || !areas.length) { return; } var snapshot = {}; var ecModel = this.ecModel; this._brushController.updateCovers([]); var brushTargetManager = new BrushTargetManager(makeAxisFinder(this.model), ecModel, { include: ["grid"] }); brushTargetManager.matchOutputRanges(areas, ecModel, function(area, coordRange, coordSys) { if (coordSys.type !== "cartesian2d") { return; } var brushType = area.brushType; if (brushType === "rect") { setBatch("x", coordSys, coordRange[0]); setBatch("y", coordSys, coordRange[1]); } else { setBatch({ lineX: "x", lineY: "y" }[brushType], coordSys, coordRange); } }); push(ecModel, snapshot); this._dispatchZoomAction(snapshot); function setBatch(dimName, coordSys, minMax) { var axis = coordSys.getAxis(dimName); var axisModel = axis.model; var dataZoomModel = findDataZoom(dimName, axisModel, ecModel); var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy(axisModel).getMinMaxSpan(); if (minMaxSpan.minValueSpan != null || minMaxSpan.maxValueSpan != null) { minMax = sliderMove(0, minMax.slice(), axis.scale.getExtent(), 0, minMaxSpan.minValueSpan, minMaxSpan.maxValueSpan); } dataZoomModel && (snapshot[dataZoomModel.id] = { dataZoomId: dataZoomModel.id, startValue: minMax[0], endValue: minMax[1] }); } function findDataZoom(dimName, axisModel, ecModel2) { var found; ecModel2.eachComponent({ mainType: "dataZoom", subType: "select" }, function(dzModel) { var has = dzModel.getAxisModel(dimName, axisModel.componentIndex); has && (found = dzModel); }); return found; } }; DataZoomFeature2.prototype._dispatchZoomAction = function(snapshot) { var batch = []; each(snapshot, function(batchItem, dataZoomId) { batch.push(clone(batchItem)); }); batch.length && this.api.dispatchAction({ type: "dataZoom", from: this.uid, batch }); }; DataZoomFeature2.getDefaultOption = function(ecModel) { var defaultOption = { show: true, filterMode: "filter", icon: { zoom: "M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1", back: "M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26" }, title: ecModel.getLocaleModel().get(["toolbox", "dataZoom", "title"]), brushStyle: { borderWidth: 0, color: "rgba(210,219,238,0.2)" } }; return defaultOption; }; return DataZoomFeature2; }(ToolboxFeature); var handlers = { zoom: function() { var nextActive = !this._isZoomActive; this.api.dispatchAction({ type: "takeGlobalCursor", key: "dataZoomSelect", dataZoomSelectActive: nextActive }); }, back: function() { this._dispatchZoomAction(pop(this.ecModel)); } }; function makeAxisFinder(dzFeatureModel) { var setting = { xAxisIndex: dzFeatureModel.get("xAxisIndex", true), yAxisIndex: dzFeatureModel.get("yAxisIndex", true), xAxisId: dzFeatureModel.get("xAxisId", true), yAxisId: dzFeatureModel.get("yAxisId", true) }; if (setting.xAxisIndex == null && setting.xAxisId == null) { setting.xAxisIndex = "all"; } if (setting.yAxisIndex == null && setting.yAxisId == null) { setting.yAxisIndex = "all"; } return setting; } function updateBackBtnStatus(featureModel, ecModel) { featureModel.setIconStatus("back", count(ecModel) > 1 ? "emphasis" : "normal"); } function updateZoomBtnStatus(featureModel, ecModel, view, payload, api) { var zoomActive = view._isZoomActive; if (payload && payload.type === "takeGlobalCursor") { zoomActive = payload.key === "dataZoomSelect" ? payload.dataZoomSelectActive : false; } view._isZoomActive = zoomActive; featureModel.setIconStatus("zoom", zoomActive ? "emphasis" : "normal"); var brushTargetManager = new BrushTargetManager(makeAxisFinder(featureModel), ecModel, { include: ["grid"] }); var panels = brushTargetManager.makePanelOpts(api, function(targetInfo) { return targetInfo.xAxisDeclared && !targetInfo.yAxisDeclared ? "lineX" : !targetInfo.xAxisDeclared && targetInfo.yAxisDeclared ? "lineY" : "rect"; }); view._brushController.setPanels(panels).enableBrush(zoomActive && panels.length ? { brushType: "auto", brushStyle: featureModel.getModel("brushStyle").getItemStyle() } : false); } registerInternalOptionCreator("dataZoom", function(ecModel) { var toolboxModel = ecModel.getComponent("toolbox", 0); var featureDataZoomPath = ["feature", "dataZoom"]; if (!toolboxModel || toolboxModel.get(featureDataZoomPath) == null) { return; } var dzFeatureModel = toolboxModel.getModel(featureDataZoomPath); var dzOptions = []; var finder = makeAxisFinder(dzFeatureModel); var finderResult = parseFinder(ecModel, finder); each(finderResult.xAxisModels, function(axisModel) { return buildInternalOptions(axisModel, "xAxis", "xAxisIndex"); }); each(finderResult.yAxisModels, function(axisModel) { return buildInternalOptions(axisModel, "yAxis", "yAxisIndex"); }); function buildInternalOptions(axisModel, axisMainType, axisIndexPropName) { var axisIndex = axisModel.componentIndex; var newOpt = { type: "select", $fromToolbox: true, filterMode: dzFeatureModel.get("filterMode", true) || "filter", id: DATA_ZOOM_ID_BASE + axisMainType + axisIndex }; newOpt[axisIndexPropName] = axisIndex; dzOptions.push(newOpt); } return dzOptions; }); var DataZoom = DataZoomFeature; export { DataZoom as default };