8
8
9
9
import { DataSource } from '@angular/cdk/table' ;
10
10
import { BehaviorSubject } from 'rxjs/BehaviorSubject' ;
11
- import { MatPaginator } from '@angular/material/paginator' ;
12
- import { MatSort } from '@angular/material/sort' ;
11
+ import { MatPaginator , PageEvent } from '@angular/material/paginator' ;
12
+ import { MatSort , Sort } from '@angular/material/sort' ;
13
13
import { Subscription } from 'rxjs/Subscription' ;
14
- import { combineLatest } from 'rxjs/operators/combineLatest ' ;
14
+ import { Observable } from 'rxjs/Observable ' ;
15
15
import { map } from 'rxjs/operators/map' ;
16
16
import { startWith } from 'rxjs/operators/startWith' ;
17
+ import { combineLatest } from 'rxjs/observable/combineLatest' ;
17
18
import { empty } from 'rxjs/observable/empty' ;
18
19
import { _isNumberValue } from '@angular/cdk/coercion' ;
19
20
@@ -178,26 +179,25 @@ export class MatTableDataSource<T> extends DataSource<T> {
178
179
_updateChangeSubscription ( ) {
179
180
// Sorting and/or pagination should be watched if MatSort and/or MatPaginator are provided.
180
181
// Otherwise, use an empty observable stream to take their place.
181
- const sortChange = this . _sort ? this . _sort . sortChange : empty ( ) ;
182
- const pageChange = this . _paginator ? this . _paginator . page : empty ( ) ;
182
+ const sortChange : Observable < Sort > = this . _sort ? this . _sort . sortChange : empty ( ) ;
183
+ const pageChange : Observable < PageEvent > = this . _paginator ? this . _paginator . page : empty ( ) ;
183
184
184
185
if ( this . _renderChangesSubscription ) {
185
186
this . _renderChangesSubscription . unsubscribe ( ) ;
186
187
}
187
188
189
+ const dataStream = this . _data ;
188
190
// Watch for base data or filter changes to provide a filtered set of data.
189
- this . _renderChangesSubscription = this . _data . pipe (
190
- combineLatest ( this . _filter ) ,
191
- map ( ( [ data ] ) => this . _filterData ( data ) ) ,
192
- // Watch for filtered data or sort changes to provide an ordered set of data.
193
- combineLatest ( sortChange . pipe ( startWith ( null ! ) ) ) ,
194
- map ( ( [ data ] ) => this . _orderData ( data ) ) ,
195
- // Watch for ordered data or page changes to provide a paged set of data.
196
- combineLatest ( pageChange . pipe ( startWith ( null ! ) ) ) ,
197
- map ( ( [ data ] ) => this . _pageData ( data ) )
198
- )
191
+ const filteredData = combineLatest ( dataStream , this . _filter )
192
+ . pipe ( map ( ( [ data ] ) => this . _filterData ( data ) ) ) ;
193
+ // Watch for filtered data or sort changes to provide an ordered set of data.
194
+ const orderedData = combineLatest ( filteredData , sortChange . pipe ( startWith ( null ! ) ) )
195
+ . pipe ( map ( ( [ data ] ) => this . _orderData ( data ) ) ) ;
196
+ // Watch for ordered data or page changes to provide a paged set of data.
197
+ const paginatedData = combineLatest ( orderedData , pageChange . pipe ( startWith ( null ! ) ) )
198
+ . pipe ( map ( ( [ data ] ) => this . _pageData ( data ) ) ) ;
199
199
// Watched for paged data changes and send the result to the table to render.
200
- . subscribe ( data => this . _renderData . next ( data ) ) ;
200
+ paginatedData . subscribe ( data => this . _renderData . next ( data ) ) ;
201
201
}
202
202
203
203
/**
@@ -270,4 +270,4 @@ export class MatTableDataSource<T> extends DataSource<T> {
270
270
* @docs -private
271
271
*/
272
272
disconnect ( ) { }
273
- }
273
+ }
0 commit comments