|   | 
| /* | 
| * 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; |