UNPKG

@antv/s2

Version:

effective spreadsheet render core lib

247 lines 10 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getScrollGroupClip = exports.getFrozenTrailingRowOffset = exports.getFrozenTrailingColOffset = exports.getFrozenColOffset = exports.getExtraFrozenColNodes = exports.getExtraFrozenSeriesNodes = exports.getExtraFrozenRowNodes = exports.getSeriesNumberNodes = void 0; const lodash_1 = require("lodash"); const common_1 = require("../../common"); const node_1 = require("../layout/node"); const frame_1 = require("./frame"); const getSeriesNumberNodes = (rowsHierarchy, seriesNumberWidth, spreadsheet) => { const isHierarchyTreeType = spreadsheet.isHierarchyTreeType(); const rootNodes = rowsHierarchy.getNodes(0); return rootNodes.map((node, idx) => { const value = `${idx + 1}`; const sNode = new node_1.Node({ id: value, field: '', rowIndex: idx, value, }); sNode.x = node.x; sNode.y = node.y; sNode.width = seriesNumberWidth; sNode.height = isHierarchyTreeType ? node.getTotalHeightForTreeHierarchy() : node.height; sNode.isLeaf = true; sNode.relatedNode = node; sNode.spreadsheet = spreadsheet; return sNode; }); }; exports.getSeriesNumberNodes = getSeriesNumberNodes; const getAllParents = (nodes) => { const parents = nodes.reduce((pre, leaf) => { let parent = leaf.parent; while (parent && parent.id !== common_1.ROOT_NODE_ID) { // eslint-disable-next-line no-loop-func if (!pre.find((node) => node.id === parent.id)) { pre.push(parent); } parent = parent.parent; } return pre; }, []); return parents; }; const clipFrozenRowHeadNode = (node, { y = 0, height = 0 }) => { if (node.y < y) { node.height -= y - node.y; node.y = y; } if (node.y + node.height > y + height) { node.height -= node.y + node.height - y - height; } }; const clipFrozenTrailingRowHeadNode = (node, { y = 0, height = 0 }) => { if (node.y + node.height > y + height) { node.height -= node.y + node.height - y - height; } if (node.y < y) { node.height -= y - node.y; node.y = y; } }; const getExtraFrozenRowNodes = (facet) => { const extraNodes = []; const { start, end } = facet.getCellRange(); const { rowCount, trailingRowCount } = facet.getFrozenOptions(); if (rowCount) { const frozenLeafNodes = facet.getRowLeafNodesByRange(start, start + rowCount - 1); frozenLeafNodes.forEach((leafNode) => { const newLeafNode = leafNode.clone(); newLeafNode.isFrozenHead = true; extraNodes.push(newLeafNode); }); const parents = getAllParents(frozenLeafNodes); parents.forEach((parent) => { const newParent = parent.clone(); newParent.isFrozenHead = true; clipFrozenRowHeadNode(newParent, facet.frozenGroupAreas[common_1.FrozenGroupArea.Row]); extraNodes.push(newParent); }); } if (trailingRowCount) { const frozenLeafNodes = facet.getRowLeafNodesByRange(end - trailingRowCount + 1, end); frozenLeafNodes.forEach((leafNode) => { const newLeafNode = leafNode.clone(); newLeafNode.isFrozenTrailing = true; extraNodes.push(newLeafNode); }); const parents = getAllParents(frozenLeafNodes); parents.forEach((parent) => { const newParent = parent.clone(); newParent.isFrozenTrailing = true; clipFrozenTrailingRowHeadNode(newParent, facet.frozenGroupAreas[common_1.FrozenGroupArea.TrailingRow]); extraNodes.push(newParent); }); } return extraNodes; }; exports.getExtraFrozenRowNodes = getExtraFrozenRowNodes; const getExtraFrozenSeriesNodes = (facet, nodes) => { const extraNodes = []; const { start, end } = facet.getCellRange(); const { rowCount, trailingRowCount } = facet.getFrozenOptions(); const includeChildInRowIndexRange = (node, range) => { var _a; const rowIdx = node.rowIndex; if ((0, lodash_1.isNumber)(rowIdx) && rowIdx >= range[0] && rowIdx <= range[1]) { return true; } const children = (_a = node.children) !== null && _a !== void 0 ? _a : []; for (let i = 0; i < children.length; i++) { if (includeChildInRowIndexRange(children[i], range)) { return true; } } return false; }; if (rowCount) { const range = [start, start + rowCount - 1]; nodes.forEach((node) => { if (node.relatedNode && !includeChildInRowIndexRange(node.relatedNode, range)) { return; } const newNode = node.clone(); newNode.isFrozenHead = true; clipFrozenRowHeadNode(newNode, facet.frozenGroupAreas[common_1.FrozenGroupArea.Row]); extraNodes.push(newNode); }); } if (trailingRowCount) { const range = [end - trailingRowCount + 1, end]; nodes.forEach((node) => { if (node.relatedNode && !includeChildInRowIndexRange(node.relatedNode, range)) { return; } const newNode = node.clone(); newNode.isFrozenTrailing = true; clipFrozenTrailingRowHeadNode(newNode, facet.frozenGroupAreas[common_1.FrozenGroupArea.TrailingRow]); extraNodes.push(newNode); }); } return extraNodes; }; exports.getExtraFrozenSeriesNodes = getExtraFrozenSeriesNodes; const getExtraFrozenColNodes = (facet) => { const extraNodes = []; const { colCount, trailingColCount } = facet.getFrozenOptions(); if (colCount) { const { x, width } = facet.frozenGroupAreas[common_1.FrozenGroupArea.Col]; const frozenLeafNodes = facet.getColLeafNodesByRange(0, colCount - 1); frozenLeafNodes.forEach((leafNode) => { const newLeafNode = leafNode.clone(); newLeafNode.isFrozenHead = true; extraNodes.push(newLeafNode); }); const parents = getAllParents(frozenLeafNodes); parents.forEach((parent) => { const newParent = parent.clone(); newParent.isFrozenHead = true; if (newParent.x < x) { newParent.width -= x - newParent.x; newParent.x = x; } if (newParent.x + newParent.width > x + width) { newParent.width -= newParent.x + newParent.width - x - width; } extraNodes.push(newParent); }); } if (trailingColCount) { const { x, width } = facet.frozenGroupAreas[common_1.FrozenGroupArea.TrailingCol]; const total = facet.getColLeafNodes().length; const frozenLeafNodes = facet.getColLeafNodesByRange(total - trailingColCount, total - 1); frozenLeafNodes.forEach((leafNode) => { const newLeafNode = leafNode.clone(); newLeafNode.isFrozenTrailing = true; extraNodes.push(newLeafNode); }); const parents = getAllParents(frozenLeafNodes); parents.forEach((parent) => { const newParent = parent.clone(); newParent.isFrozenTrailing = true; if (newParent.x + newParent.width > x + width) { newParent.width -= newParent.x + newParent.width - x - width; } if (newParent.x < x) { newParent.width -= x - newParent.x; newParent.x = x; } extraNodes.push(newParent); }); } return extraNodes; }; exports.getExtraFrozenColNodes = getExtraFrozenColNodes; const getFrozenColOffset = (facet, cornerWidth = 0, scrollX = 0) => { const isFrozenRowHeader = facet.spreadsheet.isFrozenRowHeader(); if (isFrozenRowHeader) { return 0; } return scrollX <= cornerWidth ? scrollX : cornerWidth; }; exports.getFrozenColOffset = getFrozenColOffset; const getFrozenTrailingColOffset = (facet, viewportWidth) => { const trailingCol = facet.frozenGroupAreas[common_1.FrozenGroupArea.TrailingCol]; const trailingColWidth = trailingCol.x + trailingCol.width; const trailingColOffset = viewportWidth > trailingColWidth ? 0 : trailingColWidth - viewportWidth; return trailingColOffset; }; exports.getFrozenTrailingColOffset = getFrozenTrailingColOffset; const getFrozenTrailingRowOffset = (facet, viewportHeight, paginationScrollY) => { const trailingRow = facet.frozenGroupAreas[common_1.FrozenGroupArea.TrailingRow]; const trailingRowHeight = trailingRow.y + trailingRow.height - paginationScrollY; const trailingRowOffset = viewportHeight > trailingRowHeight ? paginationScrollY : paginationScrollY + trailingRowHeight - viewportHeight; return trailingRowOffset; }; exports.getFrozenTrailingRowOffset = getFrozenTrailingRowOffset; const getScrollGroupClip = (facet, position) => { const isFrozenRowHeader = facet.spreadsheet.isFrozenRowHeader(); const frozenGroupAreas = facet.frozenGroupAreas; const frozenColGroupWidth = frozenGroupAreas[common_1.FrozenGroupArea.Col].width; const frozenTrailingColGroupWidth = frozenGroupAreas[common_1.FrozenGroupArea.TrailingCol].width; let x; if (isFrozenRowHeader) { x = position.x + frozenColGroupWidth; } else if (frozenColGroupWidth) { x = frame_1.Frame.getVerticalBorderWidth(facet.spreadsheet) + frozenColGroupWidth; } else { x = 0; } const viewportWidth = facet.panelBBox.viewportWidth; return { x, width: (isFrozenRowHeader ? viewportWidth : position.x + viewportWidth) - frozenColGroupWidth - frozenTrailingColGroupWidth, }; }; exports.getScrollGroupClip = getScrollGroupClip; //# sourceMappingURL=util.js.map