add form to edit employee

This commit is contained in:
Constantin Simonis 2025-01-09 11:36:51 +01:00
parent b0009229d1
commit 4eba5430aa
Signed by: csimonis
GPG Key ID: 758DD9C506603183
6 changed files with 123 additions and 6 deletions

View File

@ -33,7 +33,7 @@
<mat-form-field class="!w-full">
<mat-label>Phone</mat-label>
<input matInput formControlName="phone" required type="number">
<input matInput formControlName="phone" required>
</mat-form-field>
<mat-dialog-actions align="end">

View File

View File

@ -0,0 +1,46 @@
<h2 mat-dialog-title>Create Employee</h2>
<mat-dialog-content>
<form *ngIf="employeeForm" [formGroup]="employeeForm" (ngSubmit)="submit()">
<div class="!space-y-4">
<div class="flex gap-x-4">
<mat-form-field class="!w-full">
<mat-label>First Name</mat-label>
<input matInput formControlName="firstName" required [value]="employee.firstName">
</mat-form-field>
<mat-form-field class="!w-full">
<mat-label>Last Name</mat-label>
<input matInput formControlName="lastName" required [value]="employee.lastName">
</mat-form-field>
</div>
<mat-form-field class="!w-full">
<mat-label>Street</mat-label>
<input matInput formControlName="street" required [value]="employee.street">
</mat-form-field>
<div class="flex gap-x-4">
<mat-form-field class="!w-full">
<mat-label>City</mat-label>
<input matInput formControlName="city" required [value]="employee.city">
</mat-form-field>
<mat-form-field class="!w-1/2">
<mat-label>Postcode</mat-label>
<input matInput formControlName="postcode" minlength="5" maxlength="5" type="number" required [value]="employee.postcode">
</mat-form-field>
</div>
<mat-form-field class="!w-full">
<mat-label>Phone</mat-label>
<input matInput formControlName="phone" required>
</mat-form-field>
<mat-dialog-actions align="end">
<button mat-button mat-dialog-close>Cancel</button>
<button mat-flat-button color="primary" type="submit">Submit</button>
</mat-dialog-actions>
</div>
</form>
</mat-dialog-content>

View File

@ -0,0 +1,63 @@
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<EditComponent> = 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;
}
this.employeeService.create(this.employeeForm.value as Employee).subscribe();
this.dialogRef.close();
}
}

View File

@ -34,7 +34,7 @@
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef class="!text-right"> Actions </th>
<td mat-cell *matCellDef="let employee" class="!text-right !py-4">
<button mat-icon-button color="primary" [matTooltip]="'Edit employee'" class="!mr-2">
<button mat-icon-button color="primary" [matTooltip]="'Edit employee'" class="!mr-2" (click)="showEditEmployeeModal(employee)">
<mat-icon>edit</mat-icon>
</button>
<button mat-icon-button color="warn" [matTooltip]="'Delete employee'" (click)="openDeleteDialogue(employee)">

View File

@ -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<Employee[]> = 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();
});
}
}