Skip to content

Commit d80ec1b

Browse files
committed
refactor(cdk/scrolling): expose rendered content offset stream
Exposes the `renderedContentOffset` stream on the virtual scroll viewport since it can be useful for users outside of the CDK table.
1 parent d1cae93 commit d80ec1b

File tree

2 files changed

+11
-14
lines changed

2 files changed

+11
-14
lines changed

goldens/cdk/scrolling/index.api.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ export class CdkVirtualScrollViewport extends CdkVirtualScrollable implements On
199199
ngOnInit(): void;
200200
get orientation(): "horizontal" | "vertical";
201201
set orientation(orientation: 'horizontal' | 'vertical');
202+
readonly renderedContentOffset: Observable<number>;
202203
readonly renderedRangeStream: Observable<ListRange>;
203204
// (undocumented)
204205
scrollable: CdkVirtualScrollable;

src/cdk/scrolling/virtual-scroll-viewport.ts

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ import {
3535
asapScheduler,
3636
Observable,
3737
Observer,
38-
OperatorFunction,
3938
Subject,
4039
Subscription,
4140
} from 'rxjs';
@@ -103,15 +102,7 @@ export class CdkVirtualScrollViewport extends CdkVirtualScrollable implements On
103102

104103
/** Emits when the rendered range changes. */
105104
private readonly _renderedRangeSubject = new Subject<ListRange>();
106-
107-
/**
108-
* Emits the offset from the start of the viewport to the start of the rendered data (in pixels).
109-
*/
110-
private readonly _renderedContentOffsetRenderedSubject = new Subject<number | null>();
111-
readonly _renderedContentOffsetRendered = this._renderedContentOffsetRenderedSubject.pipe(
112-
filter(offset => offset !== null) as OperatorFunction<number | null, number>,
113-
distinctUntilChanged(),
114-
);
105+
private readonly _renderedContentOffsetSubject = new Subject<number | null>();
115106

116107
/** The direction the viewport scrolls. */
117108
@Input()
@@ -151,6 +142,14 @@ export class CdkVirtualScrollViewport extends CdkVirtualScrollable implements On
151142
/** A stream that emits whenever the rendered range changes. */
152143
readonly renderedRangeStream: Observable<ListRange> = this._renderedRangeSubject;
153144

145+
/**
146+
* Emits the offset from the start of the viewport to the start of the rendered data (in pixels).
147+
*/
148+
readonly renderedContentOffset: Observable<number> = this._renderedContentOffsetSubject.pipe(
149+
filter(offset => offset !== null),
150+
distinctUntilChanged(),
151+
);
152+
154153
/**
155154
* The total size of all content (in pixels), including content that is not currently rendered.
156155
*/
@@ -547,10 +546,7 @@ export class CdkVirtualScrollViewport extends CdkVirtualScrollable implements On
547546
// string literals, a variable that can only be 'X' or 'Y', and user input that is run through
548547
// the `Number` function first to coerce it to a numeric value.
549548
this._contentWrapper.nativeElement.style.transform = this._renderedContentTransform;
550-
551-
// Emit the offset to rendered content start when it is in sync with what is rendered in the
552-
// DOM.
553-
this._renderedContentOffsetRenderedSubject.next(this.getOffsetToRenderedContentStart());
549+
this._renderedContentOffsetSubject.next(this.getOffsetToRenderedContentStart());
554550

555551
afterNextRender(
556552
() => {

0 commit comments

Comments
 (0)