blob: 30b13024c39f7ff70682f0db680b60d8a9d58735 [file] [log] [blame]
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import { FocusableOption } from '@angular/cdk/a11y';
import { CollectionViewer, DataSource } from '@angular/cdk/collections';
import { AfterContentChecked, ChangeDetectorRef, ElementRef, IterableDiffer, IterableDiffers, OnDestroy, OnInit, QueryList, ViewContainerRef, TrackByFunction } from '@angular/core';
import { BehaviorSubject, Observable, Subject } from 'rxjs';
import { TreeControl } from './control/tree-control';
import { CdkTreeNodeDef } from './node';
import { CdkTreeNodeOutlet } from './outlet';
/**
* CDK tree component that connects with a data source to retrieve data of type `T` and renders
* dataNodes with hierarchy. Updates the dataNodes when new data is provided by the data source.
*/
export declare class CdkTree<T> implements AfterContentChecked, CollectionViewer, OnDestroy, OnInit {
private _differs;
private _changeDetectorRef;
/** Subject that emits when the component has been destroyed. */
private _onDestroy;
/** Differ used to find the changes in the data provided by the data source. */
private _dataDiffer;
/** Stores the node definition that does not have a when predicate. */
private _defaultNodeDef;
/** Data subscription */
private _dataSubscription;
/** Level of nodes */
private _levels;
/**
* Provides a stream containing the latest data array to render. Influenced by the tree's
* stream of view window (what dataNodes are currently on screen).
* Data source can be an observable of data array, or a data array to render.
*/
dataSource: DataSource<T> | Observable<T[]> | T[];
private _dataSource;
/** The tree controller */
treeControl: TreeControl<T>;
/**
* Tracking function that will be used to check the differences in data changes. Used similarly
* to `ngFor` `trackBy` function. Optimize node operations by identifying a node based on its data
* relative to the function to know if a node should be added/removed/moved.
* Accepts a function that takes two parameters, `index` and `item`.
*/
trackBy: TrackByFunction<T>;
_nodeOutlet: CdkTreeNodeOutlet;
/** The tree node template for the tree */
_nodeDefs: QueryList<CdkTreeNodeDef<T>>;
/**
* Stream containing the latest information on what rows are being displayed on screen.
* Can be used by the data source to as a heuristic of what data should be provided.
*/
viewChange: BehaviorSubject<{
start: number;
end: number;
}>;
constructor(_differs: IterableDiffers, _changeDetectorRef: ChangeDetectorRef);
ngOnInit(): void;
ngOnDestroy(): void;
ngAfterContentChecked(): void;
/**
* Switch to the provided data source by resetting the data and unsubscribing from the current
* render change subscription if one exists. If the data source is null, interpret this by
* clearing the node outlet. Otherwise start listening for new data.
*/
private _switchDataSource;
/** Set up a subscription for the data provided by the data source. */
private _observeRenderChanges;
/** Check for changes made in the data and render each change (node added/removed/moved). */
renderNodeChanges(data: T[] | ReadonlyArray<T>, dataDiffer?: IterableDiffer<T>, viewContainer?: ViewContainerRef, parentData?: T): void;
/**
* Finds the matching node definition that should be used for this node data. If there is only
* one node definition, it is returned. Otherwise, find the node definition that has a when
* predicate that returns true with the data. If none return true, return the default node
* definition.
*/
_getNodeDef(data: T, i: number): CdkTreeNodeDef<T>;
/**
* Create the embedded view for the data node template and place it in the correct index location
* within the data node view container.
*/
insertNode(nodeData: T, index: number, viewContainer?: ViewContainerRef, parentData?: T): void;
}
/**
* Tree node for CdkTree. It contains the data in the tree node.
*/
export declare class CdkTreeNode<T> implements FocusableOption, OnDestroy {
protected _elementRef: ElementRef<HTMLElement>;
protected _tree: CdkTree<T>;
/**
* The most recently created `CdkTreeNode`. We save it in static variable so we can retrieve it
* in `CdkTree` and set the data to it.
*/
static mostRecentTreeNode: CdkTreeNode<any> | null;
/** Subject that emits when the component has been destroyed. */
protected _destroyed: Subject<void>;
/** Emits when the node's data has changed. */
_dataChanges: Subject<void>;
/** The tree node's data. */
data: T;
protected _data: T;
readonly isExpanded: boolean;
readonly level: number;
/**
* The role of the node should be 'group' if it's an internal node,
* and 'treeitem' if it's a leaf node.
*/
role: 'treeitem' | 'group';
constructor(_elementRef: ElementRef<HTMLElement>, _tree: CdkTree<T>);
ngOnDestroy(): void;
/** Focuses the menu item. Implements for FocusableOption. */
focus(): void;
protected _setRoleFromData(): void;
protected _setRoleFromChildren(children: T[]): void;
}