Skip to content

Commit e3b5e3f

Browse files
crisbetojelbourn
authored andcommitted
fix(datepicker): highlight datepicker toggle when calendar is open (#9426)
Highlights the `mat-datepicker-toggle` while the associated calendar is open, in order to provide some extra visual feedback.
1 parent 6d4c7ae commit e3b5e3f

File tree

3 files changed

+33
-2
lines changed

3 files changed

+33
-2
lines changed

src/lib/datepicker/_datepicker-theme.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,10 @@ $mat-calendar-weekday-table-font-size: 11px !default;
8484
.mat-calendar-body-disabled > .mat-calendar-body-today:not(.mat-calendar-body-selected) {
8585
border-color: fade-out(mat-color($foreground, hint-text), $mat-datepicker-today-fade-amount);
8686
}
87+
88+
.mat-datepicker-toggle-active {
89+
color: mat-color($primary);
90+
}
8791
}
8892

8993
@mixin mat-datepicker-typography($config) {

src/lib/datepicker/datepicker-toggle.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import {MatDatepickerIntl} from './datepicker-intl';
3131
templateUrl: 'datepicker-toggle.html',
3232
host: {
3333
'class': 'mat-datepicker-toggle',
34+
'[class.mat-datepicker-toggle-active]': 'datepicker && datepicker.opened',
3435
},
3536
exportAs: 'matDatepickerToggle',
3637
encapsulation: ViewEncapsulation.None,
@@ -80,9 +81,16 @@ export class MatDatepickerToggle<D> implements AfterContentInit, OnChanges, OnDe
8081
const datepickerDisabled = this.datepicker ? this.datepicker._disabledChange : observableOf();
8182
const inputDisabled = this.datepicker && this.datepicker._datepickerInput ?
8283
this.datepicker._datepickerInput._disabledChange : observableOf();
84+
const datepickerToggled = this.datepicker ?
85+
merge(this.datepicker.openedStream, this.datepicker.closedStream) :
86+
observableOf();
8387

8488
this._stateChanges.unsubscribe();
85-
this._stateChanges = merge(this._intl.changes, datepickerDisabled, inputDisabled)
86-
.subscribe(() => this._changeDetectorRef.markForCheck());
89+
this._stateChanges = merge(
90+
this._intl.changes,
91+
datepickerDisabled,
92+
inputDisabled,
93+
datepickerToggled
94+
).subscribe(() => this._changeDetectorRef.markForCheck());
8795
}
8896
}

src/lib/datepicker/datepicker.spec.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,25 @@ describe('MatDatepicker', () => {
740740

741741
expect(toggle.getAttribute('aria-label')).toBe('Open the calendar, perhaps?');
742742
}));
743+
744+
it('should toggle the active state of the datepicker toggle', fakeAsync(() => {
745+
const toggle = fixture.debugElement.query(By.css('mat-datepicker-toggle')).nativeElement;
746+
747+
expect(toggle.classList).not.toContain('mat-datepicker-toggle-active');
748+
749+
fixture.componentInstance.datepicker.open();
750+
fixture.detectChanges();
751+
flush();
752+
753+
expect(toggle.classList).toContain('mat-datepicker-toggle-active');
754+
755+
fixture.componentInstance.datepicker.close();
756+
fixture.detectChanges();
757+
flush();
758+
fixture.detectChanges();
759+
760+
expect(toggle.classList).not.toContain('mat-datepicker-toggle-active');
761+
}));
743762
});
744763

745764
describe('datepicker inside mat-form-field', () => {

0 commit comments

Comments
 (0)