From 0fe9cb7126a79d4ea1de5aa7d012fa1b2ee8d291 Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Tue, 6 Aug 2024 15:02:33 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20UpdateService=20mit=20=C3=84nderungs-Li?= =?UTF-8?q?stenern=20und=20zus=C3=A4tzlichen=20Funktionen=20erweitern?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Getter `any` hinzugefügt, um zu überprüfen, ob Aktionen vorhanden sind. - Methoden `addAsync` und `add` geändert, um Änderungs-Listener nach dem Hinzufügen von Aktionen zu benachrichtigen. - `changeListeners`-Array implementiert mit Methoden zum Hinzufügen und Entfernen von Listenern. - `executeAllChangeListeners` hinzugefügt, um alle registrierten Änderungs-Listener auszulösen. - Methode `removeAll` aktualisiert, um Änderungs-Listener nach dem Leeren der Aktionen zu benachrichtigen. --- .../src/app/services/update.service.ts | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/services/update.service.ts b/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/services/update.service.ts index 2ab64e1..cd9cbc6 100644 --- a/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/services/update.service.ts +++ b/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/services/update.service.ts @@ -1,4 +1,5 @@ import { Injectable } from '@angular/core'; +import { Action } from 'rxjs/internal/scheduler/Action'; @Injectable({ providedIn: 'root' @@ -10,33 +11,57 @@ export class UpdateService { private async_actions: Array<() => Promise> = []; private actions: Array<() => void> = []; - get asyncCount() { + get asyncCount(): number { return this.async_actions.length; } - get syncCount() { + get syncCount(): number { return this.actions.length; } - get totalCount() { + get totalCount(): number { return this.asyncCount + this.syncCount; } + get any(): boolean { + return this.totalCount > 0; + } + + //add - remove addAsync(action: () => Promise): void { this.async_actions.push(action); + this.executeAllChangeListeners(); } add(action: () => void): void { this.actions.push(action); + this.executeAllChangeListeners(); } removeAll(): void { this.async_actions = []; + this.executeAllChangeListeners(); } + //execution async executeAll(): Promise { await Promise.all(this.async_actions.map(action => action())); this.actions.forEach(action => action()); this.removeAll(); } + + //change listeners + private changeListeners: Array<(updateService: UpdateService) => void> = new Array(); + + addChangeListener(action: (updateService: UpdateService) => void) { + this.changeListeners.push(action) + } + + removeAllChangeListeners() { + this.changeListeners = [] + } + + private executeAllChangeListeners() { + this.changeListeners.forEach(e => e(this)); + } } \ No newline at end of file