Skip to content

Commit 5a98cc6

Browse files
authored
docs(cdk/tree): examples not working when forked to Stackblitz (#30601)
The tree examples were breaking down when forked to Stackblitz, because of a couple of reasons: 1. They had their sample data in a separate file which the build process wasn't picking up. 2. They had compilation errors only with rxjs 7+ which we didn't notice, because our local setup is on rxjs 6. I also went through all the examples and moved the sample data further down so it doesn't distract from the actual code. Fixes #30600.
1 parent da371e9 commit 5a98cc6

20 files changed

+514
-515
lines changed

src/components-examples/cdk/tree/cdk-tree-complex/cdk-tree-complex-example.ts

+38-38
Original file line numberDiff line numberDiff line change
@@ -14,40 +14,6 @@ interface BackendData {
1414
children?: string[];
1515
}
1616

17-
const TREE_DATA: Map<string, BackendData> = new Map(
18-
[
19-
{
20-
id: '1',
21-
name: 'Fruit',
22-
children: ['1-1', '1-2', '1-3'],
23-
},
24-
{id: '1-1', name: 'Apple', parent: '1'},
25-
{id: '1-2', name: 'Banana', parent: '1'},
26-
{id: '1-3', name: 'Fruit Loops', parent: '1'},
27-
{
28-
id: '2',
29-
name: 'Vegetables',
30-
children: ['2-1', '2-2'],
31-
},
32-
{
33-
id: '2-1',
34-
name: 'Green',
35-
parent: '2',
36-
children: ['2-1-1', '2-1-2'],
37-
},
38-
{
39-
id: '2-2',
40-
name: 'Orange',
41-
parent: '2',
42-
children: ['2-2-1', '2-2-2'],
43-
},
44-
{id: '2-1-1', name: 'Broccoli', parent: '2-1'},
45-
{id: '2-1-2', name: 'Brussel sprouts', parent: '2-1'},
46-
{id: '2-2-1', name: 'Pumpkins', parent: '2-2'},
47-
{id: '2-2-2', name: 'Carrots', parent: '2-2'},
48-
].map(datum => [datum.id, datum]),
49-
);
50-
5117
class FakeDataBackend {
5218
private _getRandomDelayTime() {
5319
// anywhere from 100 to 500ms.
@@ -56,16 +22,16 @@ class FakeDataBackend {
5622

5723
getChildren(id: string): Observable<BackendData[]> {
5824
// first, find the specified ID in our tree
59-
const item = TREE_DATA.get(id);
25+
const item = EXAMPLE_DATA.get(id);
6026
const children = item?.children ?? [];
6127

62-
return observableOf(children.map(childId => TREE_DATA.get(childId)!)).pipe(
28+
return observableOf(children.map(childId => EXAMPLE_DATA.get(childId)!)).pipe(
6329
delay(this._getRandomDelayTime()),
6430
);
6531
}
6632

6733
getRoots(): Observable<BackendData[]> {
68-
return observableOf([...TREE_DATA.values()].filter(datum => !datum.parent)).pipe(
34+
return observableOf([...EXAMPLE_DATA.values()].filter(datum => !datum.parent)).pipe(
6935
delay(this._getRandomDelayTime()),
7036
);
7137
}
@@ -268,7 +234,7 @@ class ComplexDataStore {
268234
const transformFn = sourcesAndTransform[sourcesAndTransform.length - 1] as TransformFn<T, U>;
269235

270236
return combineLatest([...sources, this._state]).pipe(
271-
map(args => transformFn(...(args as [...ObservedValuesOf<T>, State]))),
237+
map(args => transformFn(...(args as unknown as [...ObservedValuesOf<T>, State]))),
272238
shareReplay({refCount: true, bufferSize: 1}),
273239
);
274240
}
@@ -305,3 +271,37 @@ export class CdkTreeComplexExample implements OnInit {
305271
}
306272
}
307273
}
274+
275+
const EXAMPLE_DATA = new Map<string, BackendData>(
276+
[
277+
{
278+
id: '1',
279+
name: 'Fruit',
280+
children: ['1-1', '1-2', '1-3'],
281+
},
282+
{id: '1-1', name: 'Apple', parent: '1'},
283+
{id: '1-2', name: 'Banana', parent: '1'},
284+
{id: '1-3', name: 'Fruit Loops', parent: '1'},
285+
{
286+
id: '2',
287+
name: 'Vegetables',
288+
children: ['2-1', '2-2'],
289+
},
290+
{
291+
id: '2-1',
292+
name: 'Green',
293+
parent: '2',
294+
children: ['2-1-1', '2-1-2'],
295+
},
296+
{
297+
id: '2-2',
298+
name: 'Orange',
299+
parent: '2',
300+
children: ['2-2-1', '2-2-2'],
301+
},
302+
{id: '2-1-1', name: 'Broccoli', parent: '2-1'},
303+
{id: '2-1-2', name: 'Brussel sprouts', parent: '2-1'},
304+
{id: '2-2-1', name: 'Pumpkins', parent: '2-2'},
305+
{id: '2-2-2', name: 'Carrots', parent: '2-2'},
306+
].map(datum => [datum.id, datum]),
307+
);

src/components-examples/cdk/tree/cdk-tree-custom-key-manager/cdk-tree-custom-key-manager-example.ts

+62-62
Original file line numberDiff line numberDiff line change
@@ -28,64 +28,6 @@ import {
2828
import {Subject, isObservable, Observable} from 'rxjs';
2929
import {take} from 'rxjs/operators';
3030

31-
const TREE_DATA: ExampleFlatNode[] = [
32-
{
33-
name: 'Fruit',
34-
expandable: true,
35-
level: 0,
36-
},
37-
{
38-
name: 'Apple',
39-
expandable: false,
40-
level: 1,
41-
},
42-
{
43-
name: 'Banana',
44-
expandable: false,
45-
level: 1,
46-
},
47-
{
48-
name: 'Fruit loops',
49-
expandable: false,
50-
level: 1,
51-
},
52-
{
53-
name: 'Vegetables',
54-
expandable: true,
55-
level: 0,
56-
},
57-
{
58-
name: 'Green',
59-
expandable: true,
60-
level: 1,
61-
},
62-
{
63-
name: 'Broccoli',
64-
expandable: false,
65-
level: 2,
66-
},
67-
{
68-
name: 'Brussels sprouts',
69-
expandable: false,
70-
level: 2,
71-
},
72-
{
73-
name: 'Orange',
74-
expandable: true,
75-
level: 1,
76-
},
77-
{
78-
name: 'Pumpkins',
79-
expandable: false,
80-
level: 2,
81-
},
82-
{
83-
name: 'Carrots',
84-
expandable: false,
85-
level: 2,
86-
},
87-
];
88-
8931
/** Flat node with expandable and level information */
9032
interface ExampleFlatNode {
9133
expandable: boolean;
@@ -379,16 +321,16 @@ export class CdkTreeCustomKeyManagerExample {
379321
node => node.expandable,
380322
);
381323

382-
dataSource = new ArrayDataSource(TREE_DATA);
324+
dataSource = new ArrayDataSource(EXAMPLE_DATA);
383325

384326
hasChild = (_: number, node: ExampleFlatNode) => node.expandable;
385327

386328
getParentNode(node: ExampleFlatNode) {
387-
const nodeIndex = TREE_DATA.indexOf(node);
329+
const nodeIndex = EXAMPLE_DATA.indexOf(node);
388330

389331
for (let i = nodeIndex - 1; i >= 0; i--) {
390-
if (TREE_DATA[i].level === node.level - 1) {
391-
return TREE_DATA[i];
332+
if (EXAMPLE_DATA[i].level === node.level - 1) {
333+
return EXAMPLE_DATA[i];
392334
}
393335
}
394336

@@ -406,3 +348,61 @@ export class CdkTreeCustomKeyManagerExample {
406348
return true;
407349
}
408350
}
351+
352+
const EXAMPLE_DATA: ExampleFlatNode[] = [
353+
{
354+
name: 'Fruit',
355+
expandable: true,
356+
level: 0,
357+
},
358+
{
359+
name: 'Apple',
360+
expandable: false,
361+
level: 1,
362+
},
363+
{
364+
name: 'Banana',
365+
expandable: false,
366+
level: 1,
367+
},
368+
{
369+
name: 'Fruit loops',
370+
expandable: false,
371+
level: 1,
372+
},
373+
{
374+
name: 'Vegetables',
375+
expandable: true,
376+
level: 0,
377+
},
378+
{
379+
name: 'Green',
380+
expandable: true,
381+
level: 1,
382+
},
383+
{
384+
name: 'Broccoli',
385+
expandable: false,
386+
level: 2,
387+
},
388+
{
389+
name: 'Brussels sprouts',
390+
expandable: false,
391+
level: 2,
392+
},
393+
{
394+
name: 'Orange',
395+
expandable: true,
396+
level: 1,
397+
},
398+
{
399+
name: 'Pumpkins',
400+
expandable: false,
401+
level: 2,
402+
},
403+
{
404+
name: 'Carrots',
405+
expandable: false,
406+
level: 2,
407+
},
408+
];

src/components-examples/cdk/tree/cdk-tree-flat-children-accessor/cdk-tree-flat-children-accessor-example-data.ts

-28
This file was deleted.

src/components-examples/cdk/tree/cdk-tree-flat-children-accessor/cdk-tree-flat-children-accessor-example.ts

+31-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,15 @@ import {MatButtonModule} from '@angular/material/button';
55
import {MatIconModule} from '@angular/material/icon';
66
import {timer} from 'rxjs';
77
import {mapTo} from 'rxjs/operators';
8-
import {NestedFoodNode, NESTED_DATA} from './cdk-tree-flat-children-accessor-example-data';
8+
9+
/**
10+
* Food data with nested structure.
11+
* Each node has a name and an optional list of children.
12+
*/
13+
interface NestedFoodNode {
14+
name: string;
15+
children?: NestedFoodNode[];
16+
}
917

1018
function flattenNodes(nodes: NestedFoodNode[]): NestedFoodNode[] {
1119
const flattenedNodes = [];
@@ -34,12 +42,12 @@ export class CdkTreeFlatChildrenAccessorExample {
3442

3543
childrenAccessor = (dataNode: NestedFoodNode) => timer(100).pipe(mapTo(dataNode.children ?? []));
3644

37-
dataSource = new ArrayDataSource(NESTED_DATA);
45+
dataSource = new ArrayDataSource(EXAMPLE_DATA);
3846

3947
hasChild = (_: number, node: NestedFoodNode) => !!node.children?.length;
4048

4149
getParentNode(node: NestedFoodNode) {
42-
for (const parent of flattenNodes(NESTED_DATA)) {
50+
for (const parent of flattenNodes(EXAMPLE_DATA)) {
4351
if (parent.children?.includes(node)) {
4452
return parent;
4553
}
@@ -59,3 +67,23 @@ export class CdkTreeFlatChildrenAccessorExample {
5967
return true;
6068
}
6169
}
70+
71+
const EXAMPLE_DATA: NestedFoodNode[] = [
72+
{
73+
name: 'Fruit',
74+
children: [{name: 'Apple'}, {name: 'Banana'}, {name: 'Fruit loops'}],
75+
},
76+
{
77+
name: 'Vegetables',
78+
children: [
79+
{
80+
name: 'Green',
81+
children: [{name: 'Broccoli'}, {name: 'Brussels sprouts'}],
82+
},
83+
{
84+
name: 'Orange',
85+
children: [{name: 'Pumpkins'}, {name: 'Carrots'}],
86+
},
87+
],
88+
},
89+
];

0 commit comments

Comments
 (0)