Skip to content

Commit ee5cf49

Browse files
authored
fix(material/table): Make table data source interface generic (#22673)
* fix(material/table): Make table data source interface generic * fix(material/table): golden api * fix(material/table): re-export interface
1 parent c46c49c commit ee5cf49

File tree

4 files changed

+43
-10
lines changed

4 files changed

+43
-10
lines changed

src/material-experimental/mdc-table/public-api.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,5 @@ export * from './cell';
1212
export * from './row';
1313
export * from './table-data-source';
1414
export * from './text-column';
15+
16+
export {MatTableDataSourcePageEvent, MatTableDataSourcePaginator} from '@angular/material/table';

src/material-experimental/mdc-table/table-data-source.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {MatPaginator} from '@angular/material-experimental/mdc-paginator';
10-
import {_MatTableDataSource} from '@angular/material/table';
9+
import {_MatTableDataSource, MatTableDataSourcePaginator} from '@angular/material/table';
1110

1211
/**
1312
* Data source that accepts a client-side data array and includes native support of filtering,
@@ -22,4 +21,6 @@ import {_MatTableDataSource} from '@angular/material/table';
2221
* interactions. If your app needs to support more advanced use cases, consider implementing your
2322
* own `DataSource`.
2423
*/
25-
export class MatTableDataSource<T> extends _MatTableDataSource<T, MatPaginator> {}
24+
export class MatTableDataSource<T, P extends MatTableDataSourcePaginator =
25+
MatTableDataSourcePaginator> extends _MatTableDataSource<T, P> {}
26+

src/material/table/table-data-source.ts

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import {_isNumberValue} from '@angular/cdk/coercion';
1010
import {DataSource} from '@angular/cdk/table';
11-
import {MatPaginator, PageEvent} from '@angular/material/paginator';
11+
import {MatPaginator} from '@angular/material/paginator';
1212
import {MatSort, Sort} from '@angular/material/sort';
1313
import {
1414
BehaviorSubject,
@@ -27,16 +27,32 @@ import {map} from 'rxjs/operators';
2727
*/
2828
const MAX_SAFE_INTEGER = 9007199254740991;
2929

30-
interface Paginator {
31-
page: Subject<PageEvent>;
30+
/**
31+
* Interface that matches the required API parts for the MatPaginator's PageEvent.
32+
* Decoupled so that users can depend on either the legacy or MDC-based paginator.
33+
*/
34+
export interface MatTableDataSourcePageEvent {
35+
pageIndex: number;
36+
pageSize: number;
37+
length: number;
38+
}
39+
40+
/**
41+
* Interface that matches the required API parts of the MatPaginator.
42+
* Decoupled so that users can depend on either the legacy or MDC-based paginator.
43+
*/
44+
export interface MatTableDataSourcePaginator {
45+
page: Subject<MatTableDataSourcePageEvent>;
3246
pageIndex: number;
3347
initialized: Observable<void>;
3448
pageSize: number;
3549
length: number;
3650
}
3751

3852
/** Shared base class with MDC-based implementation. */
39-
export class _MatTableDataSource<T, P extends Paginator> extends DataSource<T> {
53+
export class _MatTableDataSource<T,
54+
P extends MatTableDataSourcePaginator = MatTableDataSourcePaginator>
55+
extends DataSource<T> {
4056
/** Stream that emits when a new data array is set on the data source. */
4157
private readonly _data: BehaviorSubject<T[]>;
4258

@@ -240,12 +256,12 @@ export class _MatTableDataSource<T, P extends Paginator> extends DataSource<T> {
240256
const sortChange: Observable<Sort|null|void> = this._sort ?
241257
merge(this._sort.sortChange, this._sort.initialized) as Observable<Sort|void> :
242258
observableOf(null);
243-
const pageChange: Observable<PageEvent|null|void> = this._paginator ?
259+
const pageChange: Observable<MatTableDataSourcePageEvent|null|void> = this._paginator ?
244260
merge(
245261
this._paginator.page,
246262
this._internalPageChanges,
247263
this._paginator.initialized
248-
) as Observable<PageEvent|void> :
264+
) as Observable<MatTableDataSourcePageEvent|void> :
249265
observableOf(null);
250266
const dataStream = this._data;
251267
// Watch for base data or filter changes to provide a filtered set of data.

tools/public_api_guard/material/table.d.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export declare class _MatTableDataSource<T, P extends Paginator> extends DataSource<T> {
1+
export declare class _MatTableDataSource<T, P extends MatTableDataSourcePaginator = MatTableDataSourcePaginator> extends DataSource<T> {
22
_renderChangesSubscription: Subscription | null;
33
get data(): T[];
44
set data(data: T[]);
@@ -113,6 +113,20 @@ export declare class MatTable<T> extends CdkTable<T> {
113113
export declare class MatTableDataSource<T> extends _MatTableDataSource<T, MatPaginator> {
114114
}
115115

116+
export interface MatTableDataSourcePageEvent {
117+
length: number;
118+
pageIndex: number;
119+
pageSize: number;
120+
}
121+
122+
export interface MatTableDataSourcePaginator {
123+
initialized: Observable<void>;
124+
length: number;
125+
page: Subject<MatTableDataSourcePageEvent>;
126+
pageIndex: number;
127+
pageSize: number;
128+
}
129+
116130
export declare class MatTableModule {
117131
static ɵfac: i0.ɵɵFactoryDeclaration<MatTableModule, never>;
118132
static ɵinj: i0.ɵɵInjectorDeclaration<MatTableModule>;

0 commit comments

Comments
 (0)