UNPKG

@antv/s2

Version:

effective spreadsheet render core lib

81 lines 4.33 kB
"use strict"; 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