diff --git a/libs/angular/src/vault/abstractions/deprecated-vault-filter.service.ts b/libs/angular/src/vault/abstractions/deprecated-vault-filter.service.ts index 21528b1ddd5..9a1a31b6068 100644 --- a/libs/angular/src/vault/abstractions/deprecated-vault-filter.service.ts +++ b/libs/angular/src/vault/abstractions/deprecated-vault-filter.service.ts @@ -6,6 +6,7 @@ import { Observable } from "rxjs"; // eslint-disable-next-line no-restricted-imports import { CollectionView } from "@bitwarden/admin-console/common"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; +import { UserId } from "@bitwarden/common/types/guid"; import { FolderView } from "@bitwarden/common/vault/models/view/folder.view"; import { DynamicTreeNode } from "../vault-filter/models/dynamic-tree-node.model"; @@ -14,11 +15,14 @@ import { DynamicTreeNode } from "../vault-filter/models/dynamic-tree-node.model" * @deprecated August 30 2022: Use new VaultFilterService with observables */ export abstract class DeprecatedVaultFilterService { - buildOrganizations: () => Promise; - buildNestedFolders: (organizationId?: string) => Observable>; - buildCollections: (organizationId?: string) => Promise>; - buildCollapsedFilterNodes: () => Promise>; - storeCollapsedFilterNodes: (collapsedFilterNodes: Set) => Promise; - checkForSingleOrganizationPolicy: () => Promise; - checkForOrganizationDataOwnershipPolicy: () => Promise; + abstract buildOrganizations(): Promise; + abstract buildNestedFolders(organizationId?: string): Observable>; + abstract buildCollections(organizationId?: string): Promise>; + abstract buildCollapsedFilterNodes(userId: UserId): Promise>; + abstract storeCollapsedFilterNodes( + collapsedFilterNodes: Set, + userId: UserId, + ): Promise; + abstract checkForSingleOrganizationPolicy(): Promise; + abstract checkForOrganizationDataOwnershipPolicy(): Promise; } diff --git a/libs/angular/src/vault/vault-filter/components/vault-filter.component.ts b/libs/angular/src/vault/vault-filter/components/vault-filter.component.ts index 936d606b936..0b0cb14bbb8 100644 --- a/libs/angular/src/vault/vault-filter/components/vault-filter.component.ts +++ b/libs/angular/src/vault/vault-filter/components/vault-filter.component.ts @@ -7,6 +7,9 @@ import { firstValueFrom, Observable } from "rxjs"; // eslint-disable-next-line no-restricted-imports import { CollectionView } from "@bitwarden/admin-console/common"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; +import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { getUserId } from "@bitwarden/common/auth/services/account.service"; +import { UserId } from "@bitwarden/common/types/guid"; import { ITreeNodeObject } from "@bitwarden/common/vault/models/domain/tree-node"; import { FolderView } from "@bitwarden/common/vault/models/view/folder.view"; @@ -29,6 +32,8 @@ export class VaultFilterComponent implements OnInit { @Output() onAddFolder = new EventEmitter(); @Output() onEditFolder = new EventEmitter(); + private activeUserId: UserId; + isLoaded = false; collapsedFilterNodes: Set; organizations: Organization[]; @@ -37,14 +42,20 @@ export class VaultFilterComponent implements OnInit { collections: DynamicTreeNode; folders$: Observable>; - constructor(protected vaultFilterService: DeprecatedVaultFilterService) {} + constructor( + protected vaultFilterService: DeprecatedVaultFilterService, + protected accountService: AccountService, + ) {} get displayCollections() { return this.collections?.fullList != null && this.collections.fullList.length > 0; } async ngOnInit(): Promise { - this.collapsedFilterNodes = await this.vaultFilterService.buildCollapsedFilterNodes(); + this.activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId)); + this.collapsedFilterNodes = await this.vaultFilterService.buildCollapsedFilterNodes( + this.activeUserId, + ); this.organizations = await this.vaultFilterService.buildOrganizations(); if (this.organizations != null && this.organizations.length > 0) { this.activeOrganizationDataOwnershipPolicy = @@ -68,7 +79,10 @@ export class VaultFilterComponent implements OnInit { } else { this.collapsedFilterNodes.add(node.id); } - await this.vaultFilterService.storeCollapsedFilterNodes(this.collapsedFilterNodes); + await this.vaultFilterService.storeCollapsedFilterNodes( + this.collapsedFilterNodes, + this.activeUserId, + ); } async applyFilter(filter: VaultFilter) { diff --git a/libs/angular/src/vault/vault-filter/services/vault-filter.service.ts b/libs/angular/src/vault/vault-filter/services/vault-filter.service.ts index a4114e63285..3317f0c9002 100644 --- a/libs/angular/src/vault/vault-filter/services/vault-filter.service.ts +++ b/libs/angular/src/vault/vault-filter/services/vault-filter.service.ts @@ -12,7 +12,7 @@ import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { getUserId } from "@bitwarden/common/auth/services/account.service"; -import { ActiveUserState, StateProvider } from "@bitwarden/common/platform/state"; +import { SingleUserState, StateProvider } from "@bitwarden/common/platform/state"; import { UserId } from "@bitwarden/common/types/guid"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction"; @@ -28,10 +28,9 @@ const NestingDelimiter = "/"; @Injectable() export class VaultFilterService implements DeprecatedVaultFilterServiceAbstraction { - private collapsedGroupingsState: ActiveUserState = - this.stateProvider.getActive(COLLAPSED_GROUPINGS); - private readonly collapsedGroupings$: Observable> = - this.collapsedGroupingsState.state$.pipe(map((c) => new Set(c))); + private collapsedGroupingsState(userId: UserId): SingleUserState { + return this.stateProvider.getUser(userId, COLLAPSED_GROUPINGS); + } constructor( protected organizationService: OrganizationService, @@ -43,12 +42,17 @@ export class VaultFilterService implements DeprecatedVaultFilterServiceAbstracti protected accountService: AccountService, ) {} - async storeCollapsedFilterNodes(collapsedFilterNodes: Set): Promise { - await this.collapsedGroupingsState.update(() => Array.from(collapsedFilterNodes)); + async storeCollapsedFilterNodes( + collapsedFilterNodes: Set, + userId: UserId, + ): Promise { + await this.collapsedGroupingsState(userId).update(() => Array.from(collapsedFilterNodes)); } - async buildCollapsedFilterNodes(): Promise> { - return await firstValueFrom(this.collapsedGroupings$); + async buildCollapsedFilterNodes(userId: UserId): Promise> { + return await firstValueFrom( + this.collapsedGroupingsState(userId).state$.pipe(map((c) => new Set(c))), + ); } async buildOrganizations(): Promise {