Implement error handling for the create qualification form (#19)

Co-authored-by: Phan Huy Tran <p.tran@neusta.de>
Reviewed-on: #19
Reviewed-by: Constantin Simonis <constantin@simonis.lol>
This commit is contained in:
Huy 2025-01-08 10:31:38 +00:00 committed by Get in my car i have candy
parent b7aa0471ad
commit fc6ea3b907
2 changed files with 89 additions and 35 deletions

View File

@ -1,5 +1,24 @@
<form [formGroup]="qualificationForm" (ngSubmit)="create()"> <h2 mat-dialog-title>Create Qualification</h2>
<label for="skill-input">Skill</label> <mat-dialog-content>
<input id="skill-input" type="text" formControlName="skill"> <form [formGroup]="qualificationForm" (ngSubmit)="create()">
<button type="submit">create</button> <div class="!space-y-4">
</form> @if (apiErrorMessage) {
<mat-error>{{ apiErrorMessage }}</mat-error>
}
<mat-form-field class="!w-full">
<mat-label>Skill</mat-label>
<input matInput
formControlName="skill"
required>
<mat-error *ngIf="isFieldInvalid('skill')">
{{ getErrorMessage('skill') }}
</mat-error>
</mat-form-field>
<mat-dialog-actions align="end">
<button mat-flat-button color="primary" type="submit">Create</button>
</mat-dialog-actions>
</div>
</form>
</mat-dialog-content>

View File

@ -1,14 +1,26 @@
import {Component, inject} from '@angular/core'; import {Component, inject} from '@angular/core';
import {FormBuilder, ReactiveFormsModule} from "@angular/forms"; import {FormBuilder, ReactiveFormsModule, Validators} from "@angular/forms";
import EmployeeApiService from "../services/employee-api.service";
import QualificationService from "../services/qualification.service"; import QualificationService from "../services/qualification.service";
import {Router} from "@angular/router"; import {MatDialogActions, MatDialogContent, MatDialogRef, MatDialogTitle} from "@angular/material/dialog";
import {MatDialogRef} from "@angular/material/dialog"; import {NgIf} from "@angular/common";
import {MatError, MatFormField, MatLabel} from "@angular/material/form-field";
import {MatButton} from "@angular/material/button";
import {MatInput} from "@angular/material/input";
import {filter} from "rxjs";
@Component({ @Component({
selector: 'app-create-qualification', selector: 'app-create-qualification',
imports: [ imports: [
ReactiveFormsModule ReactiveFormsModule,
MatError,
NgIf,
MatLabel,
MatDialogTitle,
MatDialogContent,
MatFormField,
MatDialogActions,
MatButton,
MatInput
], ],
templateUrl: './create-qualification.component.html', templateUrl: './create-qualification.component.html',
styleUrl: './create-qualification.component.css' styleUrl: './create-qualification.component.css'
@ -18,24 +30,47 @@ export class CreateQualificationComponent {
private qualificationService: QualificationService = inject(QualificationService); private qualificationService: QualificationService = inject(QualificationService);
private dialogRef: MatDialogRef<CreateQualificationComponent> = inject(MatDialogRef); private dialogRef: MatDialogRef<CreateQualificationComponent> = inject(MatDialogRef);
public apiErrorMessage: string = '';
qualificationForm = this.formBuilder.group({ qualificationForm = this.formBuilder.group({
'skill': [''], 'skill': ['', Validators.required],
}); });
isFieldInvalid(fieldName: string): boolean {
const field = this.qualificationForm.get(fieldName);
if (!field) {
throw new Error('Form field does not exist: ' + fieldName)
}
return field.invalid && (field.dirty || field.touched);
}
getErrorMessage(fieldName: string): string {
const field = this.qualificationForm.get(fieldName);
if (field?.errors?.['required']) {
return 'This field is required';
}
return '';
}
create() { create() {
if (this.qualificationForm.valid) { if (!this.qualificationForm.valid) {
console.error('Validation failed');
return;
}
this.qualificationService.create(this.qualificationForm.value).subscribe({ this.qualificationService.create(this.qualificationForm.value).subscribe({
next: (createdQualification) => { next: (createdQualification) => {
this.dialogRef.close(createdQualification); this.dialogRef.close(createdQualification);
}, },
error: (error) => { error: (error) => {
console.error('Error creating qualification:', error); console.error('Error creating qualification:', error);
this.apiErrorMessage = 'API Error';
} }
}); });
} }
}
cancel() {
this.dialogRef.close();
}
} }