|   | 
| /* | 
| * 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 { each, createHashMap, assert, map } from 'zrender/lib/core/util.js'; | 
| import { VISUAL_DIMENSIONS } from '../../util/types.js'; | 
| var DimensionUserOuput = /** @class */function () { | 
|   function DimensionUserOuput(encode, dimRequest) { | 
|     this._encode = encode; | 
|     this._schema = dimRequest; | 
|   } | 
|   DimensionUserOuput.prototype.get = function () { | 
|     return { | 
|       // Do not generate full dimension name until fist used. | 
|       fullDimensions: this._getFullDimensionNames(), | 
|       encode: this._encode | 
|     }; | 
|   }; | 
|   /** | 
|    * Get all data store dimension names. | 
|    * Theoretically a series data store is defined both by series and used dataset (if any). | 
|    * If some dimensions are omitted for performance reason in `this.dimensions`, | 
|    * the dimension name may not be auto-generated if user does not specify a dimension name. | 
|    * In this case, the dimension name is `null`/`undefined`. | 
|    */ | 
|   DimensionUserOuput.prototype._getFullDimensionNames = function () { | 
|     if (!this._cachedDimNames) { | 
|       this._cachedDimNames = this._schema ? this._schema.makeOutputDimensionNames() : []; | 
|     } | 
|     return this._cachedDimNames; | 
|   }; | 
|   return DimensionUserOuput; | 
| }(); | 
| ; | 
| export function summarizeDimensions(data, schema) { | 
|   var summary = {}; | 
|   var encode = summary.encode = {}; | 
|   var notExtraCoordDimMap = createHashMap(); | 
|   var defaultedLabel = []; | 
|   var defaultedTooltip = []; | 
|   var userOutputEncode = {}; | 
|   each(data.dimensions, function (dimName) { | 
|     var dimItem = data.getDimensionInfo(dimName); | 
|     var coordDim = dimItem.coordDim; | 
|     if (coordDim) { | 
|       if (process.env.NODE_ENV !== 'production') { | 
|         assert(VISUAL_DIMENSIONS.get(coordDim) == null); | 
|       } | 
|       var coordDimIndex = dimItem.coordDimIndex; | 
|       getOrCreateEncodeArr(encode, coordDim)[coordDimIndex] = dimName; | 
|       if (!dimItem.isExtraCoord) { | 
|         notExtraCoordDimMap.set(coordDim, 1); | 
|         // Use the last coord dim (and label friendly) as default label, | 
|         // because when dataset is used, it is hard to guess which dimension | 
|         // can be value dimension. If both show x, y on label is not look good, | 
|         // and conventionally y axis is focused more. | 
|         if (mayLabelDimType(dimItem.type)) { | 
|           defaultedLabel[0] = dimName; | 
|         } | 
|         // User output encode do not contain generated coords. | 
|         // And it only has index. User can use index to retrieve value from the raw item array. | 
|         getOrCreateEncodeArr(userOutputEncode, coordDim)[coordDimIndex] = data.getDimensionIndex(dimItem.name); | 
|       } | 
|       if (dimItem.defaultTooltip) { | 
|         defaultedTooltip.push(dimName); | 
|       } | 
|     } | 
|     VISUAL_DIMENSIONS.each(function (v, otherDim) { | 
|       var encodeArr = getOrCreateEncodeArr(encode, otherDim); | 
|       var dimIndex = dimItem.otherDims[otherDim]; | 
|       if (dimIndex != null && dimIndex !== false) { | 
|         encodeArr[dimIndex] = dimItem.name; | 
|       } | 
|     }); | 
|   }); | 
|   var dataDimsOnCoord = []; | 
|   var encodeFirstDimNotExtra = {}; | 
|   notExtraCoordDimMap.each(function (v, coordDim) { | 
|     var dimArr = encode[coordDim]; | 
|     encodeFirstDimNotExtra[coordDim] = dimArr[0]; | 
|     // Not necessary to remove duplicate, because a data | 
|     // dim canot on more than one coordDim. | 
|     dataDimsOnCoord = dataDimsOnCoord.concat(dimArr); | 
|   }); | 
|   summary.dataDimsOnCoord = dataDimsOnCoord; | 
|   summary.dataDimIndicesOnCoord = map(dataDimsOnCoord, function (dimName) { | 
|     return data.getDimensionInfo(dimName).storeDimIndex; | 
|   }); | 
|   summary.encodeFirstDimNotExtra = encodeFirstDimNotExtra; | 
|   var encodeLabel = encode.label; | 
|   // FIXME `encode.label` is not recommended, because formatter cannot be set | 
|   // in this way. Use label.formatter instead. Maybe remove this approach someday. | 
|   if (encodeLabel && encodeLabel.length) { | 
|     defaultedLabel = encodeLabel.slice(); | 
|   } | 
|   var encodeTooltip = encode.tooltip; | 
|   if (encodeTooltip && encodeTooltip.length) { | 
|     defaultedTooltip = encodeTooltip.slice(); | 
|   } else if (!defaultedTooltip.length) { | 
|     defaultedTooltip = defaultedLabel.slice(); | 
|   } | 
|   encode.defaultedLabel = defaultedLabel; | 
|   encode.defaultedTooltip = defaultedTooltip; | 
|   summary.userOutput = new DimensionUserOuput(userOutputEncode, schema); | 
|   return summary; | 
| } | 
| function getOrCreateEncodeArr(encode, dim) { | 
|   if (!encode.hasOwnProperty(dim)) { | 
|     encode[dim] = []; | 
|   } | 
|   return encode[dim]; | 
| } | 
| // FIXME:TS should be type `AxisType` | 
| export function getDimensionTypeByAxis(axisType) { | 
|   return axisType === 'category' ? 'ordinal' : axisType === 'time' ? 'time' : 'float'; | 
| } | 
| function mayLabelDimType(dimType) { | 
|   // In most cases, ordinal and time do not suitable for label. | 
|   // Ordinal info can be displayed on axis. Time is too long. | 
|   return !(dimType === 'ordinal' || dimType === 'time'); | 
| } | 
| // function findTheLastDimMayLabel(data) { | 
| //     // Get last value dim | 
| //     let dimensions = data.dimensions.slice(); | 
| //     let valueType; | 
| //     let valueDim; | 
| //     while (dimensions.length && ( | 
| //         valueDim = dimensions.pop(), | 
| //         valueType = data.getDimensionInfo(valueDim).type, | 
| //         valueType === 'ordinal' || valueType === 'time' | 
| //     )) {} // jshint ignore:line | 
| //     return valueDim; | 
| // } |