* Measures the size of the rendered range in the table. * This is used for virtual scrolling when auto-sizing is enabled.
(range: ListRange, orientation: 'horizontal' | 'vertical')
| 1608 | * This is used for virtual scrolling when auto-sizing is enabled. |
| 1609 | */ |
| 1610 | private _measureRangeSize(range: ListRange, orientation: 'horizontal' | 'vertical'): number { |
| 1611 | if (range.start >= range.end || orientation !== 'vertical') { |
| 1612 | return 0; |
| 1613 | } |
| 1614 | |
| 1615 | const renderedRange = this.viewChange.value; |
| 1616 | const viewContainerRef = this._rowOutlet.viewContainer; |
| 1617 | |
| 1618 | if ( |
| 1619 | (range.start < renderedRange.start || range.end > renderedRange.end) && |
| 1620 | (typeof ngDevMode === 'undefined' || ngDevMode) |
| 1621 | ) { |
| 1622 | throw Error(`Error: attempted to measure an item that isn't rendered.`); |
| 1623 | } |
| 1624 | |
| 1625 | const renderedStartIndex = range.start - renderedRange.start; |
| 1626 | const rangeLen = range.end - range.start; |
| 1627 | let firstNode: HTMLElement | undefined; |
| 1628 | let lastNode: HTMLElement | undefined; |
| 1629 | |
| 1630 | for (let i = 0; i < rangeLen; i++) { |
| 1631 | const view = viewContainerRef.get(i + renderedStartIndex) as EmbeddedViewRef<unknown> | null; |
| 1632 | if (view && view.rootNodes.length) { |
| 1633 | firstNode = lastNode = view.rootNodes[0]; |
| 1634 | break; |
| 1635 | } |
| 1636 | } |
| 1637 | |
| 1638 | for (let i = rangeLen - 1; i > -1; i--) { |
| 1639 | const view = viewContainerRef.get(i + renderedStartIndex) as EmbeddedViewRef<unknown> | null; |
| 1640 | if (view && view.rootNodes.length) { |
| 1641 | lastNode = view.rootNodes[view.rootNodes.length - 1]; |
| 1642 | break; |
| 1643 | } |
| 1644 | } |
| 1645 | |
| 1646 | const startRect = firstNode?.getBoundingClientRect?.(); |
| 1647 | const endRect = lastNode?.getBoundingClientRect?.(); |
| 1648 | return startRect && endRect ? endRect.bottom - startRect.top : 0; |
| 1649 | } |
| 1650 | |
| 1651 | private _virtualScrollEnabled(): boolean { |
| 1652 | return !this._disableVirtualScrolling && this._virtualScrollViewport != null; |
no test coverage detected