Skip to content

Commit

Permalink
fix(cdk/tree): add missing generic types to trackBy Fixes (#21364) (#…
Browse files Browse the repository at this point in the history
…21421)

* fix(cdk/tree): add missing generic types to trackBy Fixes (#21364)

* fix(cdk/tree): add missing generic types to trackBy Fixes (#21364)

(cherry picked from commit 22d5600)
  • Loading branch information
POFerro authored and annieyw committed Jan 6, 2021
1 parent 007d4ac commit 6318d11
Show file tree
Hide file tree
Showing 11 changed files with 66 additions and 66 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ node_modules
/.idea
/.vscode/launch.json
/*.iml
/.vs

# misc
.DS_Store
Expand Down
7 changes: 3 additions & 4 deletions src/cdk/tree/nested-node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,8 @@ import {getTreeControlFunctionsMissingError} from './tree-errors';
{provide: CDK_TREE_NODE_OUTLET_NODE, useExisting: CdkNestedTreeNode}
]
})
export class CdkNestedTreeNode<T> extends CdkTreeNode<T> implements AfterContentInit, DoCheck,
OnDestroy,
OnInit {
export class CdkNestedTreeNode<T, K = T> extends CdkTreeNode<T, K>
implements AfterContentInit, DoCheck, OnDestroy, OnInit {
/** Differ used to find the changes in the data provided by the data source. */
private _dataDiffer: IterableDiffer<T>;

Expand All @@ -57,7 +56,7 @@ export class CdkNestedTreeNode<T> extends CdkTreeNode<T> implements AfterContent
nodeOutlet: QueryList<CdkTreeNodeOutlet>;

constructor(protected _elementRef: ElementRef<HTMLElement>,
protected _tree: CdkTree<T>,
protected _tree: CdkTree<T, K>,
protected _differs: IterableDiffers) {
super(_elementRef, _tree);
// The classes are directly added here instead of in the host property because classes on
Expand Down
6 changes: 3 additions & 3 deletions src/cdk/tree/padding.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const cssUnitPattern = /([A-Za-z%]+)$/;
@Directive({
selector: '[cdkTreeNodePadding]',
})
export class CdkTreeNodePadding<T> implements OnDestroy {
export class CdkTreeNodePadding<T, K = T> implements OnDestroy {
/** Current padding value applied to the element. Used to avoid unnecessarily hitting the DOM. */
private _currentPadding: string|null;

Expand All @@ -48,8 +48,8 @@ export class CdkTreeNodePadding<T> implements OnDestroy {
set indent(indent: number | string) { this._setIndentInput(indent); }
_indent: number = 40;

constructor(private _treeNode: CdkTreeNode<T>,
private _tree: CdkTree<T>,
constructor(private _treeNode: CdkTreeNode<T, K>,
private _tree: CdkTree<T, K>,
private _element: ElementRef<HTMLElement>,
@Optional() private _dir: Directionality) {
this._setPadding();
Expand Down
6 changes: 3 additions & 3 deletions src/cdk/tree/toggle.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ import {CdkTree, CdkTreeNode} from './tree';
* Node toggle to expand/collapse the node.
*/
@Directive({selector: '[cdkTreeNodeToggle]'})
export class CdkTreeNodeToggle<T> {
export class CdkTreeNodeToggle<T, K = T> {
/** Whether expand/collapse the node recursively. */
@Input('cdkTreeNodeToggleRecursive')
get recursive(): boolean { return this._recursive; }
set recursive(value: boolean) { this._recursive = coerceBooleanProperty(value); }
protected _recursive = false;

constructor(protected _tree: CdkTree<T>,
protected _treeNode: CdkTreeNode<T>) {}
constructor(protected _tree: CdkTree<T, K>,
protected _treeNode: CdkTreeNode<T, K>) {}

// We have to use a `HostListener` here in order to support both Ivy and ViewEngine.
// In Ivy the `host` bindings will be merged when this class is extended, whereas in
Expand Down
10 changes: 5 additions & 5 deletions src/cdk/tree/tree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ import {coerceNumberProperty} from '@angular/cdk/coercion';
// tslint:disable-next-line:validate-decorators
changeDetection: ChangeDetectionStrategy.Default
})
export class CdkTree<T> implements AfterContentChecked, CollectionViewer, OnDestroy, OnInit {
export class CdkTree<T, K = T> implements AfterContentChecked, CollectionViewer, OnDestroy, OnInit {
/** Subject that emits when the component has been destroyed. */
private _onDestroy = new Subject<void>();

Expand Down Expand Up @@ -100,7 +100,7 @@ export class CdkTree<T> implements AfterContentChecked, CollectionViewer, OnDest
private _dataSource: DataSource<T> | Observable<T[]> | T[];

/** The tree controller */
@Input() treeControl: TreeControl<T>;
@Input() treeControl: TreeControl<T, K>;

/**
* Tracking function that will be used to check the differences in data changes. Used similarly
Expand Down Expand Up @@ -303,7 +303,7 @@ export class CdkTree<T> implements AfterContentChecked, CollectionViewer, OnDest
selector: 'cdk-tree-node',
exportAs: 'cdkTreeNode',
})
export class CdkTreeNode<T> implements DoCheck, FocusableOption, OnDestroy, OnInit {
export class CdkTreeNode<T, K = T> implements DoCheck, FocusableOption, OnDestroy, OnInit {
/**
* The role of the tree node.
* @deprecated The correct role is 'treeitem', 'group' should not be used. This input will be
Expand Down Expand Up @@ -362,8 +362,8 @@ export class CdkTreeNode<T> implements DoCheck, FocusableOption, OnDestroy, OnIn
}

constructor(protected _elementRef: ElementRef<HTMLElement>,
protected _tree: CdkTree<T>) {
CdkTreeNode.mostRecentTreeNode = this as CdkTreeNode<T>;
protected _tree: CdkTree<T, K>) {
CdkTreeNode.mostRecentTreeNode = this as CdkTreeNode<T, K>;
// The classes are directly added here instead of in the host property because classes on
// the host property are not inherited with View Engine. It is not set as a @HostBinding because
// it is not set by the time it's children nodes try to read the class from it.
Expand Down
10 changes: 5 additions & 5 deletions src/material/tree/node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,12 @@ const _MatTreeNodeMixinBase: HasTabIndexCtor & CanDisableCtor & typeof CdkTreeNo
inputs: ['role', 'disabled', 'tabIndex'],
providers: [{provide: CdkTreeNode, useExisting: MatTreeNode}]
})
export class MatTreeNode<T> extends _MatTreeNodeMixinBase<T>
export class MatTreeNode<T, K = T> extends _MatTreeNodeMixinBase<T, K>
implements CanDisable, DoCheck, HasTabIndex, OnInit, OnDestroy {


constructor(protected _elementRef: ElementRef<HTMLElement>,
protected _tree: CdkTree<T>,
protected _tree: CdkTree<T, K>,
@Attribute('tabindex') tabIndex: string) {
super(_elementRef, _tree);

Expand Down Expand Up @@ -107,8 +107,8 @@ export class MatTreeNodeDef<T> extends CdkTreeNodeDef<T> {
{provide: CDK_TREE_NODE_OUTLET_NODE, useExisting: MatNestedTreeNode}
]
})
export class MatNestedTreeNode<T> extends CdkNestedTreeNode<T> implements AfterContentInit, DoCheck,
OnDestroy, OnInit {
export class MatNestedTreeNode<T, K = T> extends CdkNestedTreeNode<T, K>
implements AfterContentInit, DoCheck, OnDestroy, OnInit {
@Input('matNestedTreeNode') node: T;

/** Whether the node is disabled. */
Expand All @@ -127,7 +127,7 @@ export class MatNestedTreeNode<T> extends CdkNestedTreeNode<T> implements AfterC
private _tabIndex: number;

constructor(protected _elementRef: ElementRef<HTMLElement>,
protected _tree: CdkTree<T>,
protected _tree: CdkTree<T, K>,
protected _differs: IterableDiffers,
@Attribute('tabindex') tabIndex: string) {
super(_elementRef, _tree, _differs);
Expand Down
2 changes: 1 addition & 1 deletion src/material/tree/padding.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import {Directive, Input} from '@angular/core';
selector: '[matTreeNodePadding]',
providers: [{provide: CdkTreeNodePadding, useExisting: MatTreeNodePadding}]
})
export class MatTreeNodePadding<T> extends CdkTreeNodePadding<T> {
export class MatTreeNodePadding<T, K = T> extends CdkTreeNodePadding<T, K> {

/** The level of depth of the tree node. The padding will be `level * indent` pixels. */
@Input('matTreeNodePadding')
Expand Down
2 changes: 1 addition & 1 deletion src/material/tree/toggle.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import {Directive, Input} from '@angular/core';
providers: [{provide: CdkTreeNodeToggle, useExisting: MatTreeNodeToggle}]
})
// tslint:disable-next-line: coercion-types
export class MatTreeNodeToggle<T> extends CdkTreeNodeToggle<T> {
export class MatTreeNodeToggle<T, K = T> extends CdkTreeNodeToggle<T, K> {
@Input('matTreeNodeToggleRecursive')
get recursive(): boolean { return this._recursive; }
set recursive(value: boolean) {
Expand Down
2 changes: 1 addition & 1 deletion src/material/tree/tree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ import {MatTreeNodeOutlet} from './outlet';
changeDetection: ChangeDetectionStrategy.Default,
providers: [{provide: CdkTree, useExisting: MatTree}]
})
export class MatTree<T> extends CdkTree<T> {
export class MatTree<T, K = T> extends CdkTree<T, K> {
// Outlets within the tree's template where the dataNodes will be inserted.
@ViewChild(MatTreeNodeOutlet, {static: true}) _nodeOutlet: MatTreeNodeOutlet;
}
48 changes: 24 additions & 24 deletions tools/public_api_guard/cdk/tree.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,30 +20,30 @@ export declare abstract class BaseTreeControl<T, K = T> implements TreeControl<T

export declare const CDK_TREE_NODE_OUTLET_NODE: InjectionToken<{}>;

export declare class CdkNestedTreeNode<T> extends CdkTreeNode<T> implements AfterContentInit, DoCheck, OnDestroy, OnInit {
export declare class CdkNestedTreeNode<T, K = T> extends CdkTreeNode<T, K> implements AfterContentInit, DoCheck, OnDestroy, OnInit {
protected _children: T[];
protected _differs: IterableDiffers;
protected _elementRef: ElementRef<HTMLElement>;
protected _tree: CdkTree<T>;
protected _tree: CdkTree<T, K>;
nodeOutlet: QueryList<CdkTreeNodeOutlet>;
constructor(_elementRef: ElementRef<HTMLElement>, _tree: CdkTree<T>, _differs: IterableDiffers);
constructor(_elementRef: ElementRef<HTMLElement>, _tree: CdkTree<T, K>, _differs: IterableDiffers);
protected _clear(): void;
ngAfterContentInit(): void;
ngDoCheck(): void;
ngOnDestroy(): void;
ngOnInit(): void;
protected updateChildrenNodes(children?: T[]): void;
static ɵdir: i0.ɵɵDirectiveDefWithMeta<CdkNestedTreeNode<any>, "cdk-nested-tree-node", ["cdkNestedTreeNode"], { "role": "role"; "disabled": "disabled"; "tabIndex": "tabIndex"; }, {}, ["nodeOutlet"]>;
static ɵfac: i0.ɵɵFactoryDef<CdkNestedTreeNode<any>, never>;
static ɵdir: i0.ɵɵDirectiveDefWithMeta<CdkNestedTreeNode<any, any>, "cdk-nested-tree-node", ["cdkNestedTreeNode"], { "role": "role"; "disabled": "disabled"; "tabIndex": "tabIndex"; }, {}, ["nodeOutlet"]>;
static ɵfac: i0.ɵɵFactoryDef<CdkNestedTreeNode<any, any>, never>;
}

export declare class CdkTree<T> implements AfterContentChecked, CollectionViewer, OnDestroy, OnInit {
export declare class CdkTree<T, K = T> implements AfterContentChecked, CollectionViewer, OnDestroy, OnInit {
_nodeDefs: QueryList<CdkTreeNodeDef<T>>;
_nodeOutlet: CdkTreeNodeOutlet;
get dataSource(): DataSource<T> | Observable<T[]> | T[];
set dataSource(dataSource: DataSource<T> | Observable<T[]> | T[]);
trackBy: TrackByFunction<T>;
treeControl: TreeControl<T>;
treeControl: TreeControl<T, K>;
viewChange: BehaviorSubject<{
start: number;
end: number;
Expand All @@ -55,37 +55,37 @@ export declare class CdkTree<T> implements AfterContentChecked, CollectionViewer
ngOnDestroy(): void;
ngOnInit(): void;
renderNodeChanges(data: T[] | ReadonlyArray<T>, dataDiffer?: IterableDiffer<T>, viewContainer?: ViewContainerRef, parentData?: T): void;
static ɵcmp: i0.ɵɵComponentDefWithMeta<CdkTree<any>, "cdk-tree", ["cdkTree"], { "dataSource": "dataSource"; "treeControl": "treeControl"; "trackBy": "trackBy"; }, {}, ["_nodeDefs"], never>;
static ɵfac: i0.ɵɵFactoryDef<CdkTree<any>, never>;
static ɵcmp: i0.ɵɵComponentDefWithMeta<CdkTree<any, any>, "cdk-tree", ["cdkTree"], { "dataSource": "dataSource"; "treeControl": "treeControl"; "trackBy": "trackBy"; }, {}, ["_nodeDefs"], never>;
static ɵfac: i0.ɵɵFactoryDef<CdkTree<any, any>, never>;
}

export declare class CdkTreeModule {
static ɵinj: i0.ɵɵInjectorDef<CdkTreeModule>;
static ɵmod: i0.ɵɵNgModuleDefWithMeta<CdkTreeModule, [typeof i1.CdkNestedTreeNode, typeof i2.CdkTreeNodeDef, typeof i3.CdkTreeNodePadding, typeof i4.CdkTreeNodeToggle, typeof i5.CdkTree, typeof i5.CdkTreeNode, typeof i6.CdkTreeNodeOutlet], never, [typeof i1.CdkNestedTreeNode, typeof i2.CdkTreeNodeDef, typeof i3.CdkTreeNodePadding, typeof i4.CdkTreeNodeToggle, typeof i5.CdkTree, typeof i5.CdkTreeNode, typeof i6.CdkTreeNodeOutlet]>;
}

export declare class CdkTreeNode<T> implements DoCheck, FocusableOption, OnDestroy, OnInit {
export declare class CdkTreeNode<T, K = T> implements DoCheck, FocusableOption, OnDestroy, OnInit {
protected _data: T;
_dataChanges: Subject<void>;
protected _destroyed: Subject<void>;
protected _elementRef: ElementRef<HTMLElement>;
protected _isAriaExpanded: boolean;
protected _tree: CdkTree<T>;
protected _tree: CdkTree<T, K>;
get data(): T;
set data(value: T);
get isExpanded(): boolean;
get level(): number;
get role(): 'treeitem' | 'group';
set role(_role: 'treeitem' | 'group');
constructor(_elementRef: ElementRef<HTMLElement>, _tree: CdkTree<T>);
constructor(_elementRef: ElementRef<HTMLElement>, _tree: CdkTree<T, K>);
protected _setRoleFromData(): void;
focus(): void;
ngDoCheck(): void;
ngOnDestroy(): void;
ngOnInit(): void;
static mostRecentTreeNode: CdkTreeNode<any> | null;
static ɵdir: i0.ɵɵDirectiveDefWithMeta<CdkTreeNode<any>, "cdk-tree-node", ["cdkTreeNode"], { "role": "role"; }, {}, never>;
static ɵfac: i0.ɵɵFactoryDef<CdkTreeNode<any>, never>;
static ɵdir: i0.ɵɵDirectiveDefWithMeta<CdkTreeNode<any, any>, "cdk-tree-node", ["cdkTreeNode"], { "role": "role"; }, {}, never>;
static ɵfac: i0.ɵɵFactoryDef<CdkTreeNode<any, any>, never>;
}

export declare class CdkTreeNodeDef<T> {
Expand All @@ -112,36 +112,36 @@ export declare class CdkTreeNodeOutletContext<T> {
constructor(data: T);
}

export declare class CdkTreeNodePadding<T> implements OnDestroy {
export declare class CdkTreeNodePadding<T, K = T> implements OnDestroy {
_indent: number;
_level: number;
get indent(): number | string;
set indent(indent: number | string);
indentUnits: string;
get level(): number;
set level(value: number);
constructor(_treeNode: CdkTreeNode<T>, _tree: CdkTree<T>, _element: ElementRef<HTMLElement>, _dir: Directionality);
constructor(_treeNode: CdkTreeNode<T, K>, _tree: CdkTree<T, K>, _element: ElementRef<HTMLElement>, _dir: Directionality);
_paddingIndent(): string | null;
protected _setIndentInput(indent: number | string): void;
protected _setLevelInput(value: number): void;
_setPadding(forceChange?: boolean): void;
ngOnDestroy(): void;
static ngAcceptInputType_level: NumberInput;
static ɵdir: i0.ɵɵDirectiveDefWithMeta<CdkTreeNodePadding<any>, "[cdkTreeNodePadding]", never, { "level": "cdkTreeNodePadding"; "indent": "cdkTreeNodePaddingIndent"; }, {}, never>;
static ɵfac: i0.ɵɵFactoryDef<CdkTreeNodePadding<any>, [null, null, null, { optional: true; }]>;
static ɵdir: i0.ɵɵDirectiveDefWithMeta<CdkTreeNodePadding<any, any>, "[cdkTreeNodePadding]", never, { "level": "cdkTreeNodePadding"; "indent": "cdkTreeNodePaddingIndent"; }, {}, never>;
static ɵfac: i0.ɵɵFactoryDef<CdkTreeNodePadding<any, any>, [null, null, null, { optional: true; }]>;
}

export declare class CdkTreeNodeToggle<T> {
export declare class CdkTreeNodeToggle<T, K = T> {
protected _recursive: boolean;
protected _tree: CdkTree<T>;
protected _treeNode: CdkTreeNode<T>;
protected _tree: CdkTree<T, K>;
protected _treeNode: CdkTreeNode<T, K>;
get recursive(): boolean;
set recursive(value: boolean);
constructor(_tree: CdkTree<T>, _treeNode: CdkTreeNode<T>);
constructor(_tree: CdkTree<T, K>, _treeNode: CdkTreeNode<T, K>);
_toggle(event: Event): void;
static ngAcceptInputType_recursive: BooleanInput;
static ɵdir: i0.ɵɵDirectiveDefWithMeta<CdkTreeNodeToggle<any>, "[cdkTreeNodeToggle]", never, { "recursive": "cdkTreeNodeToggleRecursive"; }, {}, never>;
static ɵfac: i0.ɵɵFactoryDef<CdkTreeNodeToggle<any>, never>;
static ɵdir: i0.ɵɵDirectiveDefWithMeta<CdkTreeNodeToggle<any, any>, "[cdkTreeNodeToggle]", never, { "recursive": "cdkTreeNodeToggleRecursive"; }, {}, never>;
static ɵfac: i0.ɵɵFactoryDef<CdkTreeNodeToggle<any, any>, never>;
}

export declare class FlatTreeControl<T, K = T> extends BaseTreeControl<T, K> {
Expand Down

0 comments on commit 6318d11

Please sign in to comment.