Skip to content

Commit 0d711e5

Browse files
committed
feat(tree): Use tabindex for tree node
1 parent 8dbeefd commit 0d711e5

File tree

3 files changed

+31
-7
lines changed

3 files changed

+31
-7
lines changed

src/cdk/tree/nested-node.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ import {CdkTreeNode} from './node';
4242
host: {
4343
'[attr.role]': 'role',
4444
'class': 'cdk-tree-node cdk-nested-tree-node',
45-
'tabindex': '0',
4645
},
4746
providers: [{provide: CdkTreeNode, useExisting: CdkNestedTreeNode}]
4847
})

src/demo-app/demo-app/demo-module.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,6 @@ import {TableDemoModule} from '../table/table-demo-module';
126126
],
127127
providers: [
128128
{provide: OverlayContainer, useClass: FullscreenOverlayContainer},
129-
PeopleDatabase,
130129
JsonDatabase
131130
],
132131
entryComponents: [

src/lib/tree/node.ts

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,34 +7,49 @@
77
*/
88

99
import {
10+
Attribute,
1011
ContentChildren,
1112
Directive,
13+
ElementRef,
1214
Input,
1315
QueryList
1416
} from '@angular/core';
1517
import {
1618
CdkNestedTreeNode,
19+
CdkTree,
1720
CdkTreeNodeDef,
1821
CdkTreeNode,
1922
} from '@angular/cdk/tree';
2023
import {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 = parseInt(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 = parseInt(tabIndex) || 0;
98+
}
7399
}

0 commit comments

Comments
 (0)