diff --git a/modules/ui/src/app/pages/reports/components/filter-dialog/filter-dialog.component.html b/modules/ui/src/app/pages/reports/components/filter-dialog/filter-dialog.component.html index 96ce89d22..17c4a7915 100644 --- a/modules/ui/src/app/pages/reports/components/filter-dialog/filter-dialog.component.html +++ b/modules/ui/src/app/pages/reports/components/filter-dialog/filter-dialog.component.html @@ -81,12 +81,14 @@

{{ data.title }}

Dates {{ data.title }} (dateChange)="endDateChanged($event)" /> Please, select the correct date range in mm/dd/yyyy format. diff --git a/modules/ui/src/app/pages/reports/components/filter-dialog/filter-dialog.component.ts b/modules/ui/src/app/pages/reports/components/filter-dialog/filter-dialog.component.ts index 3ac37973c..26bce3260 100644 --- a/modules/ui/src/app/pages/reports/components/filter-dialog/filter-dialog.component.ts +++ b/modules/ui/src/app/pages/reports/components/filter-dialog/filter-dialog.component.ts @@ -36,7 +36,9 @@ import { FormBuilder, FormControl, FormGroup, + FormGroupDirective, FormsModule, + NgForm, NgModel, ReactiveFormsModule, } from '@angular/forms'; @@ -52,7 +54,7 @@ import { MatDatepickerInputEvent, MatDatepickerModule, } from '@angular/material/datepicker'; -import { MatNativeDateModule } from '@angular/material/core'; +import { ErrorStateMatcher, MatNativeDateModule } from '@angular/material/core'; import { FilterName, DateRange as LocalDateRange, @@ -64,6 +66,22 @@ import { } from '../../../../model/testrun-status'; import { DeviceValidators } from '../../../devices/components/device-form/device.validators'; +class DateErrorStateMatcher implements ErrorStateMatcher { + isErrorState( + control: FormControl | null, + form: FormGroupDirective | NgForm | null + ): boolean { + const isSubmitted = form && form.submitted; + return !!( + control && + control.errors && + control.errors['matDatepickerParse'].text.trim().length > 0 && + control.invalid && + (control.touched || isSubmitted) + ); + } +} + interface DialogData { trigger: ElementRef; filter: string; @@ -244,6 +262,8 @@ export class FilterDialogComponent this.dialogRef.close(); } + dateMatcher = new DateErrorStateMatcher(); + startDateChanged(event: MatDatepickerInputEvent) { const date = event.value; if (date && date.getFullYear() > this.today.getFullYear()) { diff --git a/modules/ui/src/app/pages/reports/components/filter-header/filter-header.component.ts b/modules/ui/src/app/pages/reports/components/filter-header/filter-header.component.ts index dae20b609..c261a8347 100644 --- a/modules/ui/src/app/pages/reports/components/filter-header/filter-header.component.ts +++ b/modules/ui/src/app/pages/reports/components/filter-header/filter-header.component.ts @@ -14,7 +14,6 @@ export interface OpenFilterEvent { @Component({ selector: 'app-filter-header', - imports: [ MatIconModule, MatButtonModule,