77 */
88
99import {
10+ Attribute ,
1011 ContentChildren ,
1112 Directive ,
13+ ElementRef ,
1214 Input ,
1315 QueryList
1416} from '@angular/core' ;
1517import {
1618 CdkNestedTreeNode ,
19+ CdkTree ,
1720 CdkTreeNodeDef ,
1821 CdkTreeNode ,
1922} from '@angular/cdk/tree' ;
2023import { MatTreeNodeOutlet } from './outlet' ;
24+ import { mixinTabIndex , mixinDisabled , CanDisable , HasTabIndex } from '@angular/material/core' ;
25+
26+
27+ export const _MatTreeNodeMixinBase = mixinTabIndex ( mixinDisabled ( CdkTreeNode ) ) ;
28+ export const _MatNestedTreeNodeMixinBase = mixinTabIndex ( mixinDisabled ( CdkNestedTreeNode ) ) ;
2129
2230/**
2331 * Wrapper for the CdkTree node with Material design styles.
2432 */
25- // TODO(tinayuangao): use mixinTabIndex
2633@Directive ( {
2734 selector : 'mat-tree-node' ,
2835 exportAs : 'matTreeNode' ,
36+ inputs : [ 'disabled' , 'tabIndex' ] ,
2937 host : {
3038 '[attr.role]' : 'role' ,
31- 'class' : 'mat-tree-node' ,
32- 'tabindex' : '0' ,
39+ 'class' : 'mat-tree-node'
3340 } ,
3441 providers : [ { provide : CdkTreeNode , useExisting : MatTreeNode } ]
3542} )
36- export class MatTreeNode < T > extends CdkTreeNode < T > {
43+ export class MatTreeNode < T > extends _MatTreeNodeMixinBase < T > implements HasTabIndex , CanDisable {
3744 @Input ( ) role : 'treeitem' | 'group' = 'treeitem' ;
45+
46+ constructor ( protected _elementRef : ElementRef ,
47+ protected _tree : CdkTree < T > ,
48+ @Attribute ( 'tabindex' ) tabIndex : string ) {
49+ super ( _elementRef , _tree ) ;
50+
51+ this . tabIndex = Number ( tabIndex ) || 0 ;
52+ }
3853}
3954
4055/**
@@ -61,13 +76,24 @@ export class MatTreeNodeDef<T> extends CdkTreeNodeDef<T> {
6176 '[attr.role]' : 'role' ,
6277 'class' : 'mat-nested-tree-node' ,
6378 } ,
79+ inputs : [ 'disabled' , 'tabIndex' ] ,
6480 providers : [
6581 { provide : CdkNestedTreeNode , useExisting : MatNestedTreeNode } ,
6682 { provide : CdkTreeNode , useExisting : MatNestedTreeNode }
6783 ]
6884} )
69- export class MatNestedTreeNode < T > extends CdkNestedTreeNode < T > {
85+ export class MatNestedTreeNode < T > extends _MatNestedTreeNodeMixinBase < T >
86+ implements HasTabIndex , CanDisable {
87+
7088 @Input ( 'matNestedTreeNode' ) node : T ;
7189
7290 @ContentChildren ( MatTreeNodeOutlet ) nodeOutlet : QueryList < MatTreeNodeOutlet > ;
91+
92+ constructor ( protected _elementRef : ElementRef ,
93+ protected _tree : CdkTree < T > ,
94+ @Attribute ( 'tabindex' ) tabIndex : string ) {
95+ super ( _elementRef , _tree ) ;
96+
97+ this . tabIndex = Number ( tabIndex ) || 0 ;
98+ }
7399}
0 commit comments