Skip to content

Commit 2693a46

Browse files
committed
fix(material/tree): not rendering initial data from flat data source
The `MatTreeFlatDataSource` has an `initialData` parameter which doesn't work, because it only assigns the data to one of the three streams used to render the tree. These changes also make some underscored properties private. Fixes #22282.
1 parent ad24865 commit 2693a46

File tree

4 files changed

+12
-18
lines changed

4 files changed

+12
-18
lines changed

src/material/tree/data-source/flat-data-source.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -127,11 +127,10 @@ export class MatTreeFlattener<T, F, K = F> {
127127
* to type `F` for `MatTree` to consume.
128128
*/
129129
export class MatTreeFlatDataSource<T, F, K = F> extends DataSource<F> {
130-
_flattenedData = new BehaviorSubject<F[]>([]);
130+
private _flattenedData = new BehaviorSubject<F[]>([]);
131+
private _expandedData = new BehaviorSubject<F[]>([]);
132+
private _data = new BehaviorSubject<T[]>([]);
131133

132-
_expandedData = new BehaviorSubject<F[]>([]);
133-
134-
_data: BehaviorSubject<T[]>;
135134
get data() { return this._data.value; }
136135
set data(value: T[]) {
137136
this._data.next(value);
@@ -141,18 +140,21 @@ export class MatTreeFlatDataSource<T, F, K = F> extends DataSource<F> {
141140

142141
constructor(private _treeControl: FlatTreeControl<F, K>,
143142
private _treeFlattener: MatTreeFlattener<T, F, K>,
144-
initialData: T[] = []) {
143+
initialData?: T[]) {
145144
super();
146-
this._data = new BehaviorSubject<T[]>(initialData);
145+
146+
if (initialData) {
147+
// Assign the data through the constructor to ensure that all of the logic is executed.
148+
this.data = initialData;
149+
}
147150
}
148151

149152
connect(collectionViewer: CollectionViewer): Observable<F[]> {
150-
const changes = [
153+
return merge(
151154
collectionViewer.viewChange,
152155
this._treeControl.expansionModel.changed,
153156
this._flattenedData
154-
];
155-
return merge(...changes).pipe(map(() => {
157+
).pipe(map(() => {
156158
this._expandedData.next(
157159
this._treeFlattener.expandFlattenedNodes(this._flattenedData.value, this._treeControl));
158160
return this._expandedData.value;

src/material/tree/data-source/nested-data-source.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import {map} from 'rxjs/operators';
1818
* or collapse. The expansion/collapsion will be handled by TreeControl and each non-leaf node.
1919
*/
2020
export class MatTreeNestedDataSource<T> extends DataSource<T> {
21-
_data = new BehaviorSubject<T[]>([]);
21+
private _data = new BehaviorSubject<T[]>([]);
2222

2323
/**
2424
* Data for the nested tree

src/material/tree/tree.spec.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -785,10 +785,6 @@ class MatTreeWithNullOrUndefinedChild {
785785

786786
dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener, TREE_DATA);
787787

788-
constructor() {
789-
this.dataSource.data = TREE_DATA;
790-
}
791-
792788
hasChild = (_: number, node: ExampleFlatNode) => node.expandable;
793789
}
794790

tools/public_api_guard/material/tree.d.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@ export declare class MatTree<T, K = T> extends CdkTree<T, K> {
2424
}
2525

2626
export declare class MatTreeFlatDataSource<T, F, K = F> extends DataSource<F> {
27-
_data: BehaviorSubject<T[]>;
28-
_expandedData: BehaviorSubject<F[]>;
29-
_flattenedData: BehaviorSubject<F[]>;
3027
get data(): T[];
3128
set data(value: T[]);
3229
constructor(_treeControl: FlatTreeControl<F, K>, _treeFlattener: MatTreeFlattener<T, F, K>, initialData?: T[]);
@@ -53,7 +50,6 @@ export declare class MatTreeModule {
5350
}
5451

5552
export declare class MatTreeNestedDataSource<T> extends DataSource<T> {
56-
_data: BehaviorSubject<T[]>;
5753
get data(): T[];
5854
set data(value: T[]);
5955
connect(collectionViewer: CollectionViewer): Observable<T[]>;

0 commit comments

Comments
 (0)