* @see {module:echarts/test/ut/spec/data/completeDimensions} * * This method builds the relationship between: * + "what the coord sys or series requires (see `sysDims`)", * + "what the user defines (in `encode` and `dimensions`, see `opt.dimsDef` and `opt.encodeDef`)" * + "what the data source
(sysDims, source, opt)
| 32094 | * @return {Array.<module:data/DataDimensionInfo>} |
| 32095 | */ |
| 32096 | function completeDimensions(sysDims, source, opt) { |
| 32097 | if (!Source.isInstance(source)) { |
| 32098 | source = Source.seriesDataToSource(source); |
| 32099 | } |
| 32100 | |
| 32101 | opt = opt || {}; |
| 32102 | sysDims = (sysDims || []).slice(); |
| 32103 | var dimsDef = (opt.dimsDef || []).slice(); |
| 32104 | var dataDimNameMap = createHashMap(); |
| 32105 | var coordDimNameMap = createHashMap(); |
| 32106 | // var valueCandidate; |
| 32107 | var result = []; |
| 32108 | |
| 32109 | var dimCount = getDimCount(source, sysDims, dimsDef, opt.dimCount); |
| 32110 | |
| 32111 | // Apply user defined dims (`name` and `type`) and init result. |
| 32112 | for (var i = 0; i < dimCount; i++) { |
| 32113 | var dimDefItem = dimsDef[i] = extend( |
| 32114 | {}, isObject$1(dimsDef[i]) ? dimsDef[i] : {name: dimsDef[i]} |
| 32115 | ); |
| 32116 | var userDimName = dimDefItem.name; |
| 32117 | var resultItem = result[i] = new DataDimensionInfo(); |
| 32118 | // Name will be applied later for avoiding duplication. |
| 32119 | if (userDimName != null && dataDimNameMap.get(userDimName) == null) { |
| 32120 | // Only if `series.dimensions` is defined in option |
| 32121 | // displayName, will be set, and dimension will be diplayed vertically in |
| 32122 | // tooltip by default. |
| 32123 | resultItem.name = resultItem.displayName = userDimName; |
| 32124 | dataDimNameMap.set(userDimName, i); |
| 32125 | } |
| 32126 | dimDefItem.type != null && (resultItem.type = dimDefItem.type); |
| 32127 | dimDefItem.displayName != null && (resultItem.displayName = dimDefItem.displayName); |
| 32128 | } |
| 32129 | |
| 32130 | var encodeDef = opt.encodeDef; |
| 32131 | if (!encodeDef && opt.encodeDefaulter) { |
| 32132 | encodeDef = opt.encodeDefaulter(source, dimCount); |
| 32133 | } |
| 32134 | encodeDef = createHashMap(encodeDef); |
| 32135 | |
| 32136 | // Set `coordDim` and `coordDimIndex` by `encodeDef` and normalize `encodeDef`. |
| 32137 | encodeDef.each(function (dataDims, coordDim) { |
| 32138 | dataDims = normalizeToArray(dataDims).slice(); |
| 32139 | |
| 32140 | // Note: It is allowed that `dataDims.length` is `0`, e.g., options is |
| 32141 | // `{encode: {x: -1, y: 1}}`. Should not filter anything in |
| 32142 | // this case. |
| 32143 | if (dataDims.length === 1 && !isString(dataDims[0]) && dataDims[0] < 0) { |
| 32144 | encodeDef.set(coordDim, false); |
| 32145 | return; |
| 32146 | } |
| 32147 | |
| 32148 | var validDataDims = encodeDef.set(coordDim, []); |
| 32149 | each$1(dataDims, function (resultDimIdx, idx) { |
| 32150 | // The input resultDimIdx can be dim name or index. |
| 32151 | isString(resultDimIdx) && (resultDimIdx = dataDimNameMap.get(resultDimIdx)); |
| 32152 | if (resultDimIdx != null && resultDimIdx < dimCount) { |
| 32153 | validDataDims[idx] = resultDimIdx; |
no test coverage detected