From f326ec68719b466a2a8cb4fb09d65a240cf5b371 Mon Sep 17 00:00:00 2001 From: LAYET Benjamin Date: Tue, 27 Nov 2018 15:09:20 +0100 Subject: [PATCH] adds virtual scroll adapater --- src/cdk/scrolling/public-api.ts | 1 + src/cdk/scrolling/virtual-for-of.ts | 4 +++- src/cdk/scrolling/virtual-scroll-adapter.ts | 15 +++++++++++++++ src/cdk/scrolling/virtual-scroll-viewport.ts | 6 +++--- 4 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 src/cdk/scrolling/virtual-scroll-adapter.ts diff --git a/src/cdk/scrolling/public-api.ts b/src/cdk/scrolling/public-api.ts index 2c1cf815d1a0..d9a4d00cb985 100644 --- a/src/cdk/scrolling/public-api.ts +++ b/src/cdk/scrolling/public-api.ts @@ -14,3 +14,4 @@ export * from './viewport-ruler'; export * from './virtual-for-of'; export * from './virtual-scroll-strategy'; export * from './virtual-scroll-viewport'; +export * from './virtual-scroll-adapter'; \ No newline at end of file diff --git a/src/cdk/scrolling/virtual-for-of.ts b/src/cdk/scrolling/virtual-for-of.ts index 82c00a8bb3a3..cbbd0c9d5820 100644 --- a/src/cdk/scrolling/virtual-for-of.ts +++ b/src/cdk/scrolling/virtual-for-of.ts @@ -27,6 +27,7 @@ import { import {Observable, Subject} from 'rxjs'; import {pairwise, shareReplay, startWith, switchMap, takeUntil} from 'rxjs/operators'; import {CdkVirtualScrollViewport} from './virtual-scroll-viewport'; +import {CdkVirtualScrollAdapter} from './virtual-scroll-adapter'; /** The context for an item rendered by `CdkVirtualForOf` */ @@ -68,7 +69,8 @@ function getSize(orientation: 'horizontal' | 'vertical', node: Node): number { @Directive({ selector: '[cdkVirtualFor][cdkVirtualForOf]', }) -export class CdkVirtualForOf implements CollectionViewer, DoCheck, OnDestroy { +export class CdkVirtualForOf implements + CdkVirtualScrollAdapter, CollectionViewer, DoCheck, OnDestroy { /** Emits when the rendered view of the data changes. */ viewChange = new Subject(); diff --git a/src/cdk/scrolling/virtual-scroll-adapter.ts b/src/cdk/scrolling/virtual-scroll-adapter.ts new file mode 100644 index 000000000000..362453db228f --- /dev/null +++ b/src/cdk/scrolling/virtual-scroll-adapter.ts @@ -0,0 +1,15 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import {Observable} from 'rxjs'; +import {ListRange} from '../collections'; + +export interface CdkVirtualScrollAdapter { + dataStream: Observable>; + measureRangeSize(range: ListRange, orientation: 'horizontal' | 'vertical'): number; +} diff --git a/src/cdk/scrolling/virtual-scroll-viewport.ts b/src/cdk/scrolling/virtual-scroll-viewport.ts index d2c04c9c3b17..8c235a684806 100644 --- a/src/cdk/scrolling/virtual-scroll-viewport.ts +++ b/src/cdk/scrolling/virtual-scroll-viewport.ts @@ -27,8 +27,8 @@ import {animationFrameScheduler, Observable, Subject, Observer} from 'rxjs'; import {auditTime, startWith, takeUntil} from 'rxjs/operators'; import {ScrollDispatcher} from './scroll-dispatcher'; import {CdkScrollable, ExtendedScrollToOptions} from './scrollable'; -import {CdkVirtualForOf} from './virtual-for-of'; import {VIRTUAL_SCROLL_STRATEGY, VirtualScrollStrategy} from './virtual-scroll-strategy'; +import {CdkVirtualScrollAdapter} from './virtual-scroll-adapter'; /** Checks if the given ranges are equal. */ @@ -104,7 +104,7 @@ export class CdkVirtualScrollViewport extends CdkScrollable implements OnInit, O private _viewportSize = 0; /** the currently attached CdkVirtualForOf. */ - private _forOf: CdkVirtualForOf | null; + private _forOf: CdkVirtualScrollAdapter | null; /** The last rendered content offset that was set. */ private _renderedContentOffset = 0; @@ -172,7 +172,7 @@ export class CdkVirtualScrollViewport extends CdkScrollable implements OnInit, O } /** Attaches a `CdkVirtualForOf` to this viewport. */ - attach(forOf: CdkVirtualForOf) { + attach(forOf: CdkVirtualScrollAdapter) { if (this._forOf) { throw Error('CdkVirtualScrollViewport is already attached.'); }