1
0
mirror of https://github.com/bitwarden/browser synced 2026-01-31 00:33:33 +00:00

PR followup:

- removed `DesktopRoutedVaultFilterBridgeService`
- added 'baseRoute' injectable in `RoutedVaultFilterService`
- removed `folderAddEditModalRef` from `VaultComponent`
This commit is contained in:
Leslie Xiong
2026-01-06 17:12:25 -05:00
parent 4ae43048cd
commit 26b2c5a03e
5 changed files with 22 additions and 60 deletions

View File

@@ -1,38 +0,0 @@
import { Injectable } from "@angular/core";
import { Router } from "@angular/router";
import {
RoutedVaultFilterService,
RoutedVaultFilterBridgeService,
RoutedVaultFilterModel,
VaultFilterServiceAbstraction as VaultFilterService,
} from "@bitwarden/vault";
/**
* Desktop-specific extension of RoutedVaultFilterBridgeService that ensures
* vault filter navigation always goes to the /new-vault route.
*/
@Injectable()
export class DesktopRoutedVaultFilterBridgeService extends RoutedVaultFilterBridgeService {
private static readonly VAULT_ROUTE = "/new-vault";
private readonly desktopRouter: Router;
private readonly desktopRoutedVaultFilterService: RoutedVaultFilterService;
constructor(
router: Router,
routedVaultFilterService: RoutedVaultFilterService,
vaultFilterService: VaultFilterService,
) {
super(router, routedVaultFilterService, vaultFilterService);
this.desktopRouter = router;
this.desktopRoutedVaultFilterService = routedVaultFilterService;
}
override navigate(filter: RoutedVaultFilterModel) {
const extras = this.desktopRoutedVaultFilterService.createRoute(filter)[1];
const vaultCommands = [DesktopRoutedVaultFilterBridgeService.VAULT_ROUTE];
// FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling.
void this.desktopRouter.navigate(vaultCommands, extras);
}
}

View File

@@ -126,6 +126,8 @@ import {
VaultFilterServiceAbstraction,
VaultFilterService,
RoutedVaultFilterService,
RoutedVaultFilterBridgeService,
VAULT_FILTER_BASE_ROUTE,
} from "@bitwarden/vault";
import { DesktopLoginApprovalDialogComponentService } from "../../auth/login/desktop-login-approval-dialog-component.service";
@@ -161,7 +163,6 @@ import { NativeMessagingService } from "../../services/native-messaging.service"
import { SearchBarService } from "../layout/search/search-bar.service";
import { DesktopFileDownloadService } from "./desktop-file-download.service";
import { DesktopRoutedVaultFilterBridgeService } from "./desktop-routed-vault-filter-bridge.service";
import { InitService } from "./init.service";
import { NativeMessagingManifestService } from "./native-messaging-manifest.service";
import { DesktopSetInitialPasswordService } from "./set-initial-password/desktop-set-initial-password.service";
@@ -533,14 +534,18 @@ const safeProviders: SafeProvider[] = [
ConfigService,
],
}),
safeProvider({
provide: VAULT_FILTER_BASE_ROUTE,
useValue: "/new-vault",
}),
safeProvider({
provide: RoutedVaultFilterService,
useClass: RoutedVaultFilterService,
deps: [ActivatedRoute],
}),
safeProvider({
provide: DesktopRoutedVaultFilterBridgeService,
useClass: DesktopRoutedVaultFilterBridgeService,
provide: RoutedVaultFilterBridgeService,
useClass: RoutedVaultFilterBridgeService,
deps: [Router, RoutedVaultFilterService, VaultFilterServiceAbstraction],
}),
];

View File

@@ -21,9 +21,9 @@ import {
VaultFilter,
VaultFilterServiceAbstraction as VaultFilterService,
AddEditFolderDialogComponent,
RoutedVaultFilterBridgeService,
} from "@bitwarden/vault";
import { DesktopRoutedVaultFilterBridgeService } from "../../../../app/services/desktop-routed-vault-filter-bridge.service";
import { DesktopPremiumUpgradePromptService } from "../../../../services/desktop-premium-upgrade-prompt.service";
import { CollectionFilterComponent } from "./filters/collection-filter.component";
@@ -56,7 +56,7 @@ import { TypeFilterComponent } from "./filters/type-filter.component";
],
})
export class VaultFilterComponent implements OnInit {
private routedVaultFilterBridgeService = inject(DesktopRoutedVaultFilterBridgeService);
private routedVaultFilterBridgeService = inject(RoutedVaultFilterBridgeService);
private vaultFilterService: VaultFilterService = inject(VaultFilterService);
private accountService: AccountService = inject(AccountService);
private cipherArchiveService: CipherArchiveService = inject(CipherArchiveService);

View File

@@ -1,13 +1,5 @@
import { CommonModule } from "@angular/common";
import {
ChangeDetectorRef,
Component,
NgZone,
OnDestroy,
OnInit,
ViewChild,
ViewContainerRef,
} from "@angular/core";
import { ChangeDetectorRef, Component, NgZone, OnDestroy, OnInit, ViewChild } from "@angular/core";
import { ActivatedRoute, Router } from "@angular/router";
import {
firstValueFrom,
@@ -83,10 +75,10 @@ import {
ArchiveCipherUtilitiesService,
VaultFilter,
VaultFilterServiceAbstraction as VaultFilterService,
RoutedVaultFilterBridgeService,
} from "@bitwarden/vault";
import { SearchBarService } from "../../../app/layout/search/search-bar.service";
import { DesktopRoutedVaultFilterBridgeService } from "../../../app/services/desktop-routed-vault-filter-bridge.service";
import { DesktopCredentialGenerationService } from "../../../services/desktop-cipher-form-generator.service";
import { DesktopPremiumUpgradePromptService } from "../../../services/desktop-premium-upgrade-prompt.service";
import { invokeMenu, RendererMenuItem } from "../../../utils";
@@ -144,10 +136,6 @@ export class VaultComponent implements OnInit, OnDestroy, CopyClickListener {
vaultItemsComponent: VaultItemsV2Component<CipherView> | null = null;
// FIXME(https://bitwarden.atlassian.net/browse/CL-903): Migrate to Signals
// eslint-disable-next-line @angular-eslint/prefer-signals
@ViewChild("folderAddEdit", { read: ViewContainerRef, static: true })
folderAddEditModalRef: ViewContainerRef | null = null;
// FIXME(https://bitwarden.atlassian.net/browse/CL-903): Migrate to Signals
// eslint-disable-next-line @angular-eslint/prefer-signals
@ViewChild(CipherFormComponent)
cipherFormComponent: CipherFormComponent | null = null;
@@ -221,7 +209,7 @@ export class VaultComponent implements OnInit, OnDestroy, CopyClickListener {
private cipherArchiveService: CipherArchiveService,
private policyService: PolicyService,
private archiveCipherUtilitiesService: ArchiveCipherUtilitiesService,
private routedVaultFilterBridgeService: DesktopRoutedVaultFilterBridgeService,
private routedVaultFilterBridgeService: RoutedVaultFilterBridgeService,
private vaultFilterService: VaultFilterService,
) {}

View File

@@ -1,14 +1,20 @@
import { Injectable, OnDestroy } from "@angular/core";
import { Injectable, OnDestroy, inject } from "@angular/core";
import { ActivatedRoute, NavigationExtras } from "@angular/router";
import { combineLatest, map, Observable, Subject, takeUntil } from "rxjs";
import { CollectionId, OrganizationId } from "@bitwarden/common/types/guid";
import { SafeInjectionToken } from "@bitwarden/ui-common";
import {
isRoutedVaultFilterItemType,
RoutedVaultFilterModel,
} from "../models/routed-vault-filter.model";
/**
* Injection token for the base route path used in vault filter navigation.
*/
export const VAULT_FILTER_BASE_ROUTE = new SafeInjectionToken<string>("VaultFilterBaseRoute");
/**
* This service is an abstraction layer on top of ActivatedRoute that
* encapsulates the logic of how filters are stored in the URL.
@@ -19,6 +25,7 @@ import {
@Injectable()
export class RoutedVaultFilterService implements OnDestroy {
private onDestroy = new Subject<void>();
private baseRoute: string = inject(VAULT_FILTER_BASE_ROUTE, { optional: true }) ?? "";
/**
* Filter values extracted from the URL.
@@ -64,7 +71,7 @@ export class RoutedVaultFilterService implements OnDestroy {
* @returns route that can be used with Router or RouterLink
*/
createRoute(filter: RoutedVaultFilterModel): [commands: any[], extras?: NavigationExtras] {
const commands: string[] = [];
const commands: string[] = this.baseRoute ? [this.baseRoute] : [];
const extras: NavigationExtras = {
queryParams: {
collectionId: filter.collectionId ?? null,