diff --git a/src/app/modules/vault-filter/vault-filter.component.ts b/src/app/modules/vault-filter/vault-filter.component.ts index 17bd055b..25110e00 100644 --- a/src/app/modules/vault-filter/vault-filter.component.ts +++ b/src/app/modules/vault-filter/vault-filter.component.ts @@ -1,9 +1,10 @@ import { Component, EventEmitter, Input, Output } from "@angular/core"; import { VaultFilterComponent as BaseVaultFilterComponent } from "jslib-angular/modules/vault-filter/vault-filter.component"; -import { VaultFilterService } from "jslib-angular/modules/vault-filter/vault-filter.service"; import { Organization } from "jslib-common/models/domain/organization"; +import { VaultFilterService } from "./vault-filter.service"; + @Component({ selector: "app-vault-filter", templateUrl: "vault-filter.component.html", @@ -20,10 +21,17 @@ export class VaultFilterComponent extends BaseVaultFilterComponent { organization: Organization; - constructor(vaultFilterService: VaultFilterService) { + constructor(protected vaultFilterService: VaultFilterService) { super(vaultFilterService); } + async ngOnInit() { + await super.ngOnInit(); + this.vaultFilterService.collapsedFilterNodes.subscribe((nodes) => { + this.collapsedFilterNodes = nodes; + }); + } + searchTextChanged() { this.onSearchTextChanged.emit(this.searchText); } diff --git a/src/app/modules/vault-filter/vault-filter.module.ts b/src/app/modules/vault-filter/vault-filter.module.ts index 07daba9b..6ad7a263 100644 --- a/src/app/modules/vault-filter/vault-filter.module.ts +++ b/src/app/modules/vault-filter/vault-filter.module.ts @@ -1,6 +1,5 @@ import { NgModule } from "@angular/core"; -import { VaultFilterService } from "jslib-angular/modules/vault-filter/vault-filter.service"; import { CipherService } from "jslib-common/abstractions/cipher.service"; import { CollectionService } from "jslib-common/abstractions/collection.service"; import { FolderService } from "jslib-common/abstractions/folder.service"; @@ -17,6 +16,7 @@ import { OrganizationOptionsComponent } from "./components/organization-options. import { StatusFilterComponent } from "./components/status-filter.component"; import { TypeFilterComponent } from "./components/type-filter.component"; import { VaultFilterComponent } from "./vault-filter.component"; +import { VaultFilterService } from "./vault-filter.service"; @NgModule({ imports: [SharedModule], diff --git a/src/app/modules/vault-filter/vault-filter.service.ts b/src/app/modules/vault-filter/vault-filter.service.ts index 01b9d50b..1b78e955 100644 --- a/src/app/modules/vault-filter/vault-filter.service.ts +++ b/src/app/modules/vault-filter/vault-filter.service.ts @@ -1,3 +1,27 @@ +import { BehaviorSubject } from "rxjs"; + import { VaultFilterService as BaseVaultFilterService } from "jslib-angular/modules/vault-filter/vault-filter.service"; -export class VaultFilterService extends BaseVaultFilterService {} +export class VaultFilterService extends BaseVaultFilterService { + collapsedFilterNodes = new BehaviorSubject>(null); + + async buildCollapsedFilterNodes(): Promise> { + const nodes = await super.buildCollapsedFilterNodes(); + this.collapsedFilterNodes.next(nodes); + return nodes; + } + + async storeCollapsedFilterNodes(collapsedFilterNodes: Set): Promise { + await super.storeCollapsedFilterNodes(collapsedFilterNodes); + this.collapsedFilterNodes.next(collapsedFilterNodes); + } + + async ensureVaultFiltersAreExpanded() { + const collapsedFilterNodes = await super.buildCollapsedFilterNodes(); + if (!collapsedFilterNodes.has("vaults")) { + return; + } + collapsedFilterNodes.delete("vaults"); + await this.storeCollapsedFilterNodes(collapsedFilterNodes); + } +} diff --git a/src/app/modules/vault/modules/individual-vault/individual-vault.component.ts b/src/app/modules/vault/modules/individual-vault/individual-vault.component.ts index 47e1906a..1238c4f0 100644 --- a/src/app/modules/vault/modules/individual-vault/individual-vault.component.ts +++ b/src/app/modules/vault/modules/individual-vault/individual-vault.component.ts @@ -34,6 +34,7 @@ import { CollectionsComponent } from "../../../../vault/collections.component"; import { FolderAddEditComponent } from "../../../../vault/folder-add-edit.component"; import { ShareComponent } from "../../../../vault/share.component"; import { VaultFilterComponent } from "../../../vault-filter/vault-filter.component"; +import { VaultFilterService } from "../../../vault-filter/vault-filter.service"; import { VaultService } from "../../vault.service"; const BroadcasterSubscriptionId = "VaultComponent"; @@ -88,7 +89,8 @@ export class IndividualVaultComponent implements OnInit, OnDestroy { private organizationService: OrganizationService, private vaultService: VaultService, private cipherService: CipherService, - private passwordRepromptService: PasswordRepromptService + private passwordRepromptService: PasswordRepromptService, + private vaultFilterService: VaultFilterService ) {} async ngOnInit() { @@ -187,6 +189,7 @@ export class IndividualVaultComponent implements OnInit, OnDestroy { this.activeFilter.myVaultOnly = true; } else { this.activeFilter.selectedOrganizationId = orgId; + await this.vaultFilterService.ensureVaultFiltersAreExpanded(); } await this.applyVaultFilter(this.activeFilter); }