UNPKG

cione-comp-lib

Version:

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

213 lines (212 loc) 8.38 kB
import { VISUAL_DIMENSIONS } from "../../util/types.mjs"; import SeriesDimensionDefine from "../SeriesDimensionDefine.mjs"; import { createHashMap, isString, each, extend, defaults, isObject } from "../../../../zrender/lib/core/util.mjs"; import { isSourceInstance, createSourceFromSeriesDataOption } from "../Source.mjs"; import { CtorInt32Array } from "../DataStore.mjs"; import { normalizeToArray } from "../../util/model.mjs"; import { guessOrdinal, BE_ORDINAL } from "./sourceHelper.mjs"; import { shouldOmitUnusedDimensions, ensureSourceDimNameMap, createDimNameMap, SeriesDataSchema } from "./SeriesDataSchema.mjs"; function createDimensions(source, opt) { return prepareSeriesDataSchema(source, opt).dimensions; } function prepareSeriesDataSchema(source, opt) { if (!isSourceInstance(source)) { source = createSourceFromSeriesDataOption(source); } opt = opt || {}; var sysDims = opt.coordDimensions || []; var dimsDef = opt.dimensionsDefine || source.dimensionsDefine || []; var coordDimNameMap = createHashMap(); var resultList = []; var dimCount = getDimCount(source, sysDims, dimsDef, opt.dimensionsCount); var omitUnusedDimensions = opt.canOmitUnusedDimensions && shouldOmitUnusedDimensions(dimCount); var isUsingSourceDimensionsDef = dimsDef === source.dimensionsDefine; var dataDimNameMap = isUsingSourceDimensionsDef ? ensureSourceDimNameMap(source) : createDimNameMap(dimsDef); var encodeDef = opt.encodeDefine; if (!encodeDef && opt.encodeDefaulter) { encodeDef = opt.encodeDefaulter(source, dimCount); } var encodeDefMap = createHashMap(encodeDef); var indicesMap = new CtorInt32Array(dimCount); for (var i = 0; i < indicesMap.length; i++) { indicesMap[i] = -1; } function getResultItem(dimIdx) { var idx = indicesMap[dimIdx]; if (idx < 0) { var dimDefItemRaw = dimsDef[dimIdx]; var dimDefItem = isObject(dimDefItemRaw) ? dimDefItemRaw : { name: dimDefItemRaw }; var resultItem2 = new SeriesDimensionDefine(); var userDimName = dimDefItem.name; if (userDimName != null && dataDimNameMap.get(userDimName) != null) { resultItem2.name = resultItem2.displayName = userDimName; } dimDefItem.type != null && (resultItem2.type = dimDefItem.type); dimDefItem.displayName != null && (resultItem2.displayName = dimDefItem.displayName); var newIdx = resultList.length; indicesMap[dimIdx] = newIdx; resultItem2.storeDimIndex = dimIdx; resultList.push(resultItem2); return resultItem2; } return resultList[idx]; } if (!omitUnusedDimensions) { for (var i = 0; i < dimCount; i++) { getResultItem(i); } } encodeDefMap.each(function(dataDimsRaw, coordDim2) { var dataDims = normalizeToArray(dataDimsRaw).slice(); if (dataDims.length === 1 && !isString(dataDims[0]) && dataDims[0] < 0) { encodeDefMap.set(coordDim2, false); return; } var validDataDims = encodeDefMap.set(coordDim2, []); each(dataDims, function(resultDimIdxOrName, idx) { var resultDimIdx2 = isString(resultDimIdxOrName) ? dataDimNameMap.get(resultDimIdxOrName) : resultDimIdxOrName; if (resultDimIdx2 != null && resultDimIdx2 < dimCount) { validDataDims[idx] = resultDimIdx2; applyDim(getResultItem(resultDimIdx2), coordDim2, idx); } }); }); var availDimIdx = 0; each(sysDims, function(sysDimItemRaw) { var coordDim2; var sysDimItemDimsDef; var sysDimItemOtherDims; var sysDimItem; if (isString(sysDimItemRaw)) { coordDim2 = sysDimItemRaw; sysDimItem = {}; } else { sysDimItem = sysDimItemRaw; coordDim2 = sysDimItem.name; var ordinalMeta = sysDimItem.ordinalMeta; sysDimItem.ordinalMeta = null; sysDimItem = extend({}, sysDimItem); sysDimItem.ordinalMeta = ordinalMeta; sysDimItemDimsDef = sysDimItem.dimsDef; sysDimItemOtherDims = sysDimItem.otherDims; sysDimItem.name = sysDimItem.coordDim = sysDimItem.coordDimIndex = sysDimItem.dimsDef = sysDimItem.otherDims = null; } var dataDims = encodeDefMap.get(coordDim2); if (dataDims === false) { return; } dataDims = normalizeToArray(dataDims); if (!dataDims.length) { for (var i2 = 0; i2 < (sysDimItemDimsDef && sysDimItemDimsDef.length || 1); i2++) { while (availDimIdx < dimCount && getResultItem(availDimIdx).coordDim != null) { availDimIdx++; } availDimIdx < dimCount && dataDims.push(availDimIdx++); } } each(dataDims, function(resultDimIdx2, coordDimIndex) { var resultItem2 = getResultItem(resultDimIdx2); if (isUsingSourceDimensionsDef && sysDimItem.type != null) { resultItem2.type = sysDimItem.type; } applyDim(defaults(resultItem2, sysDimItem), coordDim2, coordDimIndex); if (resultItem2.name == null && sysDimItemDimsDef) { var sysDimItemDimsDefItem = sysDimItemDimsDef[coordDimIndex]; !isObject(sysDimItemDimsDefItem) && (sysDimItemDimsDefItem = { name: sysDimItemDimsDefItem }); resultItem2.name = resultItem2.displayName = sysDimItemDimsDefItem.name; resultItem2.defaultTooltip = sysDimItemDimsDefItem.defaultTooltip; } sysDimItemOtherDims && defaults(resultItem2.otherDims, sysDimItemOtherDims); }); }); function applyDim(resultItem2, coordDim2, coordDimIndex) { if (VISUAL_DIMENSIONS.get(coordDim2) != null) { resultItem2.otherDims[coordDim2] = coordDimIndex; } else { resultItem2.coordDim = coordDim2; resultItem2.coordDimIndex = coordDimIndex; coordDimNameMap.set(coordDim2, true); } } var generateCoord = opt.generateCoord; var generateCoordCount = opt.generateCoordCount; var fromZero = generateCoordCount != null; generateCoordCount = generateCoord ? generateCoordCount || 1 : 0; var extra = generateCoord || "value"; function ifNoNameFillWithCoordName(resultItem2) { if (resultItem2.name == null) { resultItem2.name = resultItem2.coordDim; } } if (!omitUnusedDimensions) { for (var resultDimIdx = 0; resultDimIdx < dimCount; resultDimIdx++) { var resultItem = getResultItem(resultDimIdx); var coordDim = resultItem.coordDim; if (coordDim == null) { resultItem.coordDim = genCoordDimName(extra, coordDimNameMap, fromZero); resultItem.coordDimIndex = 0; if (!generateCoord || generateCoordCount <= 0) { resultItem.isExtraCoord = true; } generateCoordCount--; } ifNoNameFillWithCoordName(resultItem); if (resultItem.type == null && (guessOrdinal(source, resultDimIdx) === BE_ORDINAL.Must || resultItem.isExtraCoord && (resultItem.otherDims.itemName != null || resultItem.otherDims.seriesName != null))) { resultItem.type = "ordinal"; } } } else { each(resultList, function(resultItem2) { ifNoNameFillWithCoordName(resultItem2); }); resultList.sort(function(item0, item1) { return item0.storeDimIndex - item1.storeDimIndex; }); } removeDuplication(resultList); return new SeriesDataSchema({ source, dimensions: resultList, fullDimensionCount: dimCount, dimensionOmitted: omitUnusedDimensions }); } function removeDuplication(result) { var duplicationMap = createHashMap(); for (var i = 0; i < result.length; i++) { var dim = result[i]; var dimOriginalName = dim.name; var count = duplicationMap.get(dimOriginalName) || 0; if (count > 0) { dim.name = dimOriginalName + (count - 1); } count++; duplicationMap.set(dimOriginalName, count); } } function getDimCount(source, sysDims, dimsDef, optDimCount) { var dimCount = Math.max(source.dimensionsDetectedCount || 1, sysDims.length, dimsDef.length, optDimCount || 0); each(sysDims, function(sysDimItem) { var sysDimItemDimsDef; if (isObject(sysDimItem) && (sysDimItemDimsDef = sysDimItem.dimsDef)) { dimCount = Math.max(dimCount, sysDimItemDimsDef.length); } }); return dimCount; } function genCoordDimName(name, map, fromZero) { if (fromZero || map.hasKey(name)) { var i = 0; while (map.hasKey(name + i)) { i++; } name += i; } map.set(name, true); return name; } export { createDimensions, prepareSeriesDataSchema as default };