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:
parent
bd13dfe39e
commit
36d5a29b9e
@ -1,5 +1,24 @@
|
|||||||
|
<h2 mat-dialog-title>Create Qualification</h2>
|
||||||
|
<mat-dialog-content>
|
||||||
<form [formGroup]="qualificationForm" (ngSubmit)="create()">
|
<form [formGroup]="qualificationForm" (ngSubmit)="create()">
|
||||||
<label for="skill-input">Skill</label>
|
<div class="!space-y-4">
|
||||||
<input id="skill-input" type="text" formControlName="skill">
|
@if (apiErrorMessage) {
|
||||||
<button type="submit">create</button>
|
<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>
|
</form>
|
||||||
|
</mat-dialog-content>
|
||||||
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Reference in New Issue
Block a user