From 45dac8a554d375892bd3089b31724efd70b3ed68 Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Mon, 12 Aug 2024 13:37:36 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20Delete-Service=20erstellt=20und=20L?= =?UTF-8?q?=C3=B6schprozess=20optimiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Delete-Service hinzugefügt, um den Löschvorgang zu verwalten. - Löschprozess in `User`- und `Group`-Komponenten im `ngAfterViewInit`-Lebenszyklus implementiert. - `removeAll`-Methode im Konstruktor der `BaseComponent` aufgerufen, um vorhandene Services zu bereinigen. --- .../user_manager_ui/src/app/app.component.ts | 5 +++- .../pages/base-page/base-page.component.ts | 5 +++- .../src/app/pages/group/group.component.ts | 4 ++- .../src/app/pages/user/user.component.ts | 4 ++- .../services/button/deletion.service.spec.ts | 16 ++++++++++ .../app/services/button/deletion.service.ts | 30 +++++++++++++++++++ 6 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/services/button/deletion.service.spec.ts create mode 100644 DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/services/button/deletion.service.ts diff --git a/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/app.component.ts b/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/app.component.ts index 3271684..6b4f395 100644 --- a/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/app.component.ts +++ b/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/app.component.ts @@ -4,6 +4,7 @@ import {NavMenuComponent} from './components/nav-menu/nav-menu.component' import { TransferService } from './services/button/transfer.service'; import { UpdateService } from './services/button/update.service'; import { RefreshService } from './services/button/refresh.service'; +import { DeletionService } from './services/button/deletion.service'; @Component({ selector: 'app-root', @@ -17,6 +18,7 @@ export class AppComponent { protected transferService: TransferService = inject(TransferService) protected updateService: UpdateService = inject(UpdateService) protected refreshService: RefreshService = inject(RefreshService) + protected deletionService: DeletionService = inject(DeletionService) @HostListener('window:keydown.control.s', ['$event']) protected handleCtrlS(event: KeyboardEvent) { @@ -32,9 +34,10 @@ export class AppComponent { @HostListener('window:keydown.delete', ['$event']) protected handleDelete(event: KeyboardEvent) { + event.preventDefault(); + this.deletionService.executeAll(); } - @HostListener('window:keydown.control.space', ['$event']) protected handleCtrlSapce(event: KeyboardEvent) { event.preventDefault(); diff --git a/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/pages/base-page/base-page.component.ts b/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/pages/base-page/base-page.component.ts index 7a252ae..5b569d0 100644 --- a/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/pages/base-page/base-page.component.ts +++ b/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/pages/base-page/base-page.component.ts @@ -3,6 +3,7 @@ import { RefreshService } from '../../services/button/refresh.service'; import { CreationService } from '../../services/button/creation.service'; import { UpdateService } from '../../services/button/update.service'; import { TransferService } from '../../services/button/transfer.service'; +import { DeletionService } from '../../services/button/deletion.service'; import { ButtonVisibilityService } from '../../services/button/button-visibility.service'; @Component({ @@ -18,6 +19,7 @@ export class BasePageComponent { protected creationService: CreationService = inject(CreationService) protected updateService: UpdateService = inject(UpdateService) protected transferService: TransferService = inject(TransferService) + protected deletionService: DeletionService = inject(DeletionService) protected buttonVisibilityService: ButtonVisibilityService = inject(ButtonVisibilityService) constructor() { @@ -28,6 +30,7 @@ export class BasePageComponent { } if(this.transferService.any) this.transferService.removeAll() + if(this.deletionService.any) + this.deletionService.removeAll() } - handleDeleteRequest() { } } \ No newline at end of file diff --git a/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/pages/group/group.component.ts b/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/pages/group/group.component.ts index 49153d3..f9ff7c2 100644 --- a/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/pages/group/group.component.ts +++ b/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/pages/group/group.component.ts @@ -43,6 +43,8 @@ export class GroupComponent extends BasePageComponent implements AfterViewInit { this.userTable.fetchDataByGroupId(this.sGroupId); }); this.creationService.component = GroupFormComponent + + this.deletionService.add(() => this.handleDeleteRequest()); } @ViewChild("groupTable") groupTable!: GroupTableComponent; @@ -56,7 +58,7 @@ export class GroupComponent extends BasePageComponent implements AfterViewInit { } } - override handleDeleteRequest() { + handleDeleteRequest() { const sRows = this.groupTable.selectedRows; if (sRows.length > 0) Swal.fire({ diff --git a/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/pages/user/user.component.ts b/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/pages/user/user.component.ts index 14ce625..83a33e0 100644 --- a/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/pages/user/user.component.ts +++ b/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/pages/user/user.component.ts @@ -47,6 +47,8 @@ export class UserComponent extends BasePageComponent implements AfterViewInit { }); this.creationService.component = UserFormComponent; + + this.deletionService.add(() => this.handleDeleteRequest()); } @ViewChild("userTable") userTable!: UserTableComponent @@ -64,7 +66,7 @@ export class UserComponent extends BasePageComponent implements AfterViewInit { } } - override handleDeleteRequest() { + handleDeleteRequest() { const sRows = this.userTable.selectedRows; if (sRows.length > 0) Swal.fire({ diff --git a/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/services/button/deletion.service.spec.ts b/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/services/button/deletion.service.spec.ts new file mode 100644 index 0000000..373b8db --- /dev/null +++ b/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/services/button/deletion.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { DeletionService } from './deletion.service'; + +describe('DeletionService', () => { + let service: DeletionService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(DeletionService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/services/button/deletion.service.ts b/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/services/button/deletion.service.ts new file mode 100644 index 0000000..d427fa3 --- /dev/null +++ b/DigitalData.UserManager.API/ClientApp/user_manager_ui/src/app/services/button/deletion.service.ts @@ -0,0 +1,30 @@ +import { Injectable } from '@angular/core'; +import { BaseButtonService } from './base-button.service'; + +@Injectable({ + providedIn: 'root' +}) +export class DeletionService extends BaseButtonService { + + private actions: Array<() => void> = []; + + public get count(): number { + return this.actions.length; + } + + public get any(): boolean { + return this.count > 0; + } + + add(action: () => void): void { + this.actions.push(action); + } + + removeAll(): void { + this.actions = []; + } + + executeAll(): void { + this.actions.forEach(action => action()); + } +} \ No newline at end of file