cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
213 lines (212 loc) • 8.38 kB
JavaScript
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 };