Browse Source

fix(admin-ui): Fix alerts service registration

This got broken when refactoring to use the new `PermissionsService` due
to a race condition.
Michael Bromley 1 year ago
parent
commit
04dcaab58f

+ 25 - 8
packages/admin-ui/src/lib/core/src/providers/alerts/alerts.service.ts

@@ -1,7 +1,17 @@
 import { Injectable } from '@angular/core';
 import { notNullOrUndefined } from '@vendure/common/lib/shared-utils';
-import { BehaviorSubject, combineLatest, interval, isObservable, Observable, Subject, switchMap } from 'rxjs';
-import { map, startWith, take } from 'rxjs/operators';
+import {
+    BehaviorSubject,
+    combineLatest,
+    first,
+    interval,
+    isObservable,
+    Observable,
+    of,
+    Subject,
+    switchMap,
+} from 'rxjs';
+import { filter, map, startWith, take } from 'rxjs/operators';
 import { Permission } from '../../common/generated-types';
 import { PermissionsService } from '../permissions/permissions.service';
 
@@ -94,17 +104,24 @@ export class AlertsService {
     }
 
     configureAlert<T>(config: AlertConfig<T>) {
-        if (this.hasSufficientPermissions(config.requiredPermissions)) {
-            this.alertsMap.set(config.id, new Alert(config));
-            this.configUpdated.next();
-        }
+        this.hasSufficientPermissions(config.requiredPermissions)
+            .pipe(first())
+            .subscribe(hasPermissions => {
+                if (hasPermissions) {
+                    this.alertsMap.set(config.id, new Alert(config));
+                    this.configUpdated.next();
+                }
+            });
     }
 
     hasSufficientPermissions(permissions?: Permission[]) {
         if (!permissions || permissions.length === 0) {
-            return true;
+            return of(true);
         }
-        return this.permissionsService.userHasPermissions(permissions);
+        return this.permissionsService.currentUserPermissions$.pipe(
+            filter(permissions => permissions.length > 0),
+            map(() => this.permissionsService.userHasPermissions(permissions)),
+        );
     }
 
     refresh(id?: string) {