From 8522804a9011219f56b46abd18840d7c821f0c1b Mon Sep 17 00:00:00 2001 From: SmithThe4th Date: Wed, 19 Mar 2025 14:47:18 -0400 Subject: [PATCH] [PM-19237] Add Archive Filter Type (#13852) * Updated font list * Added empty archive SVG * Updated filters to include archive type * Added condition for archive type * Switched to use old icon * Put archive filter and no archive item behind the feature flag * Only apply archive filter when the flag is enabled * Removed empty archive svg * Removed empty archive svg * Fixed cipher domain tests * Fixed cipher service test * Added icon to storybook * simplified filter logic * used the new template syntax * fixed suggestion --- .../components/vault-filter.component.ts | 41 +++++++++++++++++- .../routed-vault-filter-bridge.service.ts | 5 +++ .../shared/models/filter-function.ts | 14 +++++- .../routed-vault-filter-bridge.model.ts | 3 ++ .../models/routed-vault-filter.model.ts | 1 + .../models/vault-filter-section.type.ts | 1 + .../shared/models/vault-filter.model.ts | 7 +++ .../shared/models/vault-filter.type.ts | 2 +- .../vault-header/vault-header.component.ts | 4 ++ .../individual-vault/vault.component.html | 25 ++++++----- .../vault/individual-vault/vault.component.ts | 25 +++++++++-- apps/web/src/locales/en/messages.json | 12 +++++ .../src/scss/bwicons/fonts/bwi-font.svg | 3 ++ .../src/scss/bwicons/fonts/bwi-font.ttf | Bin 85496 -> 86076 bytes .../src/scss/bwicons/fonts/bwi-font.woff | Bin 85572 -> 86152 bytes .../src/scss/bwicons/fonts/bwi-font.woff2 | Bin 37084 -> 37188 bytes .../src/scss/bwicons/styles/style.scss | 1 + libs/common/src/enums/feature-flag.enum.ts | 2 + .../src/vault/models/data/cipher.data.ts | 2 + .../src/vault/models/domain/cipher.spec.ts | 20 +++++++++ libs/common/src/vault/models/domain/cipher.ts | 5 +++ .../vault/models/response/cipher.response.ts | 2 + .../src/vault/models/view/cipher.view.ts | 6 +++ .../src/vault/services/cipher.service.spec.ts | 2 + libs/components/src/stories/icons.mdx | 1 + 25 files changed, 165 insertions(+), 19 deletions(-) diff --git a/apps/web/src/app/vault/individual-vault/vault-filter/components/vault-filter.component.ts b/apps/web/src/app/vault/individual-vault/vault-filter/components/vault-filter.component.ts index 786c5de740e..efc018717d4 100644 --- a/apps/web/src/app/vault/individual-vault/vault-filter/components/vault-filter.component.ts +++ b/apps/web/src/app/vault/individual-vault/vault-filter/components/vault-filter.component.ts @@ -1,12 +1,12 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore import { Component, EventEmitter, inject, Input, OnDestroy, OnInit, Output } from "@angular/core"; -import { Router } from "@angular/router"; import { firstValueFrom, merge, Subject, switchMap, takeUntil } from "rxjs"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { BillingApiServiceAbstraction } from "@bitwarden/common/billing/abstractions/billing-api.service.abstraction"; +import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; @@ -47,7 +47,6 @@ export class VaultFilterComponent implements OnInit, OnDestroy { isLoaded = false; protected destroy$: Subject = new Subject(); - private router = inject(Router); get filtersList() { return this.filters ? Object.values(this.filters) : []; } @@ -59,6 +58,9 @@ export class VaultFilterComponent implements OnInit, OnDestroy { if (this.activeFilter.isDeleted) { return "searchTrash"; } + if (this.activeFilter.isArchived) { + return "searchArchive"; + } if (this.activeFilter.cipherType === CipherType.Login) { return "searchLogin"; } @@ -185,6 +187,14 @@ export class VaultFilterComponent implements OnInit, OnDestroy { builderFilter.typeFilter = await this.addTypeFilter(); builderFilter.folderFilter = await this.addFolderFilter(); builderFilter.collectionFilter = await this.addCollectionFilter(); + // PM19148: Innovation Archive + if ( + await firstValueFrom( + this.configService.getFeatureFlag$(FeatureFlag.PM19148_InnovationArchive), + ) + ) { + builderFilter.archiveFilter = await this.addArchiveFilter(); + } builderFilter.trashFilter = await this.addTrashFilter(); return builderFilter; } @@ -322,4 +332,31 @@ export class VaultFilterComponent implements OnInit, OnDestroy { }; return trashFilterSection; } + + protected async addArchiveFilter(): Promise { + const archiveFilterSection: VaultFilterSection = { + data$: this.vaultFilterService.buildTypeTree( + { + id: "headArchive", + name: "HeadArchive", + type: "archive", + icon: "bwi-archive", + }, + [ + { + id: "archive", + name: this.i18nService.t("archive"), + type: "archive", + icon: "bwi-archive", + }, + ], + ), + header: { + showHeader: false, + isSelectable: true, + }, + action: this.applyTypeFilter, + }; + return archiveFilterSection; + } } diff --git a/apps/web/src/app/vault/individual-vault/vault-filter/services/routed-vault-filter-bridge.service.ts b/apps/web/src/app/vault/individual-vault/vault-filter/services/routed-vault-filter-bridge.service.ts index 25874d683be..936dfb0e675 100644 --- a/apps/web/src/app/vault/individual-vault/vault-filter/services/routed-vault-filter-bridge.service.ts +++ b/apps/web/src/app/vault/individual-vault/vault-filter/services/routed-vault-filter-bridge.service.ts @@ -174,6 +174,11 @@ function createLegacyFilterForEndUser( { id: "trash", name: "", type: "trash", icon: "" }, null, ); + } else if (filter.type !== undefined && filter.type === "archive") { + legacyFilter.selectedCipherTypeNode = new TreeNode( + { id: "archive", name: "", type: "archive", icon: "" }, + null, + ); } else if (filter.type !== undefined && filter.type !== "trash") { legacyFilter.selectedCipherTypeNode = ServiceUtils.getTreeNodeObject( cipherTypeTree, diff --git a/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/filter-function.ts b/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/filter-function.ts index a39918df4a7..2c983d66a10 100644 --- a/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/filter-function.ts +++ b/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/filter-function.ts @@ -6,7 +6,10 @@ import { All, RoutedVaultFilterModel } from "./routed-vault-filter.model"; export type FilterFunction = (cipher: CipherView) => boolean; -export function createFilterFunction(filter: RoutedVaultFilterModel): FilterFunction { +export function createFilterFunction( + filter: RoutedVaultFilterModel, + archiveEnabled?: boolean, +): FilterFunction { return (cipher) => { if (filter.type === "favorites" && !cipher.favorite) { return false; @@ -33,6 +36,15 @@ export function createFilterFunction(filter: RoutedVaultFilterModel): FilterFunc if (filter.type !== "trash" && cipher.isDeleted) { return false; } + // Archive filter logic is only applied if the feature flag is enabled + if (archiveEnabled) { + if (filter.type === "archive" && !cipher.isArchived) { + return false; + } + if (filter.type !== "archive" && cipher.isArchived) { + return false; + } + } // No folder if (filter.folderId === Unassigned && cipher.folderId !== null) { return false; diff --git a/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/routed-vault-filter-bridge.model.ts b/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/routed-vault-filter-bridge.model.ts index fe236a089e0..a168b8001f9 100644 --- a/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/routed-vault-filter-bridge.model.ts +++ b/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/routed-vault-filter-bridge.model.ts @@ -129,6 +129,9 @@ export class RoutedVaultFilterBridge implements VaultFilter { get isDeleted(): boolean { return this.legacyFilter.isDeleted; } + get isArchived(): boolean { + return this.legacyFilter.isArchived; + } get organizationId(): string { return this.legacyFilter.organizationId; } diff --git a/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/routed-vault-filter.model.ts b/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/routed-vault-filter.model.ts index 866ba1d9848..c333922864f 100644 --- a/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/routed-vault-filter.model.ts +++ b/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/routed-vault-filter.model.ts @@ -8,6 +8,7 @@ const itemTypes = [ "identity", "note", "sshKey", + "archive", "trash", All, ] as const; diff --git a/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/vault-filter-section.type.ts b/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/vault-filter-section.type.ts index 0f949e17146..7f91e7ba133 100644 --- a/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/vault-filter-section.type.ts +++ b/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/vault-filter-section.type.ts @@ -20,6 +20,7 @@ export enum VaultFilterLabel { TypeFilter = "typeFilter", FolderFilter = "folderFilter", CollectionFilter = "collectionFilter", + ArchiveFilter = "archiveFilter", TrashFilter = "trashFilter", } diff --git a/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/vault-filter.model.ts b/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/vault-filter.model.ts index c486ad800ab..dadf482565e 100644 --- a/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/vault-filter.model.ts +++ b/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/vault-filter.model.ts @@ -72,6 +72,10 @@ export class VaultFilter { return this.selectedCipherTypeNode?.node.type === "trash" ? true : null; } + get isArchived(): boolean { + return this.selectedCipherTypeNode?.node.type === "archive"; + } + get organizationId(): string { return this.selectedOrganizationNode?.node.id; } @@ -121,6 +125,9 @@ export class VaultFilter { if (this.isDeleted && cipherPassesFilter) { cipherPassesFilter = cipher.isDeleted; } + if (this.isArchived && cipherPassesFilter) { + cipherPassesFilter = cipher.isArchived; + } if (this.cipherType && cipherPassesFilter) { cipherPassesFilter = cipher.type === this.cipherType; } diff --git a/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/vault-filter.type.ts b/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/vault-filter.type.ts index 9259dd08114..7a92db6a381 100644 --- a/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/vault-filter.type.ts +++ b/apps/web/src/app/vault/individual-vault/vault-filter/shared/models/vault-filter.type.ts @@ -4,7 +4,7 @@ import { CipherType } from "@bitwarden/common/vault/enums"; import { ITreeNodeObject } from "@bitwarden/common/vault/models/domain/tree-node"; import { FolderView } from "@bitwarden/common/vault/models/view/folder.view"; -export type CipherStatus = "all" | "favorites" | "trash" | CipherType; +export type CipherStatus = "all" | "favorites" | "archive" | "trash" | CipherType; export type CipherTypeFilter = ITreeNodeObject & { type: CipherStatus; icon: string }; export type CollectionFilter = CollectionAdminView & { diff --git a/apps/web/src/app/vault/individual-vault/vault-header/vault-header.component.ts b/apps/web/src/app/vault/individual-vault/vault-header/vault-header.component.ts index 489f42649f9..bdfcabb6a4b 100644 --- a/apps/web/src/app/vault/individual-vault/vault-header/vault-header.component.ts +++ b/apps/web/src/app/vault/individual-vault/vault-header/vault-header.component.ts @@ -143,6 +143,10 @@ export class VaultHeaderComponent implements OnInit { return this.i18nService.t("myVault"); } + if (this.filter.type === "archive") { + return this.i18nService.t("archive"); + } + const activeOrganization = this.activeOrganization; if (activeOrganization) { return `${activeOrganization.name} ${this.i18nService.t("vault").toLowerCase()}`; diff --git a/apps/web/src/app/vault/individual-vault/vault.component.html b/apps/web/src/app/vault/individual-vault/vault.component.html index 1a2a1fdbca6..00f12a77cd9 100644 --- a/apps/web/src/app/vault/individual-vault/vault.component.html +++ b/apps/web/src/app/vault/individual-vault/vault.component.html @@ -70,17 +70,20 @@ class="tw-mt-6 tw-flex tw-h-full tw-flex-col tw-items-center tw-justify-start" > -

{{ "noItemsInList" | i18n }}

- + @if (filter.type === "archive") { +
{{ "noItemsInArchive" | i18n }}
+

+ {{ "archivedItemsDescription" | i18n }} +

+ } @else { +

{{ "noItemsInList" | i18n }}

+ @if (filter.type !== "trash") { + + } + } diff --git a/apps/web/src/app/vault/individual-vault/vault.component.ts b/apps/web/src/app/vault/individual-vault/vault.component.ts index d4441c73719..5eefd14f9b2 100644 --- a/apps/web/src/app/vault/individual-vault/vault.component.ts +++ b/apps/web/src/app/vault/individual-vault/vault.component.ts @@ -1,7 +1,15 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore import { DialogRef } from "@angular/cdk/dialog"; -import { ChangeDetectorRef, Component, NgZone, OnDestroy, OnInit, ViewChild } from "@angular/core"; +import { + ChangeDetectorRef, + Component, + NgZone, + OnDestroy, + OnInit, + ViewChild, + inject, +} from "@angular/core"; import { ActivatedRoute, Params, Router } from "@angular/router"; import { BehaviorSubject, @@ -50,7 +58,9 @@ import { OrganizationBillingServiceAbstraction } from "@bitwarden/common/billing import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service"; import { BillingApiServiceAbstraction } from "@bitwarden/common/billing/abstractions/billing-api.service.abstraction"; import { EventType } from "@bitwarden/common/enums"; +import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service"; +import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; @@ -148,11 +158,13 @@ const SearchTextDebounceInterval = 200; ], }) export class VaultComponent implements OnInit, OnDestroy { + private configService: ConfigService = inject(ConfigService); @ViewChild("vaultFilter", { static: true }) filterComponent: VaultFilterComponent; trashCleanupWarning: string = null; kdfIterations: number; activeFilter: VaultFilter = new VaultFilter(); + archiveItemEnabled$: Observable; protected noItemIcon = Icons.Search; protected performingInitialLoad = true; @@ -270,7 +282,11 @@ export class VaultComponent implements OnInit, OnDestroy { private trialFlowService: TrialFlowService, private organizationBillingService: OrganizationBillingServiceAbstraction, private billingNotificationService: BillingNotificationService, - ) {} + ) { + this.archiveItemEnabled$ = this.configService.getFeatureFlag$( + FeatureFlag.PM19148_InnovationArchive, + ); + } async ngOnInit() { this.trashCleanupWarning = this.i18nService.t( @@ -346,13 +362,14 @@ export class VaultComponent implements OnInit, OnDestroy { this.cipherService.cipherViews$(activeUserId).pipe(filter((c) => c !== null)), filter$, this.currentSearchText$, + this.archiveItemEnabled$, ]).pipe( filter(([ciphers, filter]) => ciphers != undefined && filter != undefined), - concatMap(async ([ciphers, filter, searchText]) => { + concatMap(async ([ciphers, filter, searchText, archiveEnabled]) => { const failedCiphers = await firstValueFrom( this.cipherService.failedToDecryptCiphers$(activeUserId), ); - const filterFunction = createFilterFunction(filter); + const filterFunction = createFilterFunction(filter, archiveEnabled); // Append any failed to decrypt ciphers to the top of the cipher list const allCiphers = [...failedCiphers, ...ciphers]; diff --git a/apps/web/src/locales/en/messages.json b/apps/web/src/locales/en/messages.json index 7f9c89484c2..afc3c950ea6 100644 --- a/apps/web/src/locales/en/messages.json +++ b/apps/web/src/locales/en/messages.json @@ -10570,5 +10570,17 @@ }, "cannotCreateCollection": { "message": "Free organizations may have up to 2 collections. Upgrade to a paid plan to add more collections." + }, + "searchArchive": { + "message": "Search archive" + }, + "archive": { + "message": "Archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "archivedItemsDescription": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." } } diff --git a/libs/angular/src/scss/bwicons/fonts/bwi-font.svg b/libs/angular/src/scss/bwicons/fonts/bwi-font.svg index c8535bebef8..b59907d0a7c 100644 --- a/libs/angular/src/scss/bwicons/fonts/bwi-font.svg +++ b/libs/angular/src/scss/bwicons/fonts/bwi-font.svg @@ -217,6 +217,9 @@ + + + diff --git a/libs/angular/src/scss/bwicons/fonts/bwi-font.ttf b/libs/angular/src/scss/bwicons/fonts/bwi-font.ttf index 9696152a4988406e3b0c94c6bfe9039a78dfed81..b61ad0f4e4e9c4799914956d101877c4725deef6 100644 GIT binary patch delta 622 zcmew{n|03u)(Oh>CJYRWG7Jn1G3klL1wdK=$gcp>9O*fgX_=c6Y=Qg+21a+EjMT&w zji}i542&LUfbwP;KmnFLtOg8>o-9DVN=9x;h3vjRyMcTS1_ox8oc!cO0g=>642(WL zKr^P~CRP+M++h}AVDxR zGgbuh1dWZ%Y#B||logfOWEp{i=BA3GilT3?0{Q_jG0qXO=0iHeMUgZ}XLb8x)-k43B?uXTa#` zd)ye!8BcEi;>IY!Jl(*Zk!L%P7h?yb%tD)ms}?aVwpd)Sco_pDQ29w_J_aF>HU_5Y P4}BShx9|66v}6JRXAqO3 delta 269 zcmdn9fc3|0)(Oh>dJGJVG7Jn1G3klL1wdK=$gcp>9O*fgX?ySQQU>xH7#Lk8GEx&$ z)D2j_GcdZ%0Lq(X00mg~u<8Q&7l3?~jNFn6!F_*r1NmPV7?>q;@{<$u1mzPL7`=Fa zX7uGIRunMYWENmx^qvD$uaK9Ro2n8ZX7Udxu!n(xNv0sbxP*ZjD8=Y|W8#jyhqYrNt5~_en;Qco0|NtNKnDXin6_bHoNnmHC_GV9tKK9%vA6&zc?2lK0mTC8 zIhAQZu`>*e?mi%#xhcUmBQ-IFfzeX}sKyM0HKJnIX8;9(VgW$D3JA08VKvCeEvW#C zl`t?c1I3tCWcU5qos*voROd4TXyz0U77$6Dl$%&lz`&^Grvuce0LFKi1@aPeQyCcj zd>9y*WI$LYz~o;+esKxV@fj2U%$7a)^27hX|NjG(12w&5c=-;@WBmVEoJH(L^A^VK zTNoLiI@Yr=F#IoMVPGy~;A7BaFkr9-TB^h*Dk5ghXk=z;qNdHLYAh%sW~>P02^t%j z*)p1_DJv?m$ua^3%}o_W6-5n&1r-HF*npyHri>d!WMo7ZfQf(o3f`tnj;7x7(yFS` ze;Pof0<*)P0|`ux!n}X?^9nOA)RYkcsTGll|L0)p?QP0;?^?L?Tkb%)%2FOY6d1ySP5_U_hYnV0sseuTOa@c diff --git a/libs/angular/src/scss/bwicons/fonts/bwi-font.woff2 b/libs/angular/src/scss/bwicons/fonts/bwi-font.woff2 index 80544871f3aaf6f02e297fc6c6301ece319d333a..04bee37352d5057d843040b337694a9229f0ed70 100644 GIT binary patch literal 37188 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
tZ3WJviFY$<9-F4XmbT6wucHi_1 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 z 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 export type DefaultFeatureFlagValueType = typeof DefaultFeatureFlagValue; diff --git a/libs/common/src/vault/models/data/cipher.data.ts b/libs/common/src/vault/models/data/cipher.data.ts index ee5e5b3e72b..47cf948b422 100644 --- a/libs/common/src/vault/models/data/cipher.data.ts +++ b/libs/common/src/vault/models/data/cipher.data.ts @@ -40,6 +40,7 @@ export class CipherData { collectionIds?: string[]; creationDate: string; deletedDate: string; + archivedDate: string | null; reprompt: CipherRepromptType; key: string; @@ -63,6 +64,7 @@ export class CipherData { this.collectionIds = collectionIds != null ? collectionIds : response.collectionIds; this.creationDate = response.creationDate; this.deletedDate = response.deletedDate; + this.archivedDate = response.archivedDate; this.reprompt = response.reprompt; this.key = response.key; diff --git a/libs/common/src/vault/models/domain/cipher.spec.ts b/libs/common/src/vault/models/domain/cipher.spec.ts index 1b2b093a553..fd058580330 100644 --- a/libs/common/src/vault/models/domain/cipher.spec.ts +++ b/libs/common/src/vault/models/domain/cipher.spec.ts @@ -56,6 +56,7 @@ describe("Cipher DTO", () => { passwordHistory: null, key: null, permissions: undefined, + archivedDate: null, }); }); @@ -80,6 +81,7 @@ describe("Cipher DTO", () => { permissions: new CipherPermissionsApi(), reprompt: CipherRepromptType.None, key: "EncryptedString", + archivedDate: null, login: { uris: [ { @@ -155,6 +157,7 @@ describe("Cipher DTO", () => { permissions: new CipherPermissionsApi(), reprompt: 0, key: { encryptedString: "EncryptedString", encryptionType: 0 }, + archivedDate: null, login: { passwordRevisionDate: new Date("2022-01-31T12:00:00.000Z"), autofillOnPageLoad: false, @@ -233,6 +236,7 @@ describe("Cipher DTO", () => { cipher.reprompt = CipherRepromptType.None; cipher.key = mockEnc("EncKey"); cipher.permissions = new CipherPermissionsApi(); + cipher.archivedDate = null; const loginView = new LoginView(); loginView.username = "username"; @@ -276,6 +280,7 @@ describe("Cipher DTO", () => { reprompt: 0, localData: undefined, permissions: new CipherPermissionsApi(), + archivedDate: null, }); }); }); @@ -304,6 +309,7 @@ describe("Cipher DTO", () => { type: SecureNoteType.Generic, }, permissions: new CipherPermissionsApi(), + archivedDate: null, }; }); @@ -334,6 +340,7 @@ describe("Cipher DTO", () => { passwordHistory: null, key: { encryptedString: "EncKey", encryptionType: 0 }, permissions: new CipherPermissionsApi(), + archivedDate: null, }); }); @@ -362,6 +369,7 @@ describe("Cipher DTO", () => { cipher.secureNote.type = SecureNoteType.Generic; cipher.key = mockEnc("EncKey"); cipher.permissions = new CipherPermissionsApi(); + cipher.archivedDate = null; const keyService = mock(); const encryptService = mock(); @@ -397,6 +405,7 @@ describe("Cipher DTO", () => { reprompt: 0, localData: undefined, permissions: new CipherPermissionsApi(), + archivedDate: null, }); }); }); @@ -430,6 +439,7 @@ describe("Cipher DTO", () => { code: "EncryptedString", }, key: "EncKey", + archivedDate: null, }; }); @@ -467,6 +477,7 @@ describe("Cipher DTO", () => { passwordHistory: null, key: { encryptedString: "EncKey", encryptionType: 0 }, permissions: new CipherPermissionsApi(), + archivedDate: null, }); }); @@ -493,6 +504,7 @@ describe("Cipher DTO", () => { cipher.reprompt = CipherRepromptType.None; cipher.key = mockEnc("EncKey"); cipher.permissions = new CipherPermissionsApi(); + cipher.archivedDate = null; const cardView = new CardView(); cardView.cardholderName = "cardholderName"; @@ -536,6 +548,7 @@ describe("Cipher DTO", () => { reprompt: 0, localData: undefined, permissions: new CipherPermissionsApi(), + archivedDate: null, }); }); }); @@ -561,6 +574,7 @@ describe("Cipher DTO", () => { permissions: new CipherPermissionsApi(), reprompt: CipherRepromptType.None, key: "EncKey", + archivedDate: null, identity: { title: "EncryptedString", firstName: "EncryptedString", @@ -605,6 +619,7 @@ describe("Cipher DTO", () => { creationDate: new Date("2022-01-01T12:00:00.000Z"), deletedDate: null, reprompt: 0, + archivedDate: null, identity: { title: { encryptedString: "EncryptedString", encryptionType: 0 }, firstName: { encryptedString: "EncryptedString", encryptionType: 0 }, @@ -656,6 +671,7 @@ describe("Cipher DTO", () => { cipher.reprompt = CipherRepromptType.None; cipher.key = mockEnc("EncKey"); cipher.permissions = new CipherPermissionsApi(); + cipher.archivedDate = null; const identityView = new IdentityView(); identityView.firstName = "firstName"; @@ -699,6 +715,7 @@ describe("Cipher DTO", () => { reprompt: 0, localData: undefined, permissions: new CipherPermissionsApi(), + archivedDate: null, }); }); }); @@ -712,6 +729,7 @@ describe("Cipher DTO", () => { const revisionDate = new Date("2022-08-04T01:06:40.441Z"); const deletedDate = new Date("2022-09-04T01:06:40.441Z"); + const archivedDate = new Date("2022-10-04T01:06:40.441Z"); const actual = Cipher.fromJSON({ name: "myName", notes: "myNotes", @@ -720,6 +738,7 @@ describe("Cipher DTO", () => { fields: ["field1", "field2"] as any, passwordHistory: ["ph1", "ph2"] as any, deletedDate: deletedDate.toISOString(), + archivedDate: archivedDate.toISOString(), } as Jsonify); expect(actual).toMatchObject({ @@ -730,6 +749,7 @@ describe("Cipher DTO", () => { fields: ["field1_fromJSON", "field2_fromJSON"], passwordHistory: ["ph1_fromJSON", "ph2_fromJSON"], deletedDate: deletedDate, + archivedDate: archivedDate, }); expect(actual).toBeInstanceOf(Cipher); }); diff --git a/libs/common/src/vault/models/domain/cipher.ts b/libs/common/src/vault/models/domain/cipher.ts index f23e3c0c579..588e5017d52 100644 --- a/libs/common/src/vault/models/domain/cipher.ts +++ b/libs/common/src/vault/models/domain/cipher.ts @@ -54,6 +54,7 @@ export class Cipher extends Domain implements Decryptable { collectionIds: string[]; creationDate: Date; deletedDate: Date; + archivedDate: Date; reprompt: CipherRepromptType; key: EncString; @@ -92,6 +93,7 @@ export class Cipher extends Domain implements Decryptable { this.localData = localData; this.creationDate = obj.creationDate != null ? new Date(obj.creationDate) : null; this.deletedDate = obj.deletedDate != null ? new Date(obj.deletedDate) : null; + this.archivedDate = obj.archivedDate != null ? new Date(obj.archivedDate) : null; this.reprompt = obj.reprompt; switch (this.type) { @@ -248,6 +250,7 @@ export class Cipher extends Domain implements Decryptable { c.reprompt = this.reprompt; c.key = this.key?.encryptedString; c.permissions = this.permissions; + c.archivedDate = this.archivedDate != null ? this.archivedDate.toISOString() : null; this.buildDataModel(this, c, { name: null, @@ -300,6 +303,7 @@ export class Cipher extends Domain implements Decryptable { const fields = obj.fields?.map((f: any) => Field.fromJSON(f)); const passwordHistory = obj.passwordHistory?.map((ph: any) => Password.fromJSON(ph)); const key = EncString.fromJSON(obj.key); + const archivedDate = obj.archivedDate == null ? null : new Date(obj.archivedDate); Object.assign(domain, obj, { name, @@ -310,6 +314,7 @@ export class Cipher extends Domain implements Decryptable { fields, passwordHistory, key, + archivedDate, }); switch (obj.type) { diff --git a/libs/common/src/vault/models/response/cipher.response.ts b/libs/common/src/vault/models/response/cipher.response.ts index 944a19e088b..d8d891ab48b 100644 --- a/libs/common/src/vault/models/response/cipher.response.ts +++ b/libs/common/src/vault/models/response/cipher.response.ts @@ -37,6 +37,7 @@ export class CipherResponse extends BaseResponse { collectionIds: string[]; creationDate: string; deletedDate: string; + archivedDate: string; reprompt: CipherRepromptType; key: string; @@ -61,6 +62,7 @@ export class CipherResponse extends BaseResponse { this.collectionIds = this.getResponseProperty("CollectionIds"); this.creationDate = this.getResponseProperty("CreationDate"); this.deletedDate = this.getResponseProperty("DeletedDate"); + this.archivedDate = this.getResponseProperty("ArchivedDate"); const login = this.getResponseProperty("Login"); if (login != null) { diff --git a/libs/common/src/vault/models/view/cipher.view.ts b/libs/common/src/vault/models/view/cipher.view.ts index 7ddba9e2ed5..8f778303cc8 100644 --- a/libs/common/src/vault/models/view/cipher.view.ts +++ b/libs/common/src/vault/models/view/cipher.view.ts @@ -46,6 +46,7 @@ export class CipherView implements View, InitializerMetadata { revisionDate: Date = null; creationDate: Date = null; deletedDate: Date = null; + archivedDate: Date = null; reprompt: CipherRepromptType = CipherRepromptType.None; /** @@ -72,6 +73,7 @@ export class CipherView implements View, InitializerMetadata { this.revisionDate = c.revisionDate; this.creationDate = c.creationDate; this.deletedDate = c.deletedDate; + this.archivedDate = c.archivedDate; // Old locally stored ciphers might have reprompt == null. If so set it to None. this.reprompt = c.reprompt ?? CipherRepromptType.None; } @@ -135,6 +137,10 @@ export class CipherView implements View, InitializerMetadata { return this.deletedDate != null; } + get isArchived(): boolean { + return this.archivedDate != null; + } + get linkedFieldOptions() { return this.item?.linkedFieldOptions; } diff --git a/libs/common/src/vault/services/cipher.service.spec.ts b/libs/common/src/vault/services/cipher.service.spec.ts index def0c04dd16..76e1ce44018 100644 --- a/libs/common/src/vault/services/cipher.service.spec.ts +++ b/libs/common/src/vault/services/cipher.service.spec.ts @@ -60,7 +60,9 @@ const cipherData: CipherData = { deletedDate: null, permissions: new CipherPermissionsApi(), key: "EncKey", + archivedDate: null, reprompt: CipherRepromptType.None, + login: { uris: [ { uri: "EncryptedString", uriChecksum: "EncryptedString", match: UriMatchStrategy.Domain }, diff --git a/libs/components/src/stories/icons.mdx b/libs/components/src/stories/icons.mdx index f16b5d56b16..b83230b36fb 100644 --- a/libs/components/src/stories/icons.mdx +++ b/libs/components/src/stories/icons.mdx @@ -91,6 +91,7 @@ or an options menu icon. | | bwi-trash | delete action or trash area | | | bwi-undo | restore action | | | bwi-unlock | unlocked | +| | bwi-archive | archive action or archive area | ## Directional and Menu Indicators