Skip to content

Commit fa7ed4c

Browse files
authored
fix(material/tree): not rendering initial data from flat data source (#22340)
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 0f739db commit fa7ed4c

File tree

4 files changed

+12
-19
lines changed

4 files changed

+12
-19
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,32 +127,34 @@ 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-
readonly _flattenedData = new BehaviorSubject<F[]>([]);
130+
private readonly _flattenedData = new BehaviorSubject<F[]>([]);
131+
private readonly _expandedData = new BehaviorSubject<F[]>([]);
131132

132-
readonly _expandedData = new BehaviorSubject<F[]>([]);
133-
134-
readonly _data: BehaviorSubject<T[]>;
135133
get data() { return this._data.value; }
136134
set data(value: T[]) {
137135
this._data.next(value);
138136
this._flattenedData.next(this._treeFlattener.flattenNodes(this.data));
139137
this._treeControl.dataNodes = this._flattenedData.value;
140138
}
139+
private readonly _data = new BehaviorSubject<T[]>([]);
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 & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,12 @@ 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-
readonly _data = new BehaviorSubject<T[]>([]);
22-
2321
/**
2422
* Data for the nested tree
2523
*/
2624
get data() { return this._data.value; }
2725
set data(value: T[]) { this._data.next(value); }
26+
private readonly _data = new BehaviorSubject<T[]>([]);
2827

2928
connect(collectionViewer: CollectionViewer): Observable<T[]> {
3029
return merge(...[collectionViewer.viewChange, this._data])

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-
readonly _data: BehaviorSubject<T[]>;
28-
readonly _expandedData: BehaviorSubject<F[]>;
29-
readonly _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-
readonly _data: BehaviorSubject<T[]>;
5753
get data(): T[];
5854
set data(value: T[]);
5955
connect(collectionViewer: CollectionViewer): Observable<T[]>;

0 commit comments

Comments
 (0)