MCPcopy Create free account
hub / github.com/angular/components / _measureRangeSize

Method _measureRangeSize

src/cdk/table/table.ts:1610–1649  ·  view source on GitHub ↗

* 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')

Source from the content-addressed store, hash-verified

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;

Callers 1

Calls 2

getBoundingClientRectMethod · 0.80
getMethod · 0.65

Tested by

no test coverage detected