add delete functionality

This commit is contained in:
Constantin Simonis 2024-12-18 13:47:58 +01:00
parent 53c0fde21f
commit 0ec0d07c60
Signed by: csimonis
GPG Key ID: 758DD9C506603183
6 changed files with 84 additions and 17 deletions

View File

@ -0,0 +1,6 @@
<h2 mat-dialog-title>Delete {{employee.firstName}} {{employee.lastName}}</h2>
<mat-dialog-content>Are you sure you want to delete {{employee.firstName}} {{employee.lastName}}? This cant be undone.</mat-dialog-content>
<mat-dialog-actions>
<button mat-button mat-dialog-close>Cancel</button>
<button mat-button [mat-dialog-close]="true" (click)="deleteEmployee(employee.id ?? 0)">Delete</button>
</mat-dialog-actions>

View File

@ -0,0 +1,38 @@
import {Component, EventEmitter, Inject, inject, Output} from '@angular/core';
import {Employee} from "../Employee";
import {
MAT_DIALOG_DATA,
MatDialogActions,
MatDialogClose,
MatDialogContent,
MatDialogTitle
} from "@angular/material/dialog";
import {MatButton} from "@angular/material/button";
import ApiService from "../services/api.service";
@Component({
selector: 'app-delete-employee',
imports: [
MatDialogContent,
MatDialogTitle,
MatDialogActions,
MatButton,
MatDialogClose
],
templateUrl: './delete-employee.component.html',
standalone: true,
styleUrl: './delete-employee.component.css'
})
export class DeleteEmployeeComponent {
private apiService: ApiService = inject(ApiService);
@Output()
private deleteEvent: EventEmitter<null> = new EventEmitter();
constructor(@Inject(MAT_DIALOG_DATA) protected employee: Employee) {
}
deleteEmployee(id: number) {
this.apiService.deleteById(id).subscribe();
}
}

View File

@ -37,7 +37,7 @@
<button mat-icon-button color="primary" [matTooltip]="'Edit employee'" class="!mr-2">
<mat-icon>edit</mat-icon>
</button>
<button mat-icon-button color="warn" [matTooltip]="'Delete employee'">
<button mat-icon-button color="warn" [matTooltip]="'Delete employee'" (click)="openDeleteDialogue(employee)">
<mat-icon>delete</mat-icon>
</button>
</td>

View File

@ -1,6 +1,6 @@
import {Component} from '@angular/core';
import {CommonModule} from '@angular/common';
import { Observable, catchError, of, retry } from 'rxjs';
import {catchError, Observable, of, retry} from 'rxjs';
import {HttpClient, HttpErrorResponse} from '@angular/common/http';
import {Employee} from '../Employee';
@ -14,6 +14,8 @@ import { MatTooltipModule } from '@angular/material/tooltip';
import {MatMenuModule} from '@angular/material/menu';
import {MatTableModule} from '@angular/material/table';
import {MatSortModule} from '@angular/material/sort';
import {MatDialog} from "@angular/material/dialog";
import {DeleteEmployeeComponent} from "../delete-employee/delete-employee.component";
@Component({
selector: 'app-employee-list',
@ -45,7 +47,8 @@ export class EmployeeListComponent {
constructor(
private readonly httpClient: HttpClient,
private readonly snackBar: MatSnackBar
private readonly snackBar: MatSnackBar,
private readonly deleteDialogue: MatDialog
) {
this.employees$ = this.fetchEmployees();
}
@ -71,4 +74,8 @@ export class EmployeeListComponent {
panelClass: ['!bg-red-50', '!text-red-900', '!border', '!border-red-100']
});
}
protected openDeleteDialogue(employee: Employee): void {
this.deleteDialogue.open(DeleteEmployeeComponent, {data: employee});
}
}

View File

@ -0,0 +1,16 @@
import {inject, Injectable} from "@angular/core";
import {HttpClient} from "@angular/common/http";
import {Observable} from "rxjs";
import {Employee} from "../Employee";
@Injectable({
providedIn: 'root'
})
export default class ApiService {
private http: HttpClient = inject(HttpClient);
public deleteById(id: number): Observable<Employee> {
return this.http.delete(`http://localhost:8089/employees/${id}`)
}
}