|
14 | 14 | children?: <span class="hljs-built_in">string</span>[]; |
15 | 15 | } |
16 | 16 |
|
17 | | -<span class="hljs-keyword">const</span> TREE_DATA: <span class="hljs-built_in">Map</span><<span class="hljs-built_in">string</span>, BackendData> = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Map</span>( |
18 | | - [ |
19 | | - { |
20 | | - <span class="hljs-attr">id</span>: <span class="hljs-string">'1'</span>, |
21 | | - <span class="hljs-attr">name</span>: <span class="hljs-string">'Fruit'</span>, |
22 | | - <span class="hljs-attr">children</span>: [<span class="hljs-string">'1-1'</span>, <span class="hljs-string">'1-2'</span>, <span class="hljs-string">'1-3'</span>], |
23 | | - }, |
24 | | - {<span class="hljs-attr">id</span>: <span class="hljs-string">'1-1'</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'Apple'</span>, <span class="hljs-attr">parent</span>: <span class="hljs-string">'1'</span>}, |
25 | | - {<span class="hljs-attr">id</span>: <span class="hljs-string">'1-2'</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'Banana'</span>, <span class="hljs-attr">parent</span>: <span class="hljs-string">'1'</span>}, |
26 | | - {<span class="hljs-attr">id</span>: <span class="hljs-string">'1-3'</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'Fruit Loops'</span>, <span class="hljs-attr">parent</span>: <span class="hljs-string">'1'</span>}, |
27 | | - { |
28 | | - <span class="hljs-attr">id</span>: <span class="hljs-string">'2'</span>, |
29 | | - <span class="hljs-attr">name</span>: <span class="hljs-string">'Vegetables'</span>, |
30 | | - <span class="hljs-attr">children</span>: [<span class="hljs-string">'2-1'</span>, <span class="hljs-string">'2-2'</span>], |
31 | | - }, |
32 | | - { |
33 | | - <span class="hljs-attr">id</span>: <span class="hljs-string">'2-1'</span>, |
34 | | - <span class="hljs-attr">name</span>: <span class="hljs-string">'Green'</span>, |
35 | | - <span class="hljs-attr">parent</span>: <span class="hljs-string">'2'</span>, |
36 | | - <span class="hljs-attr">children</span>: [<span class="hljs-string">'2-1-1'</span>, <span class="hljs-string">'2-1-2'</span>], |
37 | | - }, |
38 | | - { |
39 | | - <span class="hljs-attr">id</span>: <span class="hljs-string">'2-2'</span>, |
40 | | - <span class="hljs-attr">name</span>: <span class="hljs-string">'Orange'</span>, |
41 | | - <span class="hljs-attr">parent</span>: <span class="hljs-string">'2'</span>, |
42 | | - <span class="hljs-attr">children</span>: [<span class="hljs-string">'2-2-1'</span>, <span class="hljs-string">'2-2-2'</span>], |
43 | | - }, |
44 | | - {<span class="hljs-attr">id</span>: <span class="hljs-string">'2-1-1'</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'Broccoli'</span>, <span class="hljs-attr">parent</span>: <span class="hljs-string">'2-1'</span>}, |
45 | | - {<span class="hljs-attr">id</span>: <span class="hljs-string">'2-1-2'</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'Brussel sprouts'</span>, <span class="hljs-attr">parent</span>: <span class="hljs-string">'2-1'</span>}, |
46 | | - {<span class="hljs-attr">id</span>: <span class="hljs-string">'2-2-1'</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'Pumpkins'</span>, <span class="hljs-attr">parent</span>: <span class="hljs-string">'2-2'</span>}, |
47 | | - {<span class="hljs-attr">id</span>: <span class="hljs-string">'2-2-2'</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'Carrots'</span>, <span class="hljs-attr">parent</span>: <span class="hljs-string">'2-2'</span>}, |
48 | | - ].map(<span class="hljs-function"><span class="hljs-params">datum</span> =></span> [datum.id, datum]), |
49 | | -); |
50 | | - |
51 | 17 | <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">FakeDataBackend</span> </span>{ |
52 | 18 | <span class="hljs-keyword">private</span> <span class="hljs-function"><span class="hljs-title">_getRandomDelayTime</span>(<span class="hljs-params"></span>)</span> { |
53 | 19 | <span class="hljs-comment">// anywhere from 100 to 500ms.</span> |
|
56 | 22 |
|
57 | 23 | getChildren(id: <span class="hljs-built_in">string</span>): Observable<BackendData[]> { |
58 | 24 | <span class="hljs-comment">// first, find the specified ID in our tree</span> |
59 | | - <span class="hljs-keyword">const</span> item = TREE_DATA.get(id); |
| 25 | + <span class="hljs-keyword">const</span> item = EXAMPLE_DATA.get(id); |
60 | 26 | <span class="hljs-keyword">const</span> children = item?.children ?? []; |
61 | 27 |
|
62 | | - <span class="hljs-keyword">return</span> observableOf(children.map(<span class="hljs-function"><span class="hljs-params">childId</span> =></span> TREE_DATA.get(childId)!)).pipe( |
| 28 | + <span class="hljs-keyword">return</span> observableOf(children.map(<span class="hljs-function"><span class="hljs-params">childId</span> =></span> EXAMPLE_DATA.get(childId)!)).pipe( |
63 | 29 | delay(<span class="hljs-built_in">this</span>._getRandomDelayTime()), |
64 | 30 | ); |
65 | 31 | } |
66 | 32 |
|
67 | 33 | getRoots(): Observable<BackendData[]> { |
68 | | - <span class="hljs-keyword">return</span> observableOf([...TREE_DATA.values()].filter(<span class="hljs-function"><span class="hljs-params">datum</span> =></span> !datum.parent)).pipe( |
| 34 | + <span class="hljs-keyword">return</span> observableOf([...EXAMPLE_DATA.values()].filter(<span class="hljs-function"><span class="hljs-params">datum</span> =></span> !datum.parent)).pipe( |
69 | 35 | delay(<span class="hljs-built_in">this</span>._getRandomDelayTime()), |
70 | 36 | ); |
71 | 37 | } |
|
268 | 234 | <span class="hljs-keyword">const</span> transformFn = sourcesAndTransform[sourcesAndTransform.length - <span class="hljs-number">1</span>] <span class="hljs-keyword">as</span> TransformFn<T, U>; |
269 | 235 |
|
270 | 236 | <span class="hljs-keyword">return</span> combineLatest([...sources, <span class="hljs-built_in">this</span>._state]).pipe( |
271 | | - map(<span class="hljs-function"><span class="hljs-params">args</span> =></span> transformFn(...(args <span class="hljs-keyword">as</span> [...ObservedValuesOf<T>, State]))), |
| 237 | + map(<span class="hljs-function"><span class="hljs-params">args</span> =></span> transformFn(...(args <span class="hljs-keyword">as</span> unknown <span class="hljs-keyword">as</span> [...ObservedValuesOf<T>, State]))), |
272 | 238 | shareReplay({<span class="hljs-attr">refCount</span>: <span class="hljs-literal">true</span>, <span class="hljs-attr">bufferSize</span>: <span class="hljs-number">1</span>}), |
273 | 239 | ); |
274 | 240 | } |
|
305 | 271 | } |
306 | 272 | } |
307 | 273 | } |
| 274 | + |
| 275 | +<span class="hljs-keyword">const</span> EXAMPLE_DATA = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Map</span><<span class="hljs-built_in">string</span>, BackendData>( |
| 276 | + [ |
| 277 | + { |
| 278 | + <span class="hljs-attr">id</span>: <span class="hljs-string">'1'</span>, |
| 279 | + <span class="hljs-attr">name</span>: <span class="hljs-string">'Fruit'</span>, |
| 280 | + <span class="hljs-attr">children</span>: [<span class="hljs-string">'1-1'</span>, <span class="hljs-string">'1-2'</span>, <span class="hljs-string">'1-3'</span>], |
| 281 | + }, |
| 282 | + {<span class="hljs-attr">id</span>: <span class="hljs-string">'1-1'</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'Apple'</span>, <span class="hljs-attr">parent</span>: <span class="hljs-string">'1'</span>}, |
| 283 | + {<span class="hljs-attr">id</span>: <span class="hljs-string">'1-2'</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'Banana'</span>, <span class="hljs-attr">parent</span>: <span class="hljs-string">'1'</span>}, |
| 284 | + {<span class="hljs-attr">id</span>: <span class="hljs-string">'1-3'</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'Fruit Loops'</span>, <span class="hljs-attr">parent</span>: <span class="hljs-string">'1'</span>}, |
| 285 | + { |
| 286 | + <span class="hljs-attr">id</span>: <span class="hljs-string">'2'</span>, |
| 287 | + <span class="hljs-attr">name</span>: <span class="hljs-string">'Vegetables'</span>, |
| 288 | + <span class="hljs-attr">children</span>: [<span class="hljs-string">'2-1'</span>, <span class="hljs-string">'2-2'</span>], |
| 289 | + }, |
| 290 | + { |
| 291 | + <span class="hljs-attr">id</span>: <span class="hljs-string">'2-1'</span>, |
| 292 | + <span class="hljs-attr">name</span>: <span class="hljs-string">'Green'</span>, |
| 293 | + <span class="hljs-attr">parent</span>: <span class="hljs-string">'2'</span>, |
| 294 | + <span class="hljs-attr">children</span>: [<span class="hljs-string">'2-1-1'</span>, <span class="hljs-string">'2-1-2'</span>], |
| 295 | + }, |
| 296 | + { |
| 297 | + <span class="hljs-attr">id</span>: <span class="hljs-string">'2-2'</span>, |
| 298 | + <span class="hljs-attr">name</span>: <span class="hljs-string">'Orange'</span>, |
| 299 | + <span class="hljs-attr">parent</span>: <span class="hljs-string">'2'</span>, |
| 300 | + <span class="hljs-attr">children</span>: [<span class="hljs-string">'2-2-1'</span>, <span class="hljs-string">'2-2-2'</span>], |
| 301 | + }, |
| 302 | + {<span class="hljs-attr">id</span>: <span class="hljs-string">'2-1-1'</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'Broccoli'</span>, <span class="hljs-attr">parent</span>: <span class="hljs-string">'2-1'</span>}, |
| 303 | + {<span class="hljs-attr">id</span>: <span class="hljs-string">'2-1-2'</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'Brussel sprouts'</span>, <span class="hljs-attr">parent</span>: <span class="hljs-string">'2-1'</span>}, |
| 304 | + {<span class="hljs-attr">id</span>: <span class="hljs-string">'2-2-1'</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'Pumpkins'</span>, <span class="hljs-attr">parent</span>: <span class="hljs-string">'2-2'</span>}, |
| 305 | + {<span class="hljs-attr">id</span>: <span class="hljs-string">'2-2-2'</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'Carrots'</span>, <span class="hljs-attr">parent</span>: <span class="hljs-string">'2-2'</span>}, |
| 306 | + ].map(<span class="hljs-function"><span class="hljs-params">datum</span> =></span> [datum.id, datum]), |
| 307 | +); |
0 commit comments