Skip to content

Commit 2b41d49

Browse files
authored
feat: Add support of matTimepicker error messages. (#77)
DatepickerParseError has been deprecated
1 parent fa059e3 commit 2b41d49

File tree

6 files changed

+85
-21
lines changed

6 files changed

+85
-21
lines changed

projects/demo/src/app/app.component.html

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,13 @@
6868
<span *ngxMatErrorDef="let error; for: 'required'; withControl: 'end'">End date is required.</span>
6969
</mat-error>
7070
</mat-form-field>
71+
<mat-form-field appearance="outline">
72+
<mat-label>Timepicker</mat-label>
73+
<input matInput [matTimepicker]="timepicker1" matTimepickerMin="8:30" matTimepickerMax="18:00" [formControl]="time" />
74+
<mat-timepicker-toggle matIconSuffix [for]="timepicker1"></mat-timepicker-toggle>
75+
<mat-timepicker #timepicker1></mat-timepicker>
76+
<mat-error ngx-mat-errors> </mat-error>
77+
</mat-form-field>
7178
</mat-card-content>
7279
</mat-card>
7380

@@ -128,6 +135,13 @@
128135
<span *ngxMatErrorDef="let error; for: 'required'; withControl: endDateModel">End date is required.</span>
129136
</mat-error>
130137
</mat-form-field>
138+
<mat-form-field appearance="outline">
139+
<mat-label>Timepicker</mat-label>
140+
<input matInput [matTimepicker]="timepicker2" matTimepickerMin="8:30" matTimepickerMax="18:00" [(ngModel)]="value6" />
141+
<mat-timepicker-toggle matIconSuffix [for]="timepicker2"></mat-timepicker-toggle>
142+
<mat-timepicker #timepicker2></mat-timepicker>
143+
<mat-error ngx-mat-errors> </mat-error>
144+
</mat-form-field>
131145
</mat-card-content>
132146
</mat-card>
133147

projects/demo/src/app/app.component.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { MatDatepickerModule } from '@angular/material/datepicker';
1919
import { MatFormFieldModule } from '@angular/material/form-field';
2020
import { MatInputModule } from '@angular/material/input';
2121
import { MatRadioModule } from '@angular/material/radio';
22+
import { MatTimepickerModule } from '@angular/material/timepicker';
2223
import { MatToolbarModule } from '@angular/material/toolbar';
2324
import {
2425
NgxMatErrorDef,
@@ -48,6 +49,7 @@ import { AsyncMinLengthValidator } from './async-min-length-validator.directive'
4849
AsyncMinLengthValidator,
4950
MatDatepickerModule,
5051
MatNativeDateModule,
52+
MatTimepickerModule,
5153
NgxMatErrorsForDateRangePicker,
5254
],
5355
})
@@ -65,6 +67,7 @@ export class AppComponent {
6567
(control) => of(Validators.minLength(3)(control)).pipe(delay(250)),
6668
],
6769
});
70+
readonly time = new FormControl<Date | null>(new Date('2024-11-22 12:30'));
6871

6972
readonly dateRange = new FormGroup({
7073
start: new FormControl<Date | null>(null, [Validators.required]),
@@ -78,6 +81,7 @@ export class AppComponent {
7881
value3: string | null = null;
7982
value4: Date | null = null;
8083
value5: Date | null = null;
84+
value6: Date | null = null;
8185

8286
readonly outerErrorControl = new FormControl<string | null>(null);
8387
getControl(

projects/ngx-mat-errors/src/lib/locales/en.ts

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
import { formatDate } from '@angular/common';
22
import { type FactoryProvider, LOCALE_ID } from '@angular/core';
33
import type {
4-
DatepickerParseError,
54
EndDateError,
65
ErrorMessages,
76
LengthError,
87
MaxError,
98
MinError,
109
StartDateError,
10+
ParseError,
1111
} from '../types';
1212
import { NGX_MAT_ERROR_DEFAULT_OPTIONS } from '../ngx-mat-errors.component';
1313

1414
export function errorMessagesEnFactory(
1515
locale: string,
16-
format = 'shortDate'
16+
dateFormat = 'shortDate',
17+
timeFormat = 'shortTime'
1718
): ErrorMessages {
1819
return {
1920
min: (error: MinError) =>
@@ -27,23 +28,36 @@ export function errorMessagesEnFactory(
2728
maxlength: (error: LengthError) =>
2829
`Please enter no more than ${error.requiredLength} characters.`,
2930
matDatepickerMin: (error: MinError<Date>) => {
30-
const formatted = formatDate(error.min, format, locale);
31+
const formatted = formatDate(error.min, dateFormat, locale);
3132
return `Please enter a date greater than or equal to ${
3233
formatted ?? error.min
3334
}.`;
3435
},
3536
matDatepickerMax: (error: MaxError<Date>) => {
36-
const formatted = formatDate(error.max, format, locale);
37+
const formatted = formatDate(error.max, dateFormat, locale);
3738
return `Please enter a date less than or equal to ${
3839
formatted ?? error.max
3940
}.`;
4041
},
41-
matDatepickerParse: (error: DatepickerParseError) => `Invalid date format.`,
42+
matDatepickerParse: (error: ParseError) => `Invalid date format.`,
4243
matStartDateInvalid: (error: StartDateError<Date>) =>
4344
`Start date cannot be after end date.`,
4445
matEndDateInvalid: (error: EndDateError<Date>) =>
4546
`End date cannot be before start date.`,
4647
matDatepickerFilter: 'This date is filtered out.',
48+
matTimepickerParse: (error: ParseError) => `Invalid time format.`,
49+
matTimepickerMin: (error: MinError<Date>) => {
50+
const formatted = formatDate(error.min, timeFormat, locale);
51+
return `Please enter a time greater than or equal to ${
52+
formatted ?? error.min
53+
}.`;
54+
},
55+
matTimepickerMax: (error: MaxError<Date>) => {
56+
const formatted = formatDate(error.max, timeFormat, locale);
57+
return `Please enter a time less than or equal to ${
58+
formatted ?? error.max
59+
}.`;
60+
},
4761
};
4862
}
4963

projects/ngx-mat-errors/src/lib/locales/hu.ts

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { formatDate } from '@angular/common';
22
import { type FactoryProvider, LOCALE_ID } from '@angular/core';
33
import type {
4-
DatepickerParseError,
4+
ParseError,
55
EndDateError,
66
ErrorMessages,
77
LengthError,
@@ -13,7 +13,8 @@ import { NGX_MAT_ERROR_DEFAULT_OPTIONS } from '../ngx-mat-errors.component';
1313

1414
export function errorMessagesHuFactory(
1515
locale: string,
16-
format = 'shortDate'
16+
dateFormat = 'shortDate',
17+
timeFormat = 'shortTime'
1718
): ErrorMessages {
1819
return {
1920
min: (error: MinError) => `Nem lehet kisebb, mint ${error.min}.`,
@@ -26,21 +27,34 @@ export function errorMessagesHuFactory(
2627
`Legfeljebb ${error.requiredLength} karakter hosszú lehet.`,
2728
server: (error: string) => error,
2829
matDatepickerMin: (error: MinError<Date>) => {
29-
const formatted = formatDate(error.min, format, locale);
30+
const formatted = formatDate(error.min, dateFormat, locale);
3031
// In Hungarian date ends with '.'
3132
return `Nem lehet korábbi dátum, mint ${formatted ?? error.min}`;
3233
},
3334
matDatepickerMax: (error: MaxError<Date>) => {
34-
const formatted = formatDate(error.max, format, locale);
35+
const formatted = formatDate(error.max, dateFormat, locale);
3536
// In Hungarian date ends with '.'
3637
return `Nem lehet későbbi dátum, mint ${formatted ?? error.max}`;
3738
},
38-
matDatepickerParse: (error: DatepickerParseError) => `Érvénytelen dátum.`,
39+
matDatepickerParse: (error: ParseError) => `Érvénytelen dátum.`,
3940
matStartDateInvalid: (error: StartDateError<Date>) =>
4041
`A kezdő dátum nem lehet a vég dátum után.`,
4142
matEndDateInvalid: (error: EndDateError<Date>) =>
42-
`A vég dátum nem lehe a kezdő dátum előtt.`,
43+
`A vég dátum nem lehet a kezdő dátum előtt.`,
4344
matDatepickerFilter: 'Ez a dátum nem engedélyezett.',
45+
matTimepickerParse: (error: ParseError) => `Érvénytelen idő.`,
46+
matTimepickerMin: (error: MinError<Date>) => {
47+
const formatted = formatDate(error.min, timeFormat, locale);
48+
return `Nem lehet korábbi idő, mint ${
49+
formatted ?? error.min
50+
}.`;
51+
},
52+
matTimepickerMax: (error: MaxError<Date>) => {
53+
const formatted = formatDate(error.max, timeFormat, locale);
54+
return `Nem lehet későbbi idő, mint ${
55+
formatted ?? error.max
56+
}.`;
57+
},
4458
};
4559
}
4660

projects/ngx-mat-errors/src/lib/locales/pt-br.ts

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { formatDate } from '@angular/common';
22
import { type FactoryProvider, LOCALE_ID } from '@angular/core';
33
import type {
4-
DatepickerParseError,
4+
ParseError,
55
EndDateError,
66
ErrorMessages,
77
LengthError,
@@ -13,7 +13,8 @@ import { NGX_MAT_ERROR_DEFAULT_OPTIONS } from '../ngx-mat-errors.component';
1313

1414
export function errorMessagesPtBtFactory(
1515
locale: string,
16-
format = 'shortDate'
16+
dateFormat = 'shortDate',
17+
timeFormat = 'shortTime'
1718
): ErrorMessages {
1819
return {
1920
min: (error: MinError) => `Informe um valor igual ou maior a ${error.min}.`,
@@ -25,19 +26,32 @@ export function errorMessagesPtBtFactory(
2526
maxlength: (error: LengthError) =>
2627
`O campo não pode ter mais que ${error.requiredLength} caracteres.`,
2728
matDatepickerMin: (error: MinError<Date>) => {
28-
const formatted = formatDate(error.min, format, locale);
29+
const formatted = formatDate(error.min, dateFormat, locale);
2930
return `Informe uma data maior ou igual a ${formatted ?? error.min}.`;
3031
},
3132
matDatepickerMax: (error: MaxError<Date>) => {
32-
const formatted = formatDate(error.max, format, locale);
33+
const formatted = formatDate(error.max, dateFormat, locale);
3334
return `Informe uma data menor ou igual a ${formatted ?? error.max}.`;
3435
},
35-
matDatepickerParse: (error: DatepickerParseError) => `Invalid date format.`,
36+
matDatepickerParse: (error: ParseError) => `Formato de data inválido.`,
3637
matStartDateInvalid: (error: StartDateError<Date>) =>
37-
`Start date cannot be after end date.`,
38+
`A data de início não pode ser posterior à data de término.`,
3839
matEndDateInvalid: (error: EndDateError<Date>) =>
39-
`End date cannot be before start date.`,
40-
matDatepickerFilter: 'This date is filtered out.',
40+
`A data de término não pode ser anterior à data de início.`,
41+
matDatepickerFilter: 'Esta data é filtrada.',
42+
matTimepickerParse: (error: ParseError) => `Formato de hora inválido.`,
43+
matTimepickerMin: (error: MinError<Date>) => {
44+
const formatted = formatDate(error.min, timeFormat, locale);
45+
return `Insira um horário maior ou igual a ${
46+
formatted ?? error.min
47+
}.`;
48+
},
49+
matTimepickerMax: (error: MaxError<Date>) => {
50+
const formatted = formatDate(error.max, timeFormat, locale);
51+
return `Insira um horário menor ou igual a ${
52+
formatted ?? error.max
53+
}.`;
54+
},
4155
};
4256
}
4357

projects/ngx-mat-errors/src/lib/types.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,12 @@ export interface EndDateError<D> {
8383
}
8484

8585
/**
86-
* For errors: 'matDatepickerParse'
86+
* For errors: 'matDatepickerParse', 'matTimepickerParse'
8787
*/
88-
export interface DatepickerParseError {
88+
export interface ParseError {
8989
text: string;
9090
}
91+
/**
92+
* @deprecated to be removed in version 20. Please use ParseError instead
93+
*/
94+
export type DatepickerParseError = ParseError;

0 commit comments

Comments
 (0)