/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import { __extends } from "tslib"; // TODO depends on DataZoom and Brush import * as zrUtil from 'zrender/lib/core/util.js'; import BrushController from '../../helper/BrushController.js'; import BrushTargetManager from '../../helper/BrushTargetManager.js'; import * as history from '../../dataZoom/history.js'; import sliderMove from '../../helper/sliderMove.js'; import { ToolboxFeature } from '../featureManager.js'; import { makeInternalComponentId, parseFinder } from '../../../util/model.js'; import { registerInternalOptionCreator } from '../../../model/internalComponentCreator.js'; var each = zrUtil.each; var DATA_ZOOM_ID_BASE = makeInternalComponentId('toolbox-dataZoom_'); var ICON_TYPES = ['zoom', 'back']; var DataZoomFeature = /** @class */function (_super) { __extends(DataZoomFeature, _super); function DataZoomFeature() { return _super !== null && _super.apply(this, arguments) || this; } DataZoomFeature.prototype.render = function (featureModel, ecModel, api, payload) { if (!this._brushController) { this._brushController = new BrushController(api.getZr()); this._brushController.on('brush', zrUtil.bind(this._onBrush, this)).mount(); } updateZoomBtnStatus(featureModel, ecModel, this, payload, api); updateBackBtnStatus(featureModel, ecModel); }; DataZoomFeature.prototype.onclick = function (ecModel, api, type) { handlers[type].call(this); }; DataZoomFeature.prototype.remove = function (ecModel, api) { this._brushController && this._brushController.unmount(); }; DataZoomFeature.prototype.dispose = function (ecModel, api) { this._brushController && this._brushController.dispose(); }; DataZoomFeature.prototype._onBrush = function (eventParam) { var areas = eventParam.areas; if (!eventParam.isEnd || !areas.length) { return; } var snapshot = {}; var ecModel = this.ecModel; this._brushController.updateCovers([]); // remove cover 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); } }); history.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); // Restrict range. 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, ecModel) { var found; ecModel.eachComponent({ mainType: 'dataZoom', subType: 'select' }, function (dzModel) { var has = dzModel.getAxisModel(dimName, axisModel.componentIndex); has && (found = dzModel); }); return found; } }; ; DataZoomFeature.prototype._dispatchZoomAction = function (snapshot) { var batch = []; // Convert from hash map to array. each(snapshot, function (batchItem, dataZoomId) { batch.push(zrUtil.clone(batchItem)); }); batch.length && this.api.dispatchAction({ type: 'dataZoom', from: this.uid, batch: batch }); }; DataZoomFeature.getDefaultOption = function (ecModel) { var defaultOption = { show: true, filterMode: 'filter', // Icon group 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' }, // `zoom`, `back` title: ecModel.getLocaleModel().get(['toolbox', 'dataZoom', 'title']), brushStyle: { borderWidth: 0, color: 'rgba(210,219,238,0.2)' } }; return defaultOption; }; return DataZoomFeature; }(ToolboxFeature); var handlers = { zoom: function () { var nextActive = !this._isZoomActive; this.api.dispatchAction({ type: 'takeGlobalCursor', key: 'dataZoomSelect', dataZoomSelectActive: nextActive }); }, back: function () { this._dispatchZoomAction(history.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 both `xAxisIndex` `xAxisId` not set, it means 'all'. // If both `yAxisIndex` `yAxisId` not set, it means 'all'. // Some old cases set like this below to close yAxis control but leave xAxis control: // `{ feature: { dataZoom: { yAxisIndex: false } }`. 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', history.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, // Default to be filter filterMode: dzFeatureModel.get('filterMode', true) || 'filter', // Id for merge mapping. id: DATA_ZOOM_ID_BASE + axisMainType + axisIndex }; newOpt[axisIndexPropName] = axisIndex; dzOptions.push(newOpt); } return dzOptions; }); export default DataZoomFeature;