diff --git a/src/frontend/packages/cloud-foundry/src/features/cloud-foundry/users/manage-users/manage-users-set-usernames/manage-users-set-usernames.component.html b/src/frontend/packages/cloud-foundry/src/features/cloud-foundry/users/manage-users/manage-users-set-usernames/manage-users-set-usernames.component.html index c1d88ad0d8..6d2ce160a2 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cloud-foundry/users/manage-users/manage-users-set-usernames/manage-users-set-usernames.component.html +++ b/src/frontend/packages/cloud-foundry/src/features/cloud-foundry/users/manage-users/manage-users-set-usernames/manage-users-set-usernames.component.html @@ -1,10 +1,10 @@
- - + + Add Roles{{(canAdd$ | async) ? '' : ' (Disabled via feature flag)'}} - + Remove Roles{{(canRemove$ | async) ? '' : ' (Disabled via feature flag)'}}
diff --git a/src/frontend/packages/cloud-foundry/src/features/cloud-foundry/users/manage-users/manage-users-set-usernames/manage-users-set-usernames.component.ts b/src/frontend/packages/cloud-foundry/src/features/cloud-foundry/users/manage-users/manage-users-set-usernames/manage-users-set-usernames.component.ts index db0ede2260..c3e6d0aef4 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cloud-foundry/users/manage-users/manage-users-set-usernames/manage-users-set-usernames.component.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cloud-foundry/users/manage-users/manage-users-set-usernames/manage-users-set-usernames.component.ts @@ -2,7 +2,7 @@ import { Component, OnInit } from '@angular/core'; import { MatRadioChange } from '@angular/material/radio'; import { Store } from '@ngrx/store'; import { BehaviorSubject, combineLatest, Observable, of } from 'rxjs'; -import { first, map, publishReplay, refCount, startWith, switchMap, take, tap } from 'rxjs/operators'; +import { first, map, publishReplay, refCount, startWith, switchMap } from 'rxjs/operators'; import { PermissionConfig, PermissionTypes } from '../../../../../../../core/src/core/current-user-permissions.config'; import { CurrentUserPermissionsService } from '../../../../../../../core/src/core/current-user-permissions.service'; @@ -50,6 +50,7 @@ export class ManageUsersSetUsernamesComponent implements OnInit { public canAdd$: Observable; public canRemove$: Observable; public blocked$: Observable; + public currentValue: boolean; public stackedActionConfig: StackedInputActionConfig = { isEmailInput: false, @@ -71,37 +72,29 @@ export class ManageUsersSetUsernamesComponent implements OnInit { const ffRemovePermConfig = new PermissionConfig(PermissionTypes.FEATURE_FLAG, CFFeatureFlagTypes.unset_roles_by_username); this.canAdd$ = waitForCFPermissions(store, activeRouteCfOrgSpace.cfGuid).pipe( switchMap(() => userPerms.can(ffSetPermConfig, activeRouteCfOrgSpace.cfGuid)), - tap(canAdd => { - if (!canAdd) { - this.setIsRemove({ source: null, value: false }); - } - }), first(), publishReplay(1), refCount() ); this.canRemove$ = waitForCFPermissions(store, activeRouteCfOrgSpace.cfGuid).pipe( switchMap(() => userPerms.can(ffRemovePermConfig, activeRouteCfOrgSpace.cfGuid)), - tap(canRemove => { - if (!canRemove) { - this.setIsRemove({ source: null, value: true }); - } - }), first(), publishReplay(1), refCount() ); - this.blocked$ = combineLatest([this.canAdd$, this.canRemove$]).pipe( - map(([canAdd, canRemove]) => { - if (canAdd && canRemove) { - // Set initial value to be add - this.setIsRemove({ source: null, value: true }); - } - return false; - }), + const canAddRemove = combineLatest([this.canAdd$, this.canRemove$]); + + // Set starting value of add/remove radio button + canAddRemove.pipe(first()).subscribe(([canAdd]) => this.setIsRemove({ source: null, value: !canAdd })) + + // Block content until we know the add/remove state + this.blocked$ = canAddRemove.pipe( + map(() => false), + first(), startWith(true), - take(2) + publishReplay(1), + refCount(), ); } @@ -125,8 +118,8 @@ export class ManageUsersSetUsernamesComponent implements OnInit { } setIsRemove(event: MatRadioChange) { - // Note - event.value is flipped - this.store.dispatch(new UsersRolesSetIsRemove(!event.value)); + this.store.dispatch(new UsersRolesSetIsRemove(event.value)); + this.currentValue = event.value; } onNext: StepOnNextFunction = () => {