feat: Automatische Aktualisierung nach Update und Fehlerbehandlung bei fehlgeschlagenen Updates

- Automatische Aktualisierung nach Update-Vorgängen implementiert.
- Fehlermeldungen für fehlgeschlagene Updates hinzugefügt.
This commit is contained in:
Developer 02 2024-08-15 10:31:10 +02:00
parent 3ed5ca0f00
commit 08b9035083
7 changed files with 21 additions and 7 deletions

View File

@ -23,7 +23,7 @@ export class AppComponent {
@HostListener('window:keydown.control.s', ['$event'])
protected handleCtrlS(event: KeyboardEvent) {
event.preventDefault();
this.updateService.executeAll();
this.updateService.executeAllAsync().then(() => this.refreshService.executeAll());
}
@HostListener('window:keydown.control.r', ['$event'])

View File

@ -36,7 +36,7 @@
<button *ngIf="isLogedIn()" class="btn" (click)="this.updateService.toggleEditability()" [ngStyle]="{ 'visibility': updateService.isVisible ? 'visible' : 'hidden' }" matTooltip="strg + L" matTooltipPosition="below" [matTooltipDisabled]="!updateService.isVisible">
<mat-icon class="scale-pulse">{{ updateService.isEditable ? 'lock_open' : 'lock' }}</mat-icon>
</button>
<button *ngIf="isLogedIn()" class="btn" (click)="updateService.executeAll()" [ngStyle]="{ 'visibility': updateService.isVisible ? 'visible' : 'hidden' }" matTooltip="strg + S" matTooltipPosition="below" matTooltipClass="pt-3" [matTooltipDisabled]="!updateService.isVisible">
<button *ngIf="isLogedIn()" class="btn" (click)="saveAsync()" [ngStyle]="{ 'visibility': updateService.isVisible ? 'visible' : 'hidden' }" matTooltip="strg + S" matTooltipPosition="below" matTooltipClass="pt-3" [matTooltipDisabled]="!updateService.isVisible">
<mat-icon class="scale-pulse" [matBadge]="updateActCount === 0 ? '' : updateActCount">save</mat-icon>
</button>
<button *ngIf="isLogedIn()" class="btn" (click)="transferService.executeAll()" [ngStyle]="{ 'visibility': transferService.isVisible ? 'visible' : 'hidden' }" matTooltip="strg + ␣" matTooltipPosition="below" [matTooltipDisabled]="!transferService.isVisible">

View File

@ -90,4 +90,8 @@ export class NavMenuComponent {
}, 3000);
}
}
async saveAsync() {
await this.updateService.executeAllAsync().then(() => this.refreshService.executeAll())
}
}

View File

@ -26,7 +26,7 @@ export class BasePageComponent {
this.refreshService.removeAll()
this.creationService.disposeComponent();
if (this.updateService.any) {
this.updateService.executeAll().then()
this.updateService.executeAllAsync().then()
}
if(this.transferService.any)
this.transferService.removeAll()

View File

@ -72,7 +72,7 @@ export class GroupComponent extends BasePageComponent implements AfterViewInit {
const deleteRequests = sRows.map(sRow => this.groupTable.service.delete(sRow.source.id!));
forkJoin(deleteRequests).subscribe({
next: () => {
this.updateService.executeAll().then(() => {
this.updateService.executeAllAsync().then(() => {
this.refreshService.executeAll();
})

View File

@ -81,7 +81,7 @@ export class UserComponent extends BasePageComponent implements AfterViewInit {
const deleteRequests = sRows.map(sRow => this.userTable.service.delete(sRow.source.id!));
forkJoin(deleteRequests).subscribe({
next: () => {
this.updateService.executeAll().then(() => {
this.updateService.executeAllAsync().then(() => {
this.refreshService.executeAll();
})
Swal.fire({

View File

@ -1,5 +1,6 @@
import { Injectable } from '@angular/core';
import { BaseButtonService } from './base-button.service';
import Swal from 'sweetalert2';
@Injectable({
providedIn: 'root'
@ -48,8 +49,17 @@ export class UpdateService extends BaseButtonService {
}
}
async executeAll(): Promise<void> {
await Promise.all(Object.values(this.async_actions).map(action => action()));
async executeAllAsync(): Promise<void> {
const count = { err: 0, succ: 0, get all() { return this.err + this.succ } }
await Promise.all(Object.values(this.async_actions).map(action => action().then(() => count.succ += 1).catch(() => count.err += 1)))
.then(() => {
if (count.err > 0)
Swal.fire({
icon: "info",
title: "Verarbeitungsfehler",
text: `Von ${count.all} Aktualisierungen wurden ${count.succ} erfolgreich durchgeführt, ${count.err} jedoch nicht. Der Fehler könnte durch den Versuch entstanden sein, persönliche Daten zu aktualisieren. Bitte überprüfen Sie dies.`,
})
});
Object.values(this.actions).forEach(action => action());
this.removeAll();
}