@antv/s2
Version:
effective spreadsheet render core lib
81 lines • 4.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildCustomTreeHierarchy = void 0;
const tslib_1 = require("tslib");
const lodash_1 = require("lodash");
const constant_1 = require("../../common/constant");
const generate_id_1 = require("../../utils/layout/generate-id");
const node_1 = require("../layout/node");
const layout_hooks_1 = require("./layout-hooks");
/**
* 自定义🌲结构设计原则:
* 1、渲染的节点由传入的数据结构决定, 不管是平铺,还是树状, 本质上都是树状结构
* 2、没有总计小计的概念
* 3、是否展开和收起完全由 customTreeNode.collapsed 来控制(默认都展开)
* 4、支持行头/列头自定义
* 5、支持隐藏列头
* @param params
*/
const buildCustomTreeHierarchy = (params) => {
var _a;
const { tree = [], level, parentNode, hierarchy, spreadsheet, isRowHeader, } = params;
const { collapseFields, collapseAll, expandDepth } = (_a = spreadsheet.options.style) === null || _a === void 0 ? void 0 : _a.rowCell;
const hiddenColumnsDetail = spreadsheet.store.get('hiddenColumnsDetail') || [];
tree.forEach((treeNode) => {
var _a, _b;
const { field, title, collapsed, children } = treeNode, rest = tslib_1.__rest(treeNode, ["field", "title", "collapsed", "children"]);
const isHiddenNode = hiddenColumnsDetail.some(({ hideColumnNodes }) => hideColumnNodes.find((hideNode) => hideNode.field === field));
// query 只与值本身有关,不会涉及到 parent 节点
const valueQuery = { [constant_1.EXTRA_FIELD]: field };
// 使用 field 作为 id, 保证其唯一性, 复制时再做二次转换
const nodeId = (0, generate_id_1.generateId)(parentNode.id, field);
const defaultCollapsed = collapsed !== null && collapsed !== void 0 ? collapsed : false;
const isDefaultCollapsed = (_a = collapseFields === null || collapseFields === void 0 ? void 0 : collapseFields[nodeId]) !== null && _a !== void 0 ? _a : collapseFields === null || collapseFields === void 0 ? void 0 : collapseFields[field];
// 如果 level 大于 rowExpandDepth 或者没有配置层级展开配置时,返回 null,保证能正确降级到 collapseAll
const isLevelCollapsed = (0, lodash_1.isNumber)(expandDepth) ? level > expandDepth : null;
const isCollapsed = (_b = isDefaultCollapsed !== null && isDefaultCollapsed !== void 0 ? isDefaultCollapsed : isLevelCollapsed) !== null && _b !== void 0 ? _b : (collapseAll || defaultCollapsed);
// TODO: 平铺模式支持 折叠/展开: https://github.com/antvis/S2/issues/2019
const isCollapsedNode = spreadsheet.isHierarchyTreeType() && isRowHeader && isCollapsed;
const isLeaf = (0, lodash_1.isEmpty)(children);
const node = new node_1.Node({
id: nodeId,
field,
value: title,
level,
parent: parentNode,
// 自定义行头不会存在总计概念
isTotals: false,
isCollapsed: isCollapsedNode,
hierarchy,
query: valueQuery,
spreadsheet,
isLeaf,
extra: Object.assign(Object.assign({}, rest), { isCustomNode: true }),
});
if (isLeaf || isHiddenNode || isCollapsedNode) {
hierarchy.pushIndexNode(node);
}
if (isHiddenNode) {
return;
}
if (level > hierarchy.maxLevel && !node.isSeriesNumberNode()) {
hierarchy.maxLevel = level;
hierarchy.sampleNodesForAllLevels.push(node);
hierarchy.sampleNodeForLastLevel = node;
hierarchy.maxLevel = level;
}
const expandCurrentNode = (0, layout_hooks_1.layoutHierarchy)(spreadsheet, parentNode, node, hierarchy);
if (!(0, lodash_1.isEmpty)(children) && !isCollapsedNode && expandCurrentNode) {
(0, exports.buildCustomTreeHierarchy)({
spreadsheet,
parentNode: node,
level: level + 1,
hierarchy,
tree: (children || []),
isRowHeader,
});
}
});
};
exports.buildCustomTreeHierarchy = buildCustomTreeHierarchy;
//# sourceMappingURL=build-row-custom-tree-hierarchy.js.map