UNPKG

@visactor/vtable

Version:

canvas table width high performance

414 lines (403 loc) 34.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: !0 }), exports.deleteTreeHideNode = exports.dealHeaderForTreeMode = exports.dealHeaderForGridTreeMode = exports.dealHeader = exports.countLayoutTree = exports.generateLayoutTree = exports.DimensionTree = void 0; const vutils_1 = require("@visactor/vutils"), NumberMap_1 = require("../tools/NumberMap"), global_1 = require("../tools/global"), ts_types_1 = require("../ts-types"); class DimensionTree { constructor(tree, sharedVar, hierarchyType = "grid", rowExpandLevel = void 0) { this.hasHideNode = !1, this.sizeIncludeParent = !1, this.tree = { id: 0, dimensionKey: "", value: "", children: [], level: -1, afterSpanLevel: -1, levelSpan: 1, startIndex: 0, size: 0, startInTotal: 0, hierarchyState: void 0 }, this.totalLevel = 0, this.expandedMaxLevel = 0, this.dimensionKeys = new NumberMap_1.NumberMap, this.dimensionKeysIncludeVirtual = new NumberMap_1.NumberMap, this.cache = new Map, this.sizeIncludeParent = null != rowExpandLevel, this.setExpandLevel = rowExpandLevel, this.hierarchyType = hierarchyType, this.sharedVar = sharedVar, this.reset(tree); } reset(tree) { this.totalLevel = 0, this.expandedMaxLevel = 0, this.hasHideNode = !1, this.cache.clear(), this.dimensionKeys = new NumberMap_1.NumberMap, this.dimensionKeysIncludeVirtual = new NumberMap_1.NumberMap, this.tree.children = tree, this.setTreeNode(this.tree, 0, this.tree); } setTreeNode(node, startIndex, parent) { var _a, _b, _c, _d; node.startIndex = startIndex, node.startInTotal = (null !== (_a = parent.startInTotal) && void 0 !== _a ? _a : 0) + node.startIndex, node.hide && (this.hasHideNode = !0), (null !== (_b = node.dimensionKey) && void 0 !== _b ? _b : node.indicatorKey) && (node.virtual || this.dimensionKeys.contain(node.indicatorKey ? global_1.IndicatorDimensionKeyPlaceholder : node.dimensionKey) || this.dimensionKeys.put(node.level, node.indicatorKey ? global_1.IndicatorDimensionKeyPlaceholder : node.dimensionKey), this.dimensionKeysIncludeVirtual.contain(node.indicatorKey ? global_1.IndicatorDimensionKeyPlaceholder : node.dimensionKey) || this.dimensionKeysIncludeVirtual.put(node.level, node.indicatorKey ? global_1.IndicatorDimensionKeyPlaceholder : node.dimensionKey), node.id || (node.id = ++this.sharedVar.seqId)); let size = node.dimensionKey && this.sizeIncludeParent ? 1 : 0; const children = node.children || node.columns; return "grid" === this.hierarchyType || null === this.hierarchyType ? (null == children ? void 0 : children.length) >= 1 ? children.forEach((n => { var _a, _b, _c; n.level = (null !== (_a = node.level) && void 0 !== _a ? _a : 0) + 1, "grid" === this.hierarchyType && (n.afterSpanLevel = (null !== (_b = node.afterSpanLevel) && void 0 !== _b ? _b : 0) + (null !== (_c = node.levelSpan) && void 0 !== _c ? _c : 1)), this.totalLevel = Math.max(this.totalLevel, n.level + 1), size += this.setTreeNode(n, size, node); })) : size = -1 === node.level ? 0 : 1 : node.hierarchyState === ts_types_1.HierarchyState.expand && (null == children ? void 0 : children.length) >= 1 ? children.forEach((n => { var _a; n.level = (null !== (_a = node.level) && void 0 !== _a ? _a : 0) + 1, this.totalLevel = Math.max(this.totalLevel, n.level + 1), this.expandedMaxLevel = Math.max(this.expandedMaxLevel, n.level + 1), size += this.setTreeNode(n, size, node); })) : node.hierarchyState === ts_types_1.HierarchyState.collapse && (null == children ? void 0 : children.length) >= 1 ? children.forEach((n => { var _a; n.level = (null !== (_a = node.level) && void 0 !== _a ? _a : 0) + 1, this.totalLevel = Math.max(this.totalLevel, n.level + 1), this.setTreeNode(n, size, node); })) : !node.hierarchyState && node.level + 1 < this.setExpandLevel && ((null == children ? void 0 : children.length) >= 1 || !0 === children) ? ((null === (_c = children[0]) || void 0 === _c ? void 0 : _c.indicatorKey) && "grid-tree" === this.hierarchyType || (node.hierarchyState = ts_types_1.HierarchyState.expand), (null == children ? void 0 : children.length) >= 1 && children.forEach((n => { var _a; n.level = (null !== (_a = node.level) && void 0 !== _a ? _a : 0) + 1, this.totalLevel = Math.max(this.totalLevel, n.level + 1), this.expandedMaxLevel = Math.max(this.expandedMaxLevel, n.level + 1), size += this.setTreeNode(n, size, node); }))) : (null == children ? void 0 : children.length) >= 1 || !0 === children ? ((null === (_d = children[0]) || void 0 === _d ? void 0 : _d.indicatorKey) && "grid-tree" === this.hierarchyType || (node.hierarchyState = ts_types_1.HierarchyState.collapse), (null == children ? void 0 : children.length) >= 1 && children.forEach((n => { var _a; n.level = (null !== (_a = node.level) && void 0 !== _a ? _a : 0) + 1, this.totalLevel = Math.max(this.totalLevel, n.level + 1), this.setTreeNode(n, size, node); }))) : (node.hierarchyState = ts_types_1.HierarchyState.none, size = -1 === node.level ? 0 : 1), node.size = size, size; } getTreePath(index, maxDeep = 30) { const path = []; return this.searchPath(index, this.tree, path, maxDeep), path.shift(), path; } findNodeById(nodes, id) { return nodes.find((node => node.id === id)); } searchPath(index, node, path, maxDeep) { if (!node) return; if (index < node.startIndex || index >= node.startIndex + node.size) return; if (path.push(node), !node.children || 0 === node.children.length || node.level >= maxDeep) return; const cIndex = index - node.startIndex; if (this.cache.has(node.level + 1)) { const cacheNode = this.cache.get(node.level + 1); if (cIndex >= cacheNode.startIndex && cIndex < cacheNode.startIndex + cacheNode.size) return void this.searchPath(cIndex, cacheNode, path, maxDeep); } let left = 0, right = node.children.length - 1; for (;left <= right; ) { const middle = Math.floor((left + right) / 2), element = node.children[middle]; if (cIndex >= element.startIndex && cIndex < element.startIndex + element.size) { this.cache.set(element.level, element); const deleteLevels = []; this.cache.forEach(((node, key) => { key > element.level && deleteLevels.push(key); })), deleteLevels.forEach((key => { this.cache.delete(key); })), this.searchPath(cIndex, element, path, maxDeep); break; } cIndex < element.startIndex ? right = middle - 1 : left = middle + 1; } } movePosition(level, sourceIndex, targetIndex) { let parNode, sourceSubIndex, targetSubIndex; const findTargetNode = (node, subIndex) => { if (void 0 !== sourceSubIndex && void 0 !== targetSubIndex) return; node.level === level && (node.startInTotal === sourceIndex && (sourceSubIndex = subIndex), node.startInTotal <= targetIndex && targetIndex <= node.startInTotal + node.size - 1 && (targetSubIndex = subIndex)); const children = node.children || node.columns; if (children && node.level < level) { parNode = node; for (let i = 0; i < children.length; i++) (sourceIndex >= children[i].startInTotal && sourceIndex <= children[i].startInTotal + children[i].size || targetIndex >= children[i].startInTotal && targetIndex <= children[i].startInTotal + children[i].size) && findTargetNode(children[i], i); } }; findTargetNode(this.tree, 0); const children = parNode.children || parNode.columns, sourceColumns = children.splice(sourceSubIndex, 1); sourceColumns.unshift(targetSubIndex, 0), Array.prototype.splice.apply(children, sourceColumns); } getCopiedTree() { const children = (0, vutils_1.cloneDeep)(this.tree.children); return clearNode(children), children; } setAllNodesState(state) { this._updateNodeHierarchyState(this.tree, state); } _updateNodeHierarchyState(node, hierarchyState) { node.children && node.children.length > 0 && node.children[0].dimensionKey ? (-1 !== node.level && (node.hierarchyState = hierarchyState), node.children.forEach((child => { this._updateNodeHierarchyState(child, hierarchyState); }))) : node.hierarchyState = ts_types_1.HierarchyState.none; } } function generateLayoutTree(tree, children) { Array.isArray(children) && (null == children || children.forEach((node => { var _a, _b; const diemnsonNode = { dimensionKey: node.dimensionKey, indicatorKey: node.indicatorKey, value: node.value, hierarchyState: node.hierarchyState, children: void 0, virtual: null !== (_a = node.virtual) && void 0 !== _a && _a, levelSpan: null !== (_b = node.levelSpan) && void 0 !== _b ? _b : 1 }; tree.push(diemnsonNode), node.children && (diemnsonNode.children = [], generateLayoutTree(diemnsonNode.children, node.children)); }))); } function countLayoutTree(children, countParentNode) { let count = 0; return null == children || children.forEach((node => { countParentNode ? count++ : node.children && 0 !== node.children.length || count++, node.children && (count += countLayoutTree(node.children, countParentNode)); })), count; } function dealHeader(hd, _headerCellIds, results, roots, row, layoutMap) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z; const id = hd.id, dimensionInfo = null !== (_b = null === (_a = layoutMap.rowsDefine) || void 0 === _a ? void 0 : _a.find((dimension => "string" != typeof dimension && dimension.dimensionKey === hd.dimensionKey))) && void 0 !== _b ? _b : null === (_c = layoutMap.columnsDefine) || void 0 === _c ? void 0 : _c.find((dimension => "string" != typeof dimension && dimension.dimensionKey === hd.dimensionKey)), indicatorInfo = null === (_d = layoutMap.indicatorsDefine) || void 0 === _d ? void 0 : _d.find((indicator => "string" != typeof indicator && (hd.indicatorKey ? indicator.indicatorKey === hd.indicatorKey : indicator.title === hd.value && !hd.dimensionKey))), cell = { id: id, title: null !== (_e = hd.value) && void 0 !== _e ? _e : null == indicatorInfo ? void 0 : indicatorInfo.title, field: hd.dimensionKey, style: "function" == typeof (null === (_f = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _f ? void 0 : _f.headerStyle) ? null === (_g = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _g ? void 0 : _g.headerStyle : Object.assign({}, null === (_h = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _h ? void 0 : _h.headerStyle), headerType: null !== (_k = null !== (_j = null == indicatorInfo ? void 0 : indicatorInfo.headerType) && void 0 !== _j ? _j : null == dimensionInfo ? void 0 : dimensionInfo.headerType) && void 0 !== _k ? _k : "text", headerIcon: null !== (_l = null == indicatorInfo ? void 0 : indicatorInfo.headerIcon) && void 0 !== _l ? _l : null == dimensionInfo ? void 0 : dimensionInfo.headerIcon, define: Object.assign({}, hd, null != indicatorInfo ? indicatorInfo : Object.assign({}, dimensionInfo, { sort: void 0 })), fieldFormat: null !== (_m = null == indicatorInfo ? void 0 : indicatorInfo.headerFormat) && void 0 !== _m ? _m : null == dimensionInfo ? void 0 : dimensionInfo.headerFormat, dropDownMenu: null !== (_o = null == indicatorInfo ? void 0 : indicatorInfo.dropDownMenu) && void 0 !== _o ? _o : null == dimensionInfo ? void 0 : dimensionInfo.dropDownMenu, pivotInfo: { value: hd.value, dimensionKey: hd.dimensionKey, isPivotCorner: !1 }, width: null == dimensionInfo ? void 0 : dimensionInfo.width, minWidth: null == dimensionInfo ? void 0 : dimensionInfo.minWidth, maxWidth: null == dimensionInfo ? void 0 : dimensionInfo.maxWidth, showSort: null !== (_p = null == indicatorInfo ? void 0 : indicatorInfo.showSort) && void 0 !== _p ? _p : null == dimensionInfo ? void 0 : dimensionInfo.showSort, sort: null == indicatorInfo ? void 0 : indicatorInfo.sort, description: null == dimensionInfo ? void 0 : dimensionInfo.description }; indicatorInfo ? (indicatorInfo.customRender && (hd.customRender = indicatorInfo.customRender), (0, vutils_1.isValid)(null === (_q = layoutMap._indicators) || void 0 === _q ? void 0 : _q.find((indicator => indicator.indicatorKey === indicatorInfo.indicatorKey))) || null === (_r = layoutMap._indicators) || void 0 === _r || _r.push({ id: ++layoutMap.sharedVar.seqId, indicatorKey: indicatorInfo.indicatorKey, field: indicatorInfo.indicatorKey, fieldFormat: null == indicatorInfo ? void 0 : indicatorInfo.format, cellType: null !== (_t = null !== (_s = null == indicatorInfo ? void 0 : indicatorInfo.cellType) && void 0 !== _s ? _s : null == indicatorInfo ? void 0 : indicatorInfo.columnType) && void 0 !== _t ? _t : "text", chartModule: "chartModule" in indicatorInfo ? indicatorInfo.chartModule : null, chartSpec: "chartSpec" in indicatorInfo ? indicatorInfo.chartSpec : null, noDataRenderNothing: "noDataRenderNothing" in indicatorInfo && indicatorInfo.noDataRenderNothing, sparklineSpec: "sparklineSpec" in indicatorInfo ? indicatorInfo.sparklineSpec : null, style: null == indicatorInfo ? void 0 : indicatorInfo.style, icon: null == indicatorInfo ? void 0 : indicatorInfo.icon, define: Object.assign({}, hd, indicatorInfo, { dragHeader: null == dimensionInfo ? void 0 : dimensionInfo.dragHeader }), width: null == indicatorInfo ? void 0 : indicatorInfo.width, minWidth: null == indicatorInfo ? void 0 : indicatorInfo.minWidth, maxWidth: null == indicatorInfo ? void 0 : indicatorInfo.maxWidth, disableColumnResize: null == indicatorInfo ? void 0 : indicatorInfo.disableColumnResize })) : hd.indicatorKey && ((0, vutils_1.isValid)(null === (_u = layoutMap._indicators) || void 0 === _u ? void 0 : _u.find((indicator => indicator.indicatorKey === hd.indicatorKey))) || null === (_v = layoutMap._indicators) || void 0 === _v || _v.push({ id: ++layoutMap.sharedVar.seqId, indicatorKey: hd.indicatorKey, field: hd.indicatorKey, cellType: "text", define: Object.assign({}, hd) })), results[id] = cell, layoutMap._headerObjects[id] = cell; for (let r = row - 1; r >= 0; r--) _headerCellIds[r][layoutMap.colIndex] = roots[r]; if (_headerCellIds[row][layoutMap.colIndex] = id, hd.levelSpan > 1) for (let i = 1; i < hd.levelSpan; i++) { if (!_headerCellIds[row + i]) { _headerCellIds[row + i] = []; for (let col = 0; col < layoutMap.colIndex; col++) _headerCellIds[row + i][col] = _headerCellIds[row][col]; } _headerCellIds[row + i][layoutMap.colIndex] = id; } if ((null === (_w = hd.children) || void 0 === _w ? void 0 : _w.length) >= 1) layoutMap._addHeaders(_headerCellIds, row + (null !== (_x = hd.levelSpan) && void 0 !== _x ? _x : 1), null !== (_y = hd.children) && void 0 !== _y ? _y : [], [ ...roots, ...Array(null !== (_z = hd.levelSpan) && void 0 !== _z ? _z : 1).fill(id) ], results); else { for (let r = row + 1; r < _headerCellIds.length; r++) _headerCellIds[r][layoutMap.colIndex] = id; layoutMap.colIndex++; } } function dealHeaderForGridTreeMode(hd, _headerCellIds, results, roots, row, totalLevel, expandedMaxLevel, show, dimensions, isRowTree, indicatorsAsCol, layoutMap) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14; const id = hd.id, dimensionInfo = null !== (_b = null === (_a = layoutMap.rowsDefine) || void 0 === _a ? void 0 : _a.find((dimension => "string" != typeof dimension && dimension.dimensionKey === hd.dimensionKey))) && void 0 !== _b ? _b : null === (_c = layoutMap.columnsDefine) || void 0 === _c ? void 0 : _c.find((dimension => "string" != typeof dimension && dimension.dimensionKey === hd.dimensionKey)), indicatorInfo = null === (_d = layoutMap.indicatorsDefine) || void 0 === _d ? void 0 : _d.find((indicator => "string" != typeof indicator && (hd.indicatorKey ? indicator.indicatorKey === hd.indicatorKey : indicator.title === hd.value && !hd.dimensionKey))), cell = { id: id, title: null !== (_e = hd.value) && void 0 !== _e ? _e : null == indicatorInfo ? void 0 : indicatorInfo.title, field: hd.dimensionKey, style: "function" == typeof (null === (_f = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _f ? void 0 : _f.headerStyle) ? null === (_g = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _g ? void 0 : _g.headerStyle : Object.assign({}, null === (_h = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _h ? void 0 : _h.headerStyle), headerType: null !== (_k = null !== (_j = null == indicatorInfo ? void 0 : indicatorInfo.headerType) && void 0 !== _j ? _j : null == dimensionInfo ? void 0 : dimensionInfo.headerType) && void 0 !== _k ? _k : "text", headerIcon: null !== (_l = null == indicatorInfo ? void 0 : indicatorInfo.headerIcon) && void 0 !== _l ? _l : null == dimensionInfo ? void 0 : dimensionInfo.headerIcon, define: Object.assign(hd, { linkJump: null === (_m = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _m ? void 0 : _m.linkJump, linkDetect: null === (_o = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _o ? void 0 : _o.linkDetect, templateLink: null === (_p = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _p ? void 0 : _p.templateLink, keepAspectRatio: null !== (_r = null === (_q = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _q ? void 0 : _q.keepAspectRatio) && void 0 !== _r && _r, imageAutoSizing: null === (_s = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _s ? void 0 : _s.imageAutoSizing, headerCustomRender: null === (_t = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _t ? void 0 : _t.headerCustomRender, headerCustomLayout: null === (_u = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _u ? void 0 : _u.headerCustomLayout, dragHeader: null == dimensionInfo ? void 0 : dimensionInfo.dragHeader, disableHeaderHover: !!(null === (_v = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _v ? void 0 : _v.disableHeaderHover), disableHeaderSelect: !!(null === (_w = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _w ? void 0 : _w.disableHeaderSelect), showSort: null !== (_x = null == indicatorInfo ? void 0 : indicatorInfo.showSort) && void 0 !== _x ? _x : null == dimensionInfo ? void 0 : dimensionInfo.showSort, hide: null == indicatorInfo ? void 0 : indicatorInfo.hide }), fieldFormat: null !== (_y = null == indicatorInfo ? void 0 : indicatorInfo.headerFormat) && void 0 !== _y ? _y : null == dimensionInfo ? void 0 : dimensionInfo.headerFormat, dropDownMenu: null !== (_z = null == indicatorInfo ? void 0 : indicatorInfo.dropDownMenu) && void 0 !== _z ? _z : null == dimensionInfo ? void 0 : dimensionInfo.dropDownMenu, pivotInfo: { value: hd.value, dimensionKey: hd.dimensionKey, isPivotCorner: !1 }, hierarchyLevel: hd.level, dimensionTotalLevel: totalLevel, hierarchyState: hd.hierarchyState, width: null == dimensionInfo ? void 0 : dimensionInfo.width, minWidth: null == dimensionInfo ? void 0 : dimensionInfo.minWidth, maxWidth: null == dimensionInfo ? void 0 : dimensionInfo.maxWidth, showSort: null !== (_0 = null == indicatorInfo ? void 0 : indicatorInfo.showSort) && void 0 !== _0 ? _0 : null == dimensionInfo ? void 0 : dimensionInfo.showSort, sort: null == indicatorInfo ? void 0 : indicatorInfo.sort, description: null == dimensionInfo ? void 0 : dimensionInfo.description, parentCellId: roots[roots.length - 1] }; indicatorInfo ? (indicatorInfo.customRender && (hd.customRender = indicatorInfo.customRender), (0, vutils_1.isValid)(null === (_1 = layoutMap._indicators) || void 0 === _1 ? void 0 : _1.find((indicator => indicator.indicatorKey === indicatorInfo.indicatorKey))) || null === (_2 = layoutMap._indicators) || void 0 === _2 || _2.push({ id: ++layoutMap.sharedVar.seqId, indicatorKey: indicatorInfo.indicatorKey, field: indicatorInfo.indicatorKey, fieldFormat: null == indicatorInfo ? void 0 : indicatorInfo.format, cellType: null !== (_4 = null !== (_3 = null == indicatorInfo ? void 0 : indicatorInfo.cellType) && void 0 !== _3 ? _3 : null == indicatorInfo ? void 0 : indicatorInfo.columnType) && void 0 !== _4 ? _4 : "text", chartModule: "chartModule" in indicatorInfo ? indicatorInfo.chartModule : null, chartSpec: "chartSpec" in indicatorInfo ? indicatorInfo.chartSpec : null, noDataRenderNothing: "noDataRenderNothing" in indicatorInfo && indicatorInfo.noDataRenderNothing, sparklineSpec: "sparklineSpec" in indicatorInfo ? indicatorInfo.sparklineSpec : null, style: null == indicatorInfo ? void 0 : indicatorInfo.style, icon: null == indicatorInfo ? void 0 : indicatorInfo.icon, define: Object.assign({}, hd, indicatorInfo, { dragHeader: null == dimensionInfo ? void 0 : dimensionInfo.dragHeader }), width: null == indicatorInfo ? void 0 : indicatorInfo.width, minWidth: null == indicatorInfo ? void 0 : indicatorInfo.minWidth, maxWidth: null == indicatorInfo ? void 0 : indicatorInfo.maxWidth, disableColumnResize: null == indicatorInfo ? void 0 : indicatorInfo.disableColumnResize })) : hd.indicatorKey && ((0, vutils_1.isValid)(null === (_5 = layoutMap._indicators) || void 0 === _5 ? void 0 : _5.find((indicator => indicator.indicatorKey === hd.indicatorKey))) || null === (_6 = layoutMap._indicators) || void 0 === _6 || _6.push({ id: ++layoutMap.sharedVar.seqId, indicatorKey: hd.indicatorKey, field: hd.indicatorKey, cellType: "text", define: Object.assign({}, hd) })), results[id] = cell, layoutMap._headerObjects[id] = cell; for (let r = row - 1; r >= 0; r--) _headerCellIds[r][layoutMap.colIndex] = roots[r]; _headerCellIds[row][layoutMap.colIndex] = id; const span = Math.min((isRowTree ? indicatorsAsCol : !indicatorsAsCol) ? expandedMaxLevel : expandedMaxLevel - 1, null !== (_7 = hd.levelSpan) && void 0 !== _7 ? _7 : 1e3); if (span > 0) for (let r = row + 1; r < span; r++) { if (!_headerCellIds[r]) { _headerCellIds[r] = []; for (let col = 0; col < layoutMap.colIndex; col++) _headerCellIds[r][col] = _headerCellIds[row][col]; } _headerCellIds[r][layoutMap.colIndex] = id; } if ((null === (_8 = (hd.hierarchyState === ts_types_1.HierarchyState.expand && hd).children) || void 0 === _8 ? void 0 : _8.length) >= 1) layoutMap._addHeadersForGridTreeMode(_headerCellIds, row + (null !== (_9 = hd.levelSpan) && void 0 !== _9 ? _9 : 1), null !== (_10 = hd.children) && void 0 !== _10 ? _10 : [], [ ...roots, ...Array(null !== (_11 = hd.levelSpan) && void 0 !== _11 ? _11 : 1).fill(id) ], totalLevel, expandedMaxLevel, show && hd.hierarchyState === ts_types_1.HierarchyState.expand, dimensions, results, isRowTree); else { const needSupplementLength = (isRowTree ? indicatorsAsCol : !indicatorsAsCol) ? expandedMaxLevel : expandedMaxLevel - 1; for (let r = row + 1; r < needSupplementLength; r++) _headerCellIds[r] || (_headerCellIds[r] = []), _headerCellIds[r][layoutMap.colIndex] = id; if (row <= needSupplementLength - 1 && (isRowTree && !1 === indicatorsAsCol || !isRowTree && !0 === indicatorsAsCol)) { let lastIndidcatorChildren = hd; const levelSpan = needSupplementLength - row; for (;lastIndidcatorChildren && !(null === (_12 = lastIndidcatorChildren.children) || void 0 === _12 ? void 0 : _12[0].indicatorKey); ) lastIndidcatorChildren = lastIndidcatorChildren.children[0]; layoutMap._addHeadersForGridTreeMode(_headerCellIds, expandedMaxLevel - 1, null !== (_13 = lastIndidcatorChildren.children) && void 0 !== _13 ? _13 : [], [ ...roots, ...Array(Math.max(levelSpan, null !== (_14 = hd.levelSpan) && void 0 !== _14 ? _14 : 1)).fill(id) ], totalLevel, expandedMaxLevel, !0, dimensions, results, isRowTree); } else layoutMap.colIndex++; } } function dealHeaderForTreeMode(hd, _headerCellIds, results, roots, row, totalLevel, show, dimensions, layoutMap) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4; const id = hd.id, dimensionInfo = dimensions.find((dimension => "string" != typeof dimension && dimension.dimensionKey === hd.dimensionKey)), indicatorInfo = null === (_a = layoutMap.indicatorsDefine) || void 0 === _a ? void 0 : _a.find((indicator => "string" != typeof indicator && (hd.indicatorKey ? indicator.indicatorKey === hd.indicatorKey : indicator.title === hd.value))), cell = { id: id, title: null !== (_b = hd.value) && void 0 !== _b ? _b : indicatorInfo.title, field: hd.dimensionKey, style: hd.level + 1 === totalLevel || "function" == typeof (null === (_c = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _c ? void 0 : _c.headerStyle) ? null === (_d = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _d ? void 0 : _d.headerStyle : Object.assign({}, null === (_e = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _e ? void 0 : _e.headerStyle, { textAlign: "left" }), headerType: null !== (_g = null !== (_f = null == indicatorInfo ? void 0 : indicatorInfo.headerType) && void 0 !== _f ? _f : null == dimensionInfo ? void 0 : dimensionInfo.headerType) && void 0 !== _g ? _g : "text", headerIcon: null !== (_h = null == indicatorInfo ? void 0 : indicatorInfo.headerIcon) && void 0 !== _h ? _h : null == dimensionInfo ? void 0 : dimensionInfo.headerIcon, define: Object.assign(hd, { linkJump: null === (_j = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _j ? void 0 : _j.linkJump, linkDetect: null === (_k = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _k ? void 0 : _k.linkDetect, templateLink: null === (_l = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _l ? void 0 : _l.templateLink, keepAspectRatio: null !== (_o = null === (_m = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _m ? void 0 : _m.keepAspectRatio) && void 0 !== _o && _o, imageAutoSizing: null === (_p = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _p ? void 0 : _p.imageAutoSizing, headerCustomRender: null === (_q = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _q ? void 0 : _q.headerCustomRender, headerCustomLayout: null === (_r = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _r ? void 0 : _r.headerCustomLayout, dragHeader: null == dimensionInfo ? void 0 : dimensionInfo.dragHeader, disableHeaderHover: !!(null === (_s = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _s ? void 0 : _s.disableHeaderHover), disableHeaderSelect: !!(null === (_t = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _t ? void 0 : _t.disableHeaderSelect), showSort: null !== (_u = null == indicatorInfo ? void 0 : indicatorInfo.showSort) && void 0 !== _u ? _u : null == dimensionInfo ? void 0 : dimensionInfo.showSort, hide: null == indicatorInfo ? void 0 : indicatorInfo.hide }), fieldFormat: null !== (_v = null == indicatorInfo ? void 0 : indicatorInfo.headerFormat) && void 0 !== _v ? _v : null == dimensionInfo ? void 0 : dimensionInfo.headerFormat, dropDownMenu: null !== (_w = null == indicatorInfo ? void 0 : indicatorInfo.dropDownMenu) && void 0 !== _w ? _w : null == dimensionInfo ? void 0 : dimensionInfo.dropDownMenu, pivotInfo: { value: hd.value, dimensionKey: hd.dimensionKey, isPivotCorner: !1 }, hierarchyLevel: hd.level, dimensionTotalLevel: totalLevel, hierarchyState: hd.hierarchyState, width: null == dimensionInfo ? void 0 : dimensionInfo.width, minWidth: null == dimensionInfo ? void 0 : dimensionInfo.minWidth, maxWidth: null == dimensionInfo ? void 0 : dimensionInfo.maxWidth, parentCellId: roots[roots.length - 1] }; indicatorInfo ? (indicatorInfo.customRender && (hd.customRender = indicatorInfo.customRender), (0, vutils_1.isValid)(null === (_x = layoutMap._indicators) || void 0 === _x ? void 0 : _x.find((indicator => indicator.indicatorKey === indicatorInfo.indicatorKey))) || null === (_y = layoutMap._indicators) || void 0 === _y || _y.push({ id: ++layoutMap.sharedVar.seqId, indicatorKey: indicatorInfo.indicatorKey, field: indicatorInfo.indicatorKey, fieldFormat: null == indicatorInfo ? void 0 : indicatorInfo.format, cellType: null !== (_0 = null !== (_z = null == indicatorInfo ? void 0 : indicatorInfo.cellType) && void 0 !== _z ? _z : null == indicatorInfo ? void 0 : indicatorInfo.columnType) && void 0 !== _0 ? _0 : "text", chartModule: "chartModule" in indicatorInfo ? indicatorInfo.chartModule : null, chartSpec: "chartSpec" in indicatorInfo ? indicatorInfo.chartSpec : null, noDataRenderNothing: "noDataRenderNothing" in indicatorInfo && indicatorInfo.noDataRenderNothing, sparklineSpec: "sparklineSpec" in indicatorInfo ? indicatorInfo.sparklineSpec : null, style: null == indicatorInfo ? void 0 : indicatorInfo.style, icon: null == indicatorInfo ? void 0 : indicatorInfo.icon, define: Object.assign({}, hd, indicatorInfo, { dragHeader: null == dimensionInfo ? void 0 : dimensionInfo.dragHeader }), width: null == indicatorInfo ? void 0 : indicatorInfo.width, minWidth: null == indicatorInfo ? void 0 : indicatorInfo.minWidth, maxWidth: null == indicatorInfo ? void 0 : indicatorInfo.maxWidth, disableColumnResize: null == indicatorInfo ? void 0 : indicatorInfo.disableColumnResize })) : hd.indicatorKey && ((0, vutils_1.isValid)(null === (_1 = layoutMap._indicators) || void 0 === _1 ? void 0 : _1.find((indicator => indicator.indicatorKey === hd.indicatorKey))) || null === (_2 = layoutMap._indicators) || void 0 === _2 || _2.push({ id: ++layoutMap.sharedVar.seqId, indicatorKey: hd.indicatorKey, field: hd.indicatorKey, cellType: "text", define: Object.assign({}, hd) })), results[id] = cell, layoutMap._headerObjects[id] = cell, _headerCellIds[row][layoutMap.colIndex] = id; for (let r = row - 1; r >= 0; r--) _headerCellIds[r][layoutMap.colIndex] = roots[r]; if (hd.hierarchyState === ts_types_1.HierarchyState.expand && (null === (_3 = hd.children) || void 0 === _3 ? void 0 : _3.length) >= 1) show && layoutMap.colIndex++, layoutMap._addHeadersForTreeMode(_headerCellIds, row, null !== (_4 = hd.children) && void 0 !== _4 ? _4 : [], [ ...roots, id ], totalLevel, show && hd.hierarchyState === ts_types_1.HierarchyState.expand, dimensions, results); else { show && layoutMap.colIndex++; for (let r = row + 1; r < _headerCellIds.length; r++) _headerCellIds[r][layoutMap.colIndex] = id; } } function clearNode(children) { for (let i = 0; i < children.length; i++) { const node = children[i]; delete node.level, delete node.startIndex, delete node.id, delete node.levelSpan, delete node.size, delete node.startInTotal; const childrenNew = node.children || node.columns; childrenNew && clearNode(childrenNew); } } function deleteTreeHideNode(tree_children, dimensionPath, indicators, hasHideNode, table) { var _a; for (let i = tree_children.length - 1; i >= 0; i--) { const node = tree_children[i]; if (dimensionPath.push(node), hasHideNode && node.hide) tree_children.splice(i, 1); else if (node.indicatorKey) { const hide = null === (_a = null == indicators ? void 0 : indicators.find((indicator => indicator.indicatorKey === node.indicatorKey))) || void 0 === _a ? void 0 : _a.hide; "function" == typeof hide ? hide({ dimensionPaths: dimensionPath, table: table }) && tree_children.splice(i, 1) : hide && tree_children.splice(i, 1); } else node.children && node.children.length > 0 && deleteTreeHideNode(node.children, dimensionPath, indicators, hasHideNode, table); dimensionPath.pop(); } } exports.DimensionTree = DimensionTree, exports.generateLayoutTree = generateLayoutTree, exports.countLayoutTree = countLayoutTree, exports.dealHeader = dealHeader, exports.dealHeaderForGridTreeMode = dealHeaderForGridTreeMode, exports.dealHeaderForTreeMode = dealHeaderForTreeMode, exports.deleteTreeHideNode = deleteTreeHideNode; //# sourceMappingURL=tree-helper.js.map