1 | /**
|
---|
2 | * @license
|
---|
3 | * Copyright Google LLC All Rights Reserved.
|
---|
4 | *
|
---|
5 | * Use of this source code is governed by an MIT-style license that can be
|
---|
6 | * found in the LICENSE file at https://angular.io/license
|
---|
7 | */
|
---|
8 | import { CollectionViewer, DataSource } from '@angular/cdk/collections';
|
---|
9 | import { FlatTreeControl, TreeControl } from '@angular/cdk/tree';
|
---|
10 | import { Observable } from 'rxjs';
|
---|
11 | /**
|
---|
12 | * Tree flattener to convert a normal type of node to node with children & level information.
|
---|
13 | * Transform nested nodes of type `T` to flattened nodes of type `F`.
|
---|
14 | *
|
---|
15 | * For example, the input data of type `T` is nested, and contains its children data:
|
---|
16 | * SomeNode: {
|
---|
17 | * key: 'Fruits',
|
---|
18 | * children: [
|
---|
19 | * NodeOne: {
|
---|
20 | * key: 'Apple',
|
---|
21 | * },
|
---|
22 | * NodeTwo: {
|
---|
23 | * key: 'Pear',
|
---|
24 | * }
|
---|
25 | * ]
|
---|
26 | * }
|
---|
27 | * After flattener flatten the tree, the structure will become
|
---|
28 | * SomeNode: {
|
---|
29 | * key: 'Fruits',
|
---|
30 | * expandable: true,
|
---|
31 | * level: 1
|
---|
32 | * },
|
---|
33 | * NodeOne: {
|
---|
34 | * key: 'Apple',
|
---|
35 | * expandable: false,
|
---|
36 | * level: 2
|
---|
37 | * },
|
---|
38 | * NodeTwo: {
|
---|
39 | * key: 'Pear',
|
---|
40 | * expandable: false,
|
---|
41 | * level: 2
|
---|
42 | * }
|
---|
43 | * and the output flattened type is `F` with additional information.
|
---|
44 | */
|
---|
45 | export declare class MatTreeFlattener<T, F, K = F> {
|
---|
46 | transformFunction: (node: T, level: number) => F;
|
---|
47 | getLevel: (node: F) => number;
|
---|
48 | isExpandable: (node: F) => boolean;
|
---|
49 | getChildren: (node: T) => Observable<T[]> | T[] | undefined | null;
|
---|
50 | constructor(transformFunction: (node: T, level: number) => F, getLevel: (node: F) => number, isExpandable: (node: F) => boolean, getChildren: (node: T) => Observable<T[]> | T[] | undefined | null);
|
---|
51 | _flattenNode(node: T, level: number, resultNodes: F[], parentMap: boolean[]): F[];
|
---|
52 | _flattenChildren(children: T[], level: number, resultNodes: F[], parentMap: boolean[]): void;
|
---|
53 | /**
|
---|
54 | * Flatten a list of node type T to flattened version of node F.
|
---|
55 | * Please note that type T may be nested, and the length of `structuredData` may be different
|
---|
56 | * from that of returned list `F[]`.
|
---|
57 | */
|
---|
58 | flattenNodes(structuredData: T[]): F[];
|
---|
59 | /**
|
---|
60 | * Expand flattened node with current expansion status.
|
---|
61 | * The returned list may have different length.
|
---|
62 | */
|
---|
63 | expandFlattenedNodes(nodes: F[], treeControl: TreeControl<F, K>): F[];
|
---|
64 | }
|
---|
65 | /**
|
---|
66 | * Data source for flat tree.
|
---|
67 | * The data source need to handle expansion/collapsion of the tree node and change the data feed
|
---|
68 | * to `MatTree`.
|
---|
69 | * The nested tree nodes of type `T` are flattened through `MatTreeFlattener`, and converted
|
---|
70 | * to type `F` for `MatTree` to consume.
|
---|
71 | */
|
---|
72 | export declare class MatTreeFlatDataSource<T, F, K = F> extends DataSource<F> {
|
---|
73 | private _treeControl;
|
---|
74 | private _treeFlattener;
|
---|
75 | private readonly _flattenedData;
|
---|
76 | private readonly _expandedData;
|
---|
77 | get data(): T[];
|
---|
78 | set data(value: T[]);
|
---|
79 | private readonly _data;
|
---|
80 | constructor(_treeControl: FlatTreeControl<F, K>, _treeFlattener: MatTreeFlattener<T, F, K>, initialData?: T[]);
|
---|
81 | connect(collectionViewer: CollectionViewer): Observable<F[]>;
|
---|
82 | disconnect(): void;
|
---|
83 | }
|
---|