From 291fcbcd92cde119fbefc0e9252affab796fdc31 Mon Sep 17 00:00:00 2001 From: sumeyyeKurtulus Date: Fri, 13 Sep 2024 10:49:09 +0300 Subject: [PATCH] add: loading state management for extensible table --- .../extensible-table.component.html | 1 + .../extensible-table.component.ts | 45 +++++++++++++++++-- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.html b/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.html index 471aad0f15..576913b713 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.html +++ b/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.html @@ -1,5 +1,6 @@ implements OnChanges { +export class ExtensibleTableComponent implements OnChanges, OnDestroy { protected _actionsText!: string; @Input() set actionsText(value: string) { @@ -110,6 +113,11 @@ export class ExtensibleTableComponent implements OnChanges { #injector = inject(Injector); getInjected = this.#injector.get.bind(this.#injector); permissionService = this.#injector.get(PermissionService); + subscriptionService = this.#injector.get(SubscriptionService); + listService = this.#injector.get(ListService); + routerWaitService = this.#injector.get(RouterWaitService); + cdRef = this.#injector.get(ChangeDetectorRef); + isLoading = true; constructor() { const extensions = this.#injector.get(ExtensionsService); @@ -123,6 +131,8 @@ export class ExtensibleTableComponent implements OnChanges { this.actionList.toArray().map(action => ({ requiredPolicy: action.permission })), ).length > 0; this.setColumnWidths(DEFAULT_ACTIONS_COLUMN_WIDTH); + + this.subscribeLoading(); } private setColumnWidths(actionsColumn: number | undefined) { @@ -227,4 +237,33 @@ export class ExtensibleTableComponent implements OnChanges { return visibleActions.length > 0; } + + subscribeLoading() { + this.subscriptionService.addOne( + combineLatest([this.listService.isLoading$, this.routerWaitService.getLoading$()]), + ([listLoading, routerLoading]) => { + if (listLoading || routerLoading) { + this.startLoading(); + } else { + this.stopLoading(); + } + }, + ); + } + + startLoading() { + if (this.isLoading) { + return; + } + this.isLoading = true; + this.cdRef.detectChanges(); + } + + stopLoading() { + this.isLoading = false; + } + + ngOnDestroy() { + this.subscriptionService.closeAll(); + } }