diff --git a/src/app/employee/create/create.component.html b/src/app/employee/create/create.component.html index 50c81ea..268bf0a 100644 --- a/src/app/employee/create/create.component.html +++ b/src/app/employee/create/create.component.html @@ -33,7 +33,7 @@ Phone - + diff --git a/src/app/employee/edit/edit.component.css b/src/app/employee/edit/edit.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/employee/edit/edit.component.html b/src/app/employee/edit/edit.component.html new file mode 100644 index 0000000..d782a1a --- /dev/null +++ b/src/app/employee/edit/edit.component.html @@ -0,0 +1,46 @@ +Edit Employee + + + + + + First Name + + + + + Last Name + + + + + + Street + + + + + + City + + + + + Postcode + + + + + + Phone + + + + + Cancel + Submit + + + + + diff --git a/src/app/employee/edit/edit.component.ts b/src/app/employee/edit/edit.component.ts new file mode 100644 index 0000000..535f94d --- /dev/null +++ b/src/app/employee/edit/edit.component.ts @@ -0,0 +1,68 @@ +import {Component, inject, OnInit} from '@angular/core'; +import {FormBuilder, FormGroup, ReactiveFormsModule, Validators} from "@angular/forms"; +import { + MAT_DIALOG_DATA, + MatDialogActions, + MatDialogClose, + MatDialogContent, + MatDialogRef, + MatDialogTitle +} from "@angular/material/dialog"; +import {NgIf} from "@angular/common"; +import {MatFormField} from "@angular/material/form-field"; +import {MatInput, MatLabel} from "@angular/material/input"; +import {MatButton} from "@angular/material/button"; +import {Employee} from "../Employee"; +import EmployeeApiService from "../../services/employee-api.service"; + +@Component({ + selector: 'app-edit', + imports: [ + MatDialogTitle, + MatDialogContent, + NgIf, + ReactiveFormsModule, + MatFormField, + MatInput, + MatDialogActions, + MatButton, + MatDialogClose, + MatLabel + ], + templateUrl: './edit.component.html', + standalone: true, + styleUrl: './edit.component.css' +}) +export class EditComponent implements OnInit { + employeeForm: FormGroup | null = null; + formBuilder: FormBuilder = inject(FormBuilder); + employeeService: EmployeeApiService = inject(EmployeeApiService); + dialogRef: MatDialogRef = inject(MatDialogRef); + employee: Employee = inject(MAT_DIALOG_DATA); + + ngOnInit(): void { + this.employeeForm = this.formBuilder.group({ + firstName: [this.employee.firstName, Validators.required], + lastName: [this.employee.lastName, Validators.required], + street: [this.employee.street, Validators.required], + postcode: [this.employee.postcode, [Validators.required, Validators.minLength(5), Validators.maxLength(5)]], + city: [this.employee.city, Validators.required], + phone: [this.employee.phone, Validators.required], + }); + } + + submit() { + if (this.employeeForm === null || !this.employeeForm.valid) { + console.error('Form invalid'); + return; + } + + if (this.employee.id === undefined) { + console.error('Employee ID is undefined'); + return; + } + + this.employeeService.update(this.employeeForm.value as Employee, this.employee.id).subscribe(); + this.dialogRef.close(); + } +} diff --git a/src/app/employee/table/table.component.html b/src/app/employee/table/table.component.html index d5f743e..f999470 100644 --- a/src/app/employee/table/table.component.html +++ b/src/app/employee/table/table.component.html @@ -34,7 +34,7 @@ Actions - + edit diff --git a/src/app/employee/table/table.component.ts b/src/app/employee/table/table.component.ts index b1e6f93..716e6d5 100644 --- a/src/app/employee/table/table.component.ts +++ b/src/app/employee/table/table.component.ts @@ -18,6 +18,7 @@ import {MatDialog} from "@angular/material/dialog"; import {DeleteComponent} from "../delete/delete.component"; import EmployeeApiService from "../../services/employee-api.service"; import {CreateComponent} from "../create/create.component"; +import {EditComponent} from "../edit/edit.component"; @Component({ selector: 'app-employee-list', @@ -41,8 +42,7 @@ import {CreateComponent} from "../create/create.component"; export class TableComponent implements OnInit{ private readonly apiService: EmployeeApiService = inject(EmployeeApiService); private readonly snackBar: MatSnackBar = inject(MatSnackBar); - private readonly deleteDialogue: MatDialog = inject(MatDialog); - private readonly createEmployeeDialogue: MatDialog = inject(MatDialog); + private readonly matDialog: MatDialog = inject(MatDialog); private static readonly MAX_RETRIES = 3; public employees$: Observable = of([]); @@ -73,7 +73,7 @@ export class TableComponent implements OnInit{ } protected openDeleteDialogue(employee: Employee): void { - this.deleteDialogue.open(DeleteComponent, {data: employee}) + this.matDialog.open(DeleteComponent, {data: employee}) .afterClosed() .subscribe(() => { this.employees$ = this.fetchEmployees(); @@ -81,10 +81,18 @@ export class TableComponent implements OnInit{ } protected showCreateEmployeeModal() { - this.createEmployeeDialogue.open(CreateComponent) + this.matDialog.open(CreateComponent) .afterClosed() .subscribe(() => { this.employees$ = this.fetchEmployees(); }); } + + protected showEditEmployeeModal(employee: Employee) { + this.matDialog.open(EditComponent, {data: employee}) + .afterClosed() + .subscribe(() => { + this.employees$ = this.fetchEmployees(); + }); + } } diff --git a/src/app/qualification/delete/delete.component.ts b/src/app/qualification/delete/delete.component.ts index 9ffd4e5..e77996b 100644 --- a/src/app/qualification/delete/delete.component.ts +++ b/src/app/qualification/delete/delete.component.ts @@ -8,7 +8,6 @@ import { } from "@angular/material/dialog"; import {FormsModule, ReactiveFormsModule} from "@angular/forms"; import QualificationService from "../../services/qualification.service"; -import {MatError} from "@angular/material/form-field"; import {MatButton} from "@angular/material/button"; @Component({ @@ -18,11 +17,11 @@ import {MatButton} from "@angular/material/button"; MatDialogContent, MatDialogTitle, ReactiveFormsModule, - MatError, MatDialogActions, MatButton ], templateUrl: './delete.component.html', + standalone: true, styleUrl: './delete.component.css' }) export class DeleteComponent { diff --git a/src/app/qualification/table/table.component.ts b/src/app/qualification/table/table.component.ts index 86847dd..e89a923 100644 --- a/src/app/qualification/table/table.component.ts +++ b/src/app/qualification/table/table.component.ts @@ -1,12 +1,12 @@ import {Component, inject, OnInit} from '@angular/core'; import {Observable} from "rxjs"; import {Qualification} from "../Qualification"; +import {AsyncPipe} from "@angular/common"; import {MatDialog} from "@angular/material/dialog"; import QualificationService from "../../services/qualification.service"; import {CreateComponent} from "../create/create.component"; import {EditComponent} from "../edit/edit.component"; import {DeleteComponent} from "../delete/delete.component"; -import {AsyncPipe} from "@angular/common"; import {MatButton, MatIconButton} from "@angular/material/button"; import { MatCell, @@ -14,7 +14,10 @@ import { MatColumnDef, MatHeaderCell, MatHeaderCellDef, - MatHeaderRow, MatHeaderRowDef, MatRow, MatRowDef, + MatHeaderRow, + MatHeaderRowDef, + MatRow, + MatRowDef, MatTable } from "@angular/material/table"; import {MatIcon} from "@angular/material/icon"; @@ -45,6 +48,7 @@ import {MatProgressSpinner} from "@angular/material/progress-spinner"; MatProgressSpinner ], templateUrl: './table.component.html', + standalone: true, styleUrl: './table.component.css' }) export class QualificationsComponent implements OnInit { diff --git a/src/app/services/employee-api.service.ts b/src/app/services/employee-api.service.ts index 33fd804..c134dad 100644 --- a/src/app/services/employee-api.service.ts +++ b/src/app/services/employee-api.service.ts @@ -23,4 +23,8 @@ export default class EmployeeApiService { public create(employee: Employee) { return this.http.post(`${EmployeeApiService.BASE_URL}/employees`, employee) } + + public update(employee: Employee, id: number) { + return this.http.patch(`${EmployeeApiService.BASE_URL}/employees/${id}`, employee) + } }