@antv/s2
Version:
effective spreadsheet render core lib
108 lines • 5.14 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildGridHierarchy = void 0;
const lodash_1 = require("lodash");
const constant_1 = require("../../common/constant");
const data_set_operate_1 = require("../../utils/data-set-operate");
const add_totals_1 = require("../../utils/layout/add-totals");
const generate_header_nodes_1 = require("../../utils/layout/generate-header-nodes");
const get_dims_condition_by_node_1 = require("../../utils/layout/get-dims-condition-by-node");
const whether_leaf_by_level_1 = require("../../utils/layout/whether-leaf-by-level");
const layout_hooks_1 = require("../layout/layout-hooks");
const total_measure_1 = require("../layout/total-measure");
const total_class_1 = require("./total-class");
const buildTotalGridHierarchy = (params) => {
const { addTotalMeasureInTotal, parentNode, currentField, fields, hierarchy, spreadsheet, } = params;
const index = fields.indexOf(currentField);
const dataSet = spreadsheet.dataSet;
const { values = [] } = dataSet.fields;
const fieldValues = [];
let query = {};
const totalsConfig = spreadsheet.getTotalsConfig(currentField);
const defaultDimensionGroup = parentNode.isGrandTotals
? totalsConfig.grandTotalsGroupDimensions || []
: totalsConfig.subTotalsGroupDimensions || [];
const dimensionGroup = !dataSet.isEmpty() ? defaultDimensionGroup : [];
if (dimensionGroup === null || dimensionGroup === void 0 ? void 0 : dimensionGroup.includes(currentField)) {
query = (0, get_dims_condition_by_node_1.getDimsCondition)(parentNode);
const dimValues = dataSet.getDimensionValues(currentField, query);
fieldValues.push(...(dimValues || []).map((value) => new total_class_1.TotalClass({
label: value,
isSubTotals: parentNode.isSubTotals,
isGrandTotals: parentNode.isGrandTotals,
isTotalRoot: false,
})));
if ((0, lodash_1.isEmpty)(fieldValues) && currentField) {
fieldValues.push(constant_1.EMPTY_FIELD_VALUE);
}
}
else if (addTotalMeasureInTotal && currentField === constant_1.EXTRA_FIELD) {
// add total measures
query = (0, get_dims_condition_by_node_1.getDimsCondition)(parentNode);
fieldValues.push(...values.map((v) => new total_measure_1.TotalMeasure(v)));
}
else if ((0, whether_leaf_by_level_1.whetherLeafByLevel)({ spreadsheet, level: index, fields })) {
// 如果最后一级没有分组维度,则将上一个结点设为叶子节点
parentNode.isLeaf = true;
hierarchy.pushIndexNode(parentNode);
parentNode.rowIndex = hierarchy.getIndexNodes().length - 1;
return;
}
else {
// 如果是空维度,则跳转到下一级 level
buildTotalGridHierarchy(Object.assign(Object.assign({}, params), { currentField: fields[index + 1] }));
return;
}
const displayFieldValues = (0, data_set_operate_1.filterOutDetail)(fieldValues);
(0, generate_header_nodes_1.generateHeaderNodes)(Object.assign(Object.assign({}, params), { fieldValues: displayFieldValues, level: index, parentNode,
query,
// eslint-disable-next-line @typescript-eslint/no-use-before-define
handler: buildGridHierarchy }));
};
const buildNormalGridHierarchy = (params) => {
const { parentNode, currentField, fields, spreadsheet } = params;
const dataSet = spreadsheet.dataSet;
const { values = [] } = dataSet.fields;
const index = fields.indexOf(currentField);
const fieldValues = [];
let query = {};
// field(dimension)'s all values
query = (0, get_dims_condition_by_node_1.getDimsCondition)(parentNode, true);
const dimValues = dataSet.getDimensionValues(currentField, query);
const arrangedValues = (0, layout_hooks_1.layoutArrange)(spreadsheet, dimValues, parentNode, currentField);
fieldValues.push(...(arrangedValues || []));
// add skeleton for empty data
if ((0, lodash_1.isEmpty)(fieldValues) && currentField) {
if (currentField === constant_1.EXTRA_FIELD) {
fieldValues.push(...values);
}
else {
fieldValues.push(constant_1.EMPTY_FIELD_VALUE);
}
}
(0, add_totals_1.addTotals)({
currentField,
lastField: fields[index - 1],
isFirstField: index === 0,
fieldValues,
spreadsheet,
});
const displayFieldValues = (0, data_set_operate_1.filterOutDetail)(fieldValues);
(0, generate_header_nodes_1.generateHeaderNodes)(Object.assign(Object.assign({}, params), { fieldValues: displayFieldValues, level: index, parentNode,
query,
// eslint-disable-next-line @typescript-eslint/no-use-before-define
handler: buildGridHierarchy }));
};
/**
* Build grid hierarchy in rows or columns
*/
function buildGridHierarchy(params) {
if (params.parentNode.isTotals) {
buildTotalGridHierarchy(params);
}
else {
buildNormalGridHierarchy(params);
}
}
exports.buildGridHierarchy = buildGridHierarchy;
//# sourceMappingURL=build-gird-hierarchy.js.map