Skip to content

Commit 9086a4b

Browse files
crisbetojelbourn
authored andcommitted
fix(datepicker): able to focus disabled datepicker toggle while disabled via click (#18231)
Fixes users being able to focus a disabled datepicker toggle by clicking on it. (cherry picked from commit 321d3f9)
1 parent 77a25eb commit 9086a4b

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

src/material/datepicker/datepicker-toggle.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export class MatDatepickerToggleIcon {}
4343
'class': 'mat-datepicker-toggle',
4444
// Always set the tabindex to -1 so that it doesn't overlap with any custom tabindex the
4545
// consumer may have provided, while still being able to receive focus.
46-
'[attr.tabindex]': '-1',
46+
'[attr.tabindex]': 'disabled ? null : -1',
4747
'[class.mat-datepicker-toggle-active]': 'datepicker && datepicker.opened',
4848
'[class.mat-accent]': 'datepicker && datepicker.color === "accent"',
4949
'[class.mat-warn]': 'datepicker && datepicker.color === "warn"',

src/material/datepicker/datepicker.spec.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1068,7 +1068,7 @@ describe('MatDatepicker', () => {
10681068
expect(button.getAttribute('tabindex')).toBe('7');
10691069
});
10701070

1071-
it('should clear the tabindex from the mat-datepicker-toggle host', () => {
1071+
it('should reset the tabindex from the mat-datepicker-toggle host', () => {
10721072
const fixture = createComponent(DatepickerWithTabindexOnToggle, [MatNativeDateModule]);
10731073
fixture.detectChanges();
10741074

@@ -1091,6 +1091,16 @@ describe('MatDatepicker', () => {
10911091
expect(document.activeElement).toBe(button);
10921092
});
10931093

1094+
it('should remove the tabindex from the mat-datepicker-toggle host when disabled', () => {
1095+
const fixture = createComponent(DatepickerWithTabindexOnToggle, [MatNativeDateModule]);
1096+
fixture.componentInstance.disabled = true;
1097+
fixture.detectChanges();
1098+
1099+
const host = fixture.nativeElement.querySelector('.mat-datepicker-toggle');
1100+
1101+
expect(host.hasAttribute('tabindex')).toBe(false);
1102+
});
1103+
10941104
});
10951105

10961106
describe('datepicker inside mat-form-field', () => {
@@ -2037,13 +2047,15 @@ class DelayedDatepicker {
20372047
@Component({
20382048
template: `
20392049
<input [matDatepicker]="d">
2040-
<mat-datepicker-toggle tabIndex="7" [for]="d">
2050+
<mat-datepicker-toggle tabIndex="7" [for]="d" [disabled]="disabled">
20412051
<div class="custom-icon" matDatepickerToggleIcon></div>
20422052
</mat-datepicker-toggle>
20432053
<mat-datepicker #d></mat-datepicker>
20442054
`,
20452055
})
2046-
class DatepickerWithTabindexOnToggle {}
2056+
class DatepickerWithTabindexOnToggle {
2057+
disabled = false;
2058+
}
20472059

20482060

20492061
@Component({

0 commit comments

Comments
 (0)