diff --git a/apps/web/src/app/organizations/members/people.component.ts b/apps/web/src/app/organizations/members/people.component.ts index 97cadf3a6c..c060bccc21 100644 --- a/apps/web/src/app/organizations/members/people.component.ts +++ b/apps/web/src/app/organizations/members/people.component.ts @@ -1,6 +1,17 @@ import { Component, OnDestroy, OnInit, ViewChild, ViewContainerRef } from "@angular/core"; import { ActivatedRoute, Router } from "@angular/router"; -import { combineLatest, concatMap, firstValueFrom, lastValueFrom, Subject, takeUntil } from "rxjs"; +import { + combineLatest, + concatMap, + firstValueFrom, + from, + lastValueFrom, + map, + shareReplay, + Subject, + switchMap, + takeUntil, +} from "rxjs"; import { SearchPipe } from "@bitwarden/angular/pipes/search.pipe"; import { UserNamePipe } from "@bitwarden/angular/pipes/user-name.pipe"; @@ -19,6 +30,7 @@ import { import { OrganizationApiServiceAbstraction } from "@bitwarden/common/abstractions/organization/organization-api.service.abstraction"; import { OrganizationService } from "@bitwarden/common/abstractions/organization/organization.service.abstraction"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; +import { PolicyApiServiceAbstraction as PolicyApiService } from "@bitwarden/common/abstractions/policy/policy-api.service.abstraction"; import { PolicyService } from "@bitwarden/common/abstractions/policy/policy.service.abstraction"; import { SearchService } from "@bitwarden/common/abstractions/search.service"; import { StateService } from "@bitwarden/common/abstractions/state.service"; @@ -100,6 +112,7 @@ export class PeopleComponent searchService: SearchService, validationService: ValidationService, private policyService: PolicyService, + private policyApiService: PolicyApiService, logService: LogService, searchPipe: SearchPipe, userNamePipe: UserNamePipe, @@ -129,10 +142,27 @@ export class PeopleComponent } async ngOnInit() { - combineLatest([this.route.params, this.route.queryParams, this.policyService.policies$]) + const organization$ = this.route.params.pipe( + map((params) => this.organizationService.get(params.organizationId)), + shareReplay({ refCount: true, bufferSize: 1 }) + ); + + const policies$ = organization$.pipe( + switchMap((organization) => { + if (organization.isProviderUser) { + return from(this.policyApiService.getPolicies(organization.id)).pipe( + map((response) => this.policyService.mapPoliciesFromToken(response)) + ); + } + + return this.policyService.policies$; + }) + ); + + combineLatest([this.route.queryParams, policies$, organization$]) .pipe( - concatMap(async ([params, qParams, policies]) => { - this.organization = await this.organizationService.get(params.organizationId); + concatMap(async ([qParams, policies, organization]) => { + this.organization = organization; // Backfill pub/priv key if necessary if (