Skip to content

Commit cc514b1

Browse files
committed
Disable tabs using changes to response to events rather than pointer-events: none
1 parent cef1eba commit cc514b1

File tree

5 files changed

+19
-9
lines changed

5 files changed

+19
-9
lines changed

src/lib/tabs/_tabs-common.scss

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ $mat-tab-animation-duration: 500ms !default;
2424

2525
&.mat-tab-disabled {
2626
cursor: default;
27-
pointer-events: none;
2827
}
2928
}
3029

src/lib/tabs/tab-group.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@
66
<div class="mat-tab-label" role="tab" matTabLabelWrapper mat-ripple
77
*ngFor="let tab of _tabs; let i = index"
88
[id]="_getTabLabelId(i)"
9-
[tabIndex]="selectedIndex == i ? 0 : -1"
9+
[attr.tabIndex]="selectedIndex == i ? 0 : null"
1010
[attr.aria-controls]="_getTabContentId(i)"
1111
[attr.aria-selected]="selectedIndex == i"
1212
[class.mat-tab-label-active]="selectedIndex == i"
1313
[disabled]="tab.disabled"
14-
[matRippleDisabled]="disableRipple"
15-
(click)="tabHeader.focusIndex = selectedIndex = i">
14+
[matRippleDisabled]="tab.disabled || disableRipple"
15+
(click)="_handleClick(tab, tabHeader, i)">
1616

17-
<!-- If there is a label template, use it. -->
17+
<!-- If there is a label template, use it. -->
1818
<ng-template [ngIf]="tab.templateLabel">
1919
<ng-template [cdkPortalHost]="tab.templateLabel"></ng-template>
2020
</ng-template>

src/lib/tabs/tab-group.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import {
2727
import {coerceBooleanProperty} from '@angular/cdk/coercion';
2828
import {Subscription} from 'rxjs/Subscription';
2929
import {MatTab} from './tab';
30+
import {MatTabHeader} from './tab-header';
3031
import {merge} from 'rxjs/observable/merge';
3132
import {
3233
CanColor,
@@ -290,4 +291,12 @@ export class MatTabGroup extends _MatTabGroupMixinBase implements AfterContentIn
290291
this._tabBodyWrapperHeight = this._tabBodyWrapper.nativeElement.clientHeight;
291292
this._renderer.setStyle(this._tabBodyWrapper.nativeElement, 'height', '');
292293
}
294+
295+
/** Handle click events, setting new selected index if appropriate. */
296+
_handleClick(tab: MatTab, tabHeader: MatTabHeader, idx: number) {
297+
if (!tab.disabled) {
298+
tabHeader.focusIndex = idx;
299+
this.selectedIndex = idx;
300+
}
301+
}
293302
}

src/lib/tabs/tab-label-wrapper.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ export class MatTabLabelWrapper extends _MatTabLabelWrapperMixinBase implements
3232

3333
/** Sets focus on the wrapper element */
3434
focus(): void {
35-
this.elementRef.nativeElement.focus();
35+
if (!this.disabled) {
36+
this.elementRef.nativeElement.focus();
37+
}
3638
}
3739

3840
getOffsetLeft(): number {

src/lib/tabs/tab-nav-bar/tab-nav-bar.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -209,16 +209,16 @@ export class MatTabLink extends _MatTabLinkMixinBase implements OnDestroy, CanDi
209209
}
210210

211211
/** Whether ripples should be disabled or not. */
212-
get disableRipple(): boolean { return this._disableRipple; }
212+
get disableRipple(): boolean { return this.disabled || this._disableRipple; }
213213
set disableRipple(value: boolean) {
214214
this._disableRipple = value;
215215
this._tabLinkRipple.disabled = this.disableRipple;
216216
this._tabLinkRipple._updateRippleRenderer();
217217
}
218218

219219
/** @docs-private */
220-
get tabIndex(): number {
221-
return this.disabled ? -1 : 0;
220+
get tabIndex(): number | null {
221+
return this.disabled ? null : 0;
222222
}
223223

224224
constructor(private _tabNavBar: MatTabNav,

0 commit comments

Comments
 (0)