Skip to content

Commit 8f0e654

Browse files
authored
fix(material/datepicker): unable to pass in errorStateMatcher through binding on range input (#21210)
Fixes that the `errorStateMatcher` on the date range inputs wasn't marked as an `Input` which made it impossible to change. Fixes #21205.
1 parent f8df9f8 commit 8f0e654

File tree

3 files changed

+35
-5
lines changed

3 files changed

+35
-5
lines changed

src/material/datepicker/date-range-input-parts.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,8 @@ const _MatDateRangeInputBase:
203203
],
204204
// These need to be specified explicitly, because some tooling doesn't
205205
// seem to pick them up from the base class. See #20932.
206-
outputs: ['dateChange', 'dateInput']
206+
outputs: ['dateChange', 'dateInput'],
207+
inputs: ['errorStateMatcher']
207208
})
208209
export class MatStartDate<D> extends _MatDateRangeInputBase<D> implements
209210
CanUpdateErrorState, DoCheck, OnInit {
@@ -307,7 +308,8 @@ export class MatStartDate<D> extends _MatDateRangeInputBase<D> implements
307308
],
308309
// These need to be specified explicitly, because some tooling doesn't
309310
// seem to pick them up from the base class. See #20932.
310-
outputs: ['dateChange', 'dateInput']
311+
outputs: ['dateChange', 'dateInput'],
312+
inputs: ['errorStateMatcher']
311313
})
312314
export class MatEndDate<D> extends _MatDateRangeInputBase<D> implements
313315
CanUpdateErrorState, DoCheck, OnInit {

src/material/datepicker/date-range-input.spec.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
} from '@angular/forms';
1212
import {NoopAnimationsModule} from '@angular/platform-browser/animations';
1313
import {OverlayContainer} from '@angular/cdk/overlay';
14-
import {MatNativeDateModule} from '@angular/material/core';
14+
import {ErrorStateMatcher, MatNativeDateModule} from '@angular/material/core';
1515
import {MatDatepickerModule} from './datepicker-module';
1616
import {MatFormFieldModule} from '@angular/material/form-field';
1717
import {MatInputModule} from '@angular/material/input';
@@ -826,6 +826,15 @@ describe('MatDateRangeInput', () => {
826826
subscription.unsubscribe();
827827
});
828828

829+
it('should be able to pass in a different error state matcher through an input', () => {
830+
const fixture = createComponent(RangePickerErrorStateMatcher);
831+
fixture.detectChanges();
832+
const {startInput, endInput, matcher} = fixture.componentInstance;
833+
834+
expect(startInput.errorStateMatcher).toBe(matcher);
835+
expect(endInput.errorStateMatcher).toBe(matcher);
836+
});
837+
829838
});
830839

831840
@Component({
@@ -974,3 +983,22 @@ class RangePickerWithCustomValidator {
974983
min: Date;
975984
max: Date;
976985
}
986+
987+
988+
@Component({
989+
template: `
990+
<mat-form-field>
991+
<mat-date-range-input [rangePicker]="rangePicker">
992+
<input matStartDate [errorStateMatcher]="matcher"/>
993+
<input matEndDate [errorStateMatcher]="matcher"/>
994+
</mat-date-range-input>
995+
996+
<mat-date-range-picker #rangePicker></mat-date-range-picker>
997+
</mat-form-field>
998+
`
999+
})
1000+
class RangePickerErrorStateMatcher {
1001+
@ViewChild(MatStartDate) startInput: MatStartDate<Date>;
1002+
@ViewChild(MatEndDate) endInput: MatEndDate<Date>;
1003+
matcher: ErrorStateMatcher = {isErrorState: () => false};
1004+
}

tools/public_api_guard/material/datepicker.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ export declare class MatEndDate<D> extends _MatDateRangeInputBase<D> implements
407407
ngDoCheck(): void;
408408
ngOnInit(): void;
409409
static ngAcceptInputType_disabled: BooleanInput;
410-
static ɵdir: i0.ɵɵDirectiveDefWithMeta<MatEndDate<any>, "input[matEndDate]", never, {}, { "dateChange": "dateChange"; "dateInput": "dateInput"; }, never>;
410+
static ɵdir: i0.ɵɵDirectiveDefWithMeta<MatEndDate<any>, "input[matEndDate]", never, { "errorStateMatcher": "errorStateMatcher"; }, { "dateChange": "dateChange"; "dateInput": "dateInput"; }, never>;
411411
static ɵfac: i0.ɵɵFactoryDef<MatEndDate<any>, [null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
412412
}
413413

@@ -519,7 +519,7 @@ export declare class MatStartDate<D> extends _MatDateRangeInputBase<D> implement
519519
ngDoCheck(): void;
520520
ngOnInit(): void;
521521
static ngAcceptInputType_disabled: BooleanInput;
522-
static ɵdir: i0.ɵɵDirectiveDefWithMeta<MatStartDate<any>, "input[matStartDate]", never, {}, { "dateChange": "dateChange"; "dateInput": "dateInput"; }, never>;
522+
static ɵdir: i0.ɵɵDirectiveDefWithMeta<MatStartDate<any>, "input[matStartDate]", never, { "errorStateMatcher": "errorStateMatcher"; }, { "dateChange": "dateChange"; "dateInput": "dateInput"; }, never>;
523523
static ɵfac: i0.ɵɵFactoryDef<MatStartDate<any>, [null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
524524
}
525525

0 commit comments

Comments
 (0)