Manage SystemManagers

This commit is contained in:
Bastian Wagner
2025-01-02 13:16:45 +01:00
parent bf64103369
commit efbfc2eb01
18 changed files with 266 additions and 23 deletions

View File

@@ -5,11 +5,18 @@ import { AgGridAngular } from 'ag-grid-angular';
import { MatDialogRef, MAT_DIALOG_DATA, MatDialog, MatDialogModule } from '@angular/material/dialog';
import { HotToastService } from '@ngxpert/hot-toast';
import { ApiService } from '../../../../shared/api.service';
import { MatButtonModule } from '@angular/material/button';
import { MatInputModule } from '@angular/material/input';
import { MatFormFieldModule } from '@angular/material/form-field';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { AuthService } from '../../../../core/auth/auth.service';
import { HttpErrorResponse } from '@angular/common/http';
@Component({
selector: 'app-system-manager',
standalone: true,
imports: [AgGridAngular, MatDialogModule],
imports: [AgGridAngular, MatDialogModule, MatButtonModule, MatInputModule, MatFormFieldModule, CommonModule, FormsModule],
templateUrl: './system-manager.component.html',
styleUrl: './system-manager.component.scss'
})
@@ -22,14 +29,32 @@ export class SystemManagerComponent {
readonly system = inject<any>(MAT_DIALOG_DATA);
private api: ApiService = inject(ApiService);
private dialog: MatDialog = inject(MatDialog);
private toast = inject(HotToastService);
private dialog: MatDialog = inject(MatDialog);
private toast = inject(HotToastService);
private authService = inject(AuthService);
email = null;
constructor() {
this.gridOptions.columnDefs = [
{ colId: 'name', field: 'firstName', headerName: 'Name', sort: 'asc', flex: 1, cellRenderer: (data: any) => data.data.firstName + ' ' + data.data.lastName, sortable: true, filter: true},
{ colId: 'mail', field: 'username', headerName: 'E-Mail', flex: 1},
{ colId: 'delete', headerName: '', width: 50,
cellRenderer: (params: any) => {
if (this.authService.user.username == params.data.username) return '';
return `<div class="delete icon icon-btn-xs"></div>`;
},
onCellClicked: (event: any) => {
if (this.authService.user.username == event.data.username) {
this.toast.error('Du kannst dich nicht selbst entfernen');
return;
}
if (event.colDef.colId == 'delete') {
this.removeManagerByEmail(event.data.username);
}
},
}
]
}
@@ -47,4 +72,49 @@ export class SystemManagerComponent {
}
})
}
addManagerByEmail() {
if (this.email == null) return;
this.gridApi.setGridOption("loading", true);
this.api.addManager(this.system.id, this.email)
.pipe(
this.toast.observe({
loading: 'Füge Manager hinzu',
success: 'Manager hinzugefügt',
error: (x: any) => x.error.message || 'Fehler beim Hinzufügen des Managers'
})
).subscribe({
next: n => {
this.gridApi.setGridOption("rowData", n);
this.email = null;
this.gridApi.setGridOption("loading", false);
},
error: () => {
this.gridApi.setGridOption("loading", false);
}
});
}
removeManagerByEmail(username: string) {
const resume = confirm('Soll der Manager wirklich entfernt werden?');
if (!resume) return;
this.gridApi.setGridOption("loading", true);
this.api.removeManager(this.system.id, username)
.pipe(
this.toast.observe({
loading: 'Manager entfernen',
success: 'Manager entfernt',
error: (x: any) => x.error.message || 'Fehler beim Entfgernen des Managers'
})
).subscribe({
next: (n: any[]) => {
this.gridApi.setGridOption("rowData", n);
this.gridApi.setGridOption("loading", false);
},
error: () => {
this.gridApi.setGridOption("loading", false);
}
});
}
}