mirror of
https://github.com/bitwarden/browser
synced 2025-12-12 06:13:38 +00:00
All Clients - Route data typing clean up (#11265)
This commit is contained in:
@@ -31,7 +31,10 @@ import { twofactorRefactorSwap } from "../../../../libs/angular/src/utils/two-fa
|
|||||||
import { fido2AuthGuard } from "../auth/guards/fido2-auth.guard";
|
import { fido2AuthGuard } from "../auth/guards/fido2-auth.guard";
|
||||||
import { AccountSwitcherComponent } from "../auth/popup/account-switching/account-switcher.component";
|
import { AccountSwitcherComponent } from "../auth/popup/account-switching/account-switcher.component";
|
||||||
import { EnvironmentComponent } from "../auth/popup/environment.component";
|
import { EnvironmentComponent } from "../auth/popup/environment.component";
|
||||||
import { ExtensionAnonLayoutWrapperComponent } from "../auth/popup/extension-anon-layout-wrapper/extension-anon-layout-wrapper.component";
|
import {
|
||||||
|
ExtensionAnonLayoutWrapperComponent,
|
||||||
|
ExtensionAnonLayoutWrapperData,
|
||||||
|
} from "../auth/popup/extension-anon-layout-wrapper/extension-anon-layout-wrapper.component";
|
||||||
import { HintComponent } from "../auth/popup/hint.component";
|
import { HintComponent } from "../auth/popup/hint.component";
|
||||||
import { HomeComponent } from "../auth/popup/home.component";
|
import { HomeComponent } from "../auth/popup/home.component";
|
||||||
import { LockComponent } from "../auth/popup/lock.component";
|
import { LockComponent } from "../auth/popup/lock.component";
|
||||||
@@ -109,6 +112,21 @@ import { debounceNavigationGuard } from "./services/debounce-navigation.service"
|
|||||||
import { TabsV2Component } from "./tabs-v2.component";
|
import { TabsV2Component } from "./tabs-v2.component";
|
||||||
import { TabsComponent } from "./tabs.component";
|
import { TabsComponent } from "./tabs.component";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data properties acceptable for use in extension route objects
|
||||||
|
*/
|
||||||
|
export interface RouteDataProperties {
|
||||||
|
/**
|
||||||
|
* A state string which identifies the current route for the sake of transition animation logic.
|
||||||
|
* The state string is passed into [@routerTransition] in the app.component.
|
||||||
|
*/
|
||||||
|
state: string;
|
||||||
|
/**
|
||||||
|
* A boolean to indicate that the URL should not be saved in memory in the BrowserRouterSvc.
|
||||||
|
*/
|
||||||
|
doNotSaveUrl?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
const unauthRouteOverrides = {
|
const unauthRouteOverrides = {
|
||||||
homepage: () => {
|
homepage: () => {
|
||||||
return BrowserPopupUtils.inPopout(window) ? "/tabs/vault" : "/tabs/current";
|
return BrowserPopupUtils.inPopout(window) ? "/tabs/vault" : "/tabs/current";
|
||||||
@@ -134,36 +152,36 @@ const routes: Routes = [
|
|||||||
path: "home",
|
path: "home",
|
||||||
component: HomeComponent,
|
component: HomeComponent,
|
||||||
canActivate: [unauthGuardFn(unauthRouteOverrides)],
|
canActivate: [unauthGuardFn(unauthRouteOverrides)],
|
||||||
data: { state: "home" },
|
data: { state: "home" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
...extensionRefreshSwap(Fido2V1Component, Fido2Component, {
|
...extensionRefreshSwap(Fido2V1Component, Fido2Component, {
|
||||||
path: "fido2",
|
path: "fido2",
|
||||||
canActivate: [fido2AuthGuard],
|
canActivate: [fido2AuthGuard],
|
||||||
data: { state: "fido2" },
|
data: { state: "fido2" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
path: "login",
|
path: "login",
|
||||||
component: LoginComponent,
|
component: LoginComponent,
|
||||||
canActivate: [unauthGuardFn(unauthRouteOverrides)],
|
canActivate: [unauthGuardFn(unauthRouteOverrides)],
|
||||||
data: { state: "login" },
|
data: { state: "login" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "login-with-device",
|
path: "login-with-device",
|
||||||
component: LoginViaAuthRequestComponent,
|
component: LoginViaAuthRequestComponent,
|
||||||
canActivate: [],
|
canActivate: [],
|
||||||
data: { state: "login-with-device" },
|
data: { state: "login-with-device" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "admin-approval-requested",
|
path: "admin-approval-requested",
|
||||||
component: LoginViaAuthRequestComponent,
|
component: LoginViaAuthRequestComponent,
|
||||||
canActivate: [],
|
canActivate: [],
|
||||||
data: { state: "login-with-device" },
|
data: { state: "login-with-device" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "lock",
|
path: "lock",
|
||||||
component: LockComponent,
|
component: LockComponent,
|
||||||
canActivate: [lockGuard()],
|
canActivate: [lockGuard()],
|
||||||
data: { state: "lock", doNotSaveUrl: true },
|
data: { state: "lock", doNotSaveUrl: true } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
...twofactorRefactorSwap(
|
...twofactorRefactorSwap(
|
||||||
TwoFactorComponent,
|
TwoFactorComponent,
|
||||||
@@ -171,12 +189,12 @@ const routes: Routes = [
|
|||||||
{
|
{
|
||||||
path: "2fa",
|
path: "2fa",
|
||||||
canActivate: [unauthGuardFn(unauthRouteOverrides)],
|
canActivate: [unauthGuardFn(unauthRouteOverrides)],
|
||||||
data: { state: "2fa" },
|
data: { state: "2fa" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "2fa",
|
path: "2fa",
|
||||||
canActivate: [unauthGuardFn(unauthRouteOverrides)],
|
canActivate: [unauthGuardFn(unauthRouteOverrides)],
|
||||||
data: { state: "2fa" },
|
data: { state: "2fa" } satisfies RouteDataProperties,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "",
|
path: "",
|
||||||
@@ -189,200 +207,201 @@ const routes: Routes = [
|
|||||||
path: "2fa-options",
|
path: "2fa-options",
|
||||||
component: TwoFactorOptionsComponent,
|
component: TwoFactorOptionsComponent,
|
||||||
canActivate: [unauthGuardFn(unauthRouteOverrides)],
|
canActivate: [unauthGuardFn(unauthRouteOverrides)],
|
||||||
data: { state: "2fa-options" },
|
data: { state: "2fa-options" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "login-initiated",
|
path: "login-initiated",
|
||||||
component: LoginDecryptionOptionsComponent,
|
component: LoginDecryptionOptionsComponent,
|
||||||
canActivate: [tdeDecryptionRequiredGuard()],
|
canActivate: [tdeDecryptionRequiredGuard()],
|
||||||
|
data: { state: "login-initiated" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "sso",
|
path: "sso",
|
||||||
component: SsoComponent,
|
component: SsoComponent,
|
||||||
canActivate: [unauthGuardFn(unauthRouteOverrides)],
|
canActivate: [unauthGuardFn(unauthRouteOverrides)],
|
||||||
data: { state: "sso" },
|
data: { state: "sso" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "set-password",
|
path: "set-password",
|
||||||
component: SetPasswordComponent,
|
component: SetPasswordComponent,
|
||||||
data: { state: "set-password" },
|
data: { state: "set-password" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "remove-password",
|
path: "remove-password",
|
||||||
component: RemovePasswordComponent,
|
component: RemovePasswordComponent,
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "remove-password" },
|
data: { state: "remove-password" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "register",
|
path: "register",
|
||||||
component: RegisterComponent,
|
component: RegisterComponent,
|
||||||
canActivate: [unauthGuardFn(unauthRouteOverrides)],
|
canActivate: [unauthGuardFn(unauthRouteOverrides)],
|
||||||
data: { state: "register" },
|
data: { state: "register" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "environment",
|
path: "environment",
|
||||||
component: EnvironmentComponent,
|
component: EnvironmentComponent,
|
||||||
canActivate: [unauthGuardFn(unauthRouteOverrides)],
|
canActivate: [unauthGuardFn(unauthRouteOverrides)],
|
||||||
data: { state: "environment" },
|
data: { state: "environment" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "ciphers",
|
path: "ciphers",
|
||||||
component: VaultItemsComponent,
|
component: VaultItemsComponent,
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "ciphers" },
|
data: { state: "ciphers" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
...extensionRefreshSwap(ViewComponent, ViewV2Component, {
|
...extensionRefreshSwap(ViewComponent, ViewV2Component, {
|
||||||
path: "view-cipher",
|
path: "view-cipher",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "view-cipher" },
|
data: { state: "view-cipher" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
path: "cipher-password-history",
|
path: "cipher-password-history",
|
||||||
component: PasswordHistoryComponent,
|
component: PasswordHistoryComponent,
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "cipher-password-history" },
|
data: { state: "cipher-password-history" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
...extensionRefreshSwap(AddEditComponent, AddEditV2Component, {
|
...extensionRefreshSwap(AddEditComponent, AddEditV2Component, {
|
||||||
path: "add-cipher",
|
path: "add-cipher",
|
||||||
canActivate: [authGuard, debounceNavigationGuard()],
|
canActivate: [authGuard, debounceNavigationGuard()],
|
||||||
data: { state: "add-cipher" },
|
data: { state: "add-cipher" } satisfies RouteDataProperties,
|
||||||
runGuardsAndResolvers: "always",
|
runGuardsAndResolvers: "always",
|
||||||
}),
|
}),
|
||||||
...extensionRefreshSwap(AddEditComponent, AddEditV2Component, {
|
...extensionRefreshSwap(AddEditComponent, AddEditV2Component, {
|
||||||
path: "edit-cipher",
|
path: "edit-cipher",
|
||||||
canActivate: [authGuard, debounceNavigationGuard()],
|
canActivate: [authGuard, debounceNavigationGuard()],
|
||||||
data: { state: "edit-cipher" },
|
data: { state: "edit-cipher" } satisfies RouteDataProperties,
|
||||||
runGuardsAndResolvers: "always",
|
runGuardsAndResolvers: "always",
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
path: "share-cipher",
|
path: "share-cipher",
|
||||||
component: ShareComponent,
|
component: ShareComponent,
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "share-cipher" },
|
data: { state: "share-cipher" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "collections",
|
path: "collections",
|
||||||
component: CollectionsComponent,
|
component: CollectionsComponent,
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "collections" },
|
data: { state: "collections" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
...extensionRefreshSwap(AttachmentsComponent, AttachmentsV2Component, {
|
...extensionRefreshSwap(AttachmentsComponent, AttachmentsV2Component, {
|
||||||
path: "attachments",
|
path: "attachments",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "attachments" },
|
data: { state: "attachments" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
path: "generator",
|
path: "generator",
|
||||||
component: GeneratorComponent,
|
component: GeneratorComponent,
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "generator" },
|
data: { state: "generator" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
...extensionRefreshSwap(PasswordGeneratorHistoryComponent, CredentialGeneratorHistoryComponent, {
|
...extensionRefreshSwap(PasswordGeneratorHistoryComponent, CredentialGeneratorHistoryComponent, {
|
||||||
path: "generator-history",
|
path: "generator-history",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "generator-history" },
|
data: { state: "generator-history" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
...extensionRefreshSwap(ImportBrowserComponent, ImportBrowserV2Component, {
|
...extensionRefreshSwap(ImportBrowserComponent, ImportBrowserV2Component, {
|
||||||
path: "import",
|
path: "import",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "import" },
|
data: { state: "import" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
...extensionRefreshSwap(ExportBrowserComponent, ExportBrowserV2Component, {
|
...extensionRefreshSwap(ExportBrowserComponent, ExportBrowserV2Component, {
|
||||||
path: "export",
|
path: "export",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "export" },
|
data: { state: "export" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
...extensionRefreshSwap(AutofillV1Component, AutofillComponent, {
|
...extensionRefreshSwap(AutofillV1Component, AutofillComponent, {
|
||||||
path: "autofill",
|
path: "autofill",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "autofill" },
|
data: { state: "autofill" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
...extensionRefreshSwap(AccountSecurityV1Component, AccountSecurityComponent, {
|
...extensionRefreshSwap(AccountSecurityV1Component, AccountSecurityComponent, {
|
||||||
path: "account-security",
|
path: "account-security",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "account-security" },
|
data: { state: "account-security" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
...extensionRefreshSwap(NotificationsSettingsV1Component, NotificationsSettingsComponent, {
|
...extensionRefreshSwap(NotificationsSettingsV1Component, NotificationsSettingsComponent, {
|
||||||
path: "notifications",
|
path: "notifications",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "notifications" },
|
data: { state: "notifications" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
...extensionRefreshSwap(VaultSettingsComponent, VaultSettingsV2Component, {
|
...extensionRefreshSwap(VaultSettingsComponent, VaultSettingsV2Component, {
|
||||||
path: "vault-settings",
|
path: "vault-settings",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "vault-settings" },
|
data: { state: "vault-settings" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
...extensionRefreshSwap(FoldersComponent, FoldersV2Component, {
|
...extensionRefreshSwap(FoldersComponent, FoldersV2Component, {
|
||||||
path: "folders",
|
path: "folders",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "folders" },
|
data: { state: "folders" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
path: "add-folder",
|
path: "add-folder",
|
||||||
component: FolderAddEditComponent,
|
component: FolderAddEditComponent,
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "add-folder" },
|
data: { state: "add-folder" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "edit-folder",
|
path: "edit-folder",
|
||||||
component: FolderAddEditComponent,
|
component: FolderAddEditComponent,
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "edit-folder" },
|
data: { state: "edit-folder" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "sync",
|
path: "sync",
|
||||||
component: SyncComponent,
|
component: SyncComponent,
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "sync" },
|
data: { state: "sync" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
...extensionRefreshSwap(ExcludedDomainsV1Component, ExcludedDomainsComponent, {
|
...extensionRefreshSwap(ExcludedDomainsV1Component, ExcludedDomainsComponent, {
|
||||||
path: "excluded-domains",
|
path: "excluded-domains",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "excluded-domains" },
|
data: { state: "excluded-domains" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
...extensionRefreshSwap(PremiumComponent, PremiumV2Component, {
|
...extensionRefreshSwap(PremiumComponent, PremiumV2Component, {
|
||||||
path: "premium",
|
path: "premium",
|
||||||
component: PremiumComponent,
|
component: PremiumComponent,
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "premium" },
|
data: { state: "premium" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
...extensionRefreshSwap(AppearanceComponent, AppearanceV2Component, {
|
...extensionRefreshSwap(AppearanceComponent, AppearanceV2Component, {
|
||||||
path: "appearance",
|
path: "appearance",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "appearance" },
|
data: { state: "appearance" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
...extensionRefreshSwap(AddEditComponent, AddEditV2Component, {
|
...extensionRefreshSwap(AddEditComponent, AddEditV2Component, {
|
||||||
path: "clone-cipher",
|
path: "clone-cipher",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "clone-cipher" },
|
data: { state: "clone-cipher" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
path: "send-type",
|
path: "send-type",
|
||||||
component: SendTypeComponent,
|
component: SendTypeComponent,
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "send-type" },
|
data: { state: "send-type" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
...extensionRefreshSwap(SendAddEditComponent, SendAddEditV2Component, {
|
...extensionRefreshSwap(SendAddEditComponent, SendAddEditV2Component, {
|
||||||
path: "add-send",
|
path: "add-send",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "add-send" },
|
data: { state: "add-send" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
...extensionRefreshSwap(SendAddEditComponent, SendAddEditV2Component, {
|
...extensionRefreshSwap(SendAddEditComponent, SendAddEditV2Component, {
|
||||||
path: "edit-send",
|
path: "edit-send",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "edit-send" },
|
data: { state: "edit-send" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
path: "send-created",
|
path: "send-created",
|
||||||
component: SendCreatedComponent,
|
component: SendCreatedComponent,
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "send" },
|
data: { state: "send" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "update-temp-password",
|
path: "update-temp-password",
|
||||||
component: UpdateTempPasswordComponent,
|
component: UpdateTempPasswordComponent,
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "update-temp-password" },
|
data: { state: "update-temp-password" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
...unauthUiRefreshSwap(
|
...unauthUiRefreshSwap(
|
||||||
HintComponent,
|
HintComponent,
|
||||||
@@ -392,7 +411,7 @@ const routes: Routes = [
|
|||||||
canActivate: [unauthGuardFn(unauthRouteOverrides)],
|
canActivate: [unauthGuardFn(unauthRouteOverrides)],
|
||||||
data: {
|
data: {
|
||||||
state: "hint",
|
state: "hint",
|
||||||
},
|
} satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "",
|
path: "",
|
||||||
@@ -406,7 +425,7 @@ const routes: Routes = [
|
|||||||
pageIcon: UserLockIcon,
|
pageIcon: UserLockIcon,
|
||||||
showBackButton: true,
|
showBackButton: true,
|
||||||
state: "hint",
|
state: "hint",
|
||||||
},
|
} satisfies RouteDataProperties & ExtensionAnonLayoutWrapperData,
|
||||||
children: [
|
children: [
|
||||||
{ path: "", component: PasswordHintComponent },
|
{ path: "", component: PasswordHintComponent },
|
||||||
{
|
{
|
||||||
@@ -426,7 +445,10 @@ const routes: Routes = [
|
|||||||
{
|
{
|
||||||
path: "signup",
|
path: "signup",
|
||||||
canActivate: [canAccessFeature(FeatureFlag.EmailVerification), unauthGuardFn()],
|
canActivate: [canAccessFeature(FeatureFlag.EmailVerification), unauthGuardFn()],
|
||||||
data: { pageTitle: "createAccount" } satisfies AnonLayoutWrapperData,
|
data: {
|
||||||
|
state: "signup",
|
||||||
|
pageTitle: "createAccount",
|
||||||
|
} satisfies RouteDataProperties & AnonLayoutWrapperData,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "",
|
path: "",
|
||||||
@@ -448,7 +470,8 @@ const routes: Routes = [
|
|||||||
data: {
|
data: {
|
||||||
pageTitle: "setAStrongPassword",
|
pageTitle: "setAStrongPassword",
|
||||||
pageSubtitle: "finishCreatingYourAccountBySettingAPassword",
|
pageSubtitle: "finishCreatingYourAccountBySettingAPassword",
|
||||||
} satisfies AnonLayoutWrapperData,
|
state: "finish-signup",
|
||||||
|
} satisfies RouteDataProperties & AnonLayoutWrapperData,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "",
|
path: "",
|
||||||
@@ -463,7 +486,8 @@ const routes: Routes = [
|
|||||||
data: {
|
data: {
|
||||||
pageTitle: "joinOrganization",
|
pageTitle: "joinOrganization",
|
||||||
pageSubtitle: "finishJoiningThisOrganizationBySettingAMasterPassword",
|
pageSubtitle: "finishJoiningThisOrganizationBySettingAMasterPassword",
|
||||||
} satisfies AnonLayoutWrapperData,
|
state: "set-password-jit",
|
||||||
|
} satisfies RouteDataProperties & AnonLayoutWrapperData,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -471,21 +495,21 @@ const routes: Routes = [
|
|||||||
path: "assign-collections",
|
path: "assign-collections",
|
||||||
component: AssignCollections,
|
component: AssignCollections,
|
||||||
canActivate: [canAccessFeature(FeatureFlag.ExtensionRefresh, true, "/")],
|
canActivate: [canAccessFeature(FeatureFlag.ExtensionRefresh, true, "/")],
|
||||||
data: { state: "assign-collections" },
|
data: { state: "assign-collections" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
...extensionRefreshSwap(AboutPageComponent, AboutPageV2Component, {
|
...extensionRefreshSwap(AboutPageComponent, AboutPageV2Component, {
|
||||||
path: "about",
|
path: "about",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "about" },
|
data: { state: "about" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
...extensionRefreshSwap(MoreFromBitwardenPageComponent, MoreFromBitwardenPageV2Component, {
|
...extensionRefreshSwap(MoreFromBitwardenPageComponent, MoreFromBitwardenPageV2Component, {
|
||||||
path: "more-from-bitwarden",
|
path: "more-from-bitwarden",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "moreFromBitwarden" },
|
data: { state: "moreFromBitwarden" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
...extensionRefreshSwap(TabsComponent, TabsV2Component, {
|
...extensionRefreshSwap(TabsComponent, TabsV2Component, {
|
||||||
path: "tabs",
|
path: "tabs",
|
||||||
data: { state: "tabs" },
|
data: { state: "tabs" } satisfies RouteDataProperties,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "",
|
path: "",
|
||||||
@@ -497,42 +521,42 @@ const routes: Routes = [
|
|||||||
component: CurrentTabComponent,
|
component: CurrentTabComponent,
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
canMatch: [extensionRefreshRedirect("/tabs/vault")],
|
canMatch: [extensionRefreshRedirect("/tabs/vault")],
|
||||||
data: { state: "tabs_current" },
|
data: { state: "tabs_current" } satisfies RouteDataProperties,
|
||||||
runGuardsAndResolvers: "always",
|
runGuardsAndResolvers: "always",
|
||||||
},
|
},
|
||||||
...extensionRefreshSwap(VaultFilterComponent, VaultV2Component, {
|
...extensionRefreshSwap(VaultFilterComponent, VaultV2Component, {
|
||||||
path: "vault",
|
path: "vault",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
canDeactivate: [clearVaultStateGuard],
|
canDeactivate: [clearVaultStateGuard],
|
||||||
data: { state: "tabs_vault" },
|
data: { state: "tabs_vault" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
...generatorSwap(GeneratorComponent, CredentialGeneratorComponent, {
|
...generatorSwap(GeneratorComponent, CredentialGeneratorComponent, {
|
||||||
path: "generator",
|
path: "generator",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "tabs_generator" },
|
data: { state: "tabs_generator" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
...extensionRefreshSwap(SettingsComponent, SettingsV2Component, {
|
...extensionRefreshSwap(SettingsComponent, SettingsV2Component, {
|
||||||
path: "settings",
|
path: "settings",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "tabs_settings" },
|
data: { state: "tabs_settings" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
...extensionRefreshSwap(SendGroupingsComponent, SendV2Component, {
|
...extensionRefreshSwap(SendGroupingsComponent, SendV2Component, {
|
||||||
path: "send",
|
path: "send",
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "tabs_send" },
|
data: { state: "tabs_send" } satisfies RouteDataProperties,
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
path: "account-switcher",
|
path: "account-switcher",
|
||||||
component: AccountSwitcherComponent,
|
component: AccountSwitcherComponent,
|
||||||
data: { state: "account-switcher", doNotSaveUrl: true },
|
data: { state: "account-switcher", doNotSaveUrl: true } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "trash",
|
path: "trash",
|
||||||
component: TrashComponent,
|
component: TrashComponent,
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { state: "trash" },
|
data: { state: "trash" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,14 @@ import { VaultComponent } from "../vault/app/vault/vault.component";
|
|||||||
|
|
||||||
import { SendComponent } from "./tools/send/send.component";
|
import { SendComponent } from "./tools/send/send.component";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data properties acceptable for use in route objects in the desktop
|
||||||
|
*/
|
||||||
|
export interface RouteDataProperties {
|
||||||
|
// For any new route data properties, add them here.
|
||||||
|
// then assert that the data object satisfies this interface in the route object.
|
||||||
|
}
|
||||||
|
|
||||||
const routes: Routes = [
|
const routes: Routes = [
|
||||||
{
|
{
|
||||||
path: "",
|
path: "",
|
||||||
@@ -114,7 +122,6 @@ const routes: Routes = [
|
|||||||
path: "remove-password",
|
path: "remove-password",
|
||||||
component: RemovePasswordComponent,
|
component: RemovePasswordComponent,
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { titleId: "removeMasterPassword" },
|
|
||||||
},
|
},
|
||||||
...unauthUiRefreshSwap(
|
...unauthUiRefreshSwap(
|
||||||
HintComponent,
|
HintComponent,
|
||||||
@@ -122,10 +129,6 @@ const routes: Routes = [
|
|||||||
{
|
{
|
||||||
path: "hint",
|
path: "hint",
|
||||||
canActivate: [unauthGuardFn()],
|
canActivate: [unauthGuardFn()],
|
||||||
data: {
|
|
||||||
pageTitle: "passwordHint",
|
|
||||||
titleId: "passwordHint",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "",
|
path: "",
|
||||||
@@ -137,8 +140,7 @@ const routes: Routes = [
|
|||||||
pageTitle: "requestPasswordHint",
|
pageTitle: "requestPasswordHint",
|
||||||
pageSubtitle: "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou",
|
pageSubtitle: "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou",
|
||||||
pageIcon: UserLockIcon,
|
pageIcon: UserLockIcon,
|
||||||
state: "hint",
|
} satisfies AnonLayoutWrapperData,
|
||||||
},
|
|
||||||
children: [
|
children: [
|
||||||
{ path: "", component: PasswordHintComponent },
|
{ path: "", component: PasswordHintComponent },
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -15,9 +15,15 @@ import {
|
|||||||
/**
|
/**
|
||||||
* Data properties acceptable for use in route objects (see usage in oss-routing.module.ts for example)
|
* Data properties acceptable for use in route objects (see usage in oss-routing.module.ts for example)
|
||||||
*/
|
*/
|
||||||
export interface DataProperties {
|
export interface RouteDataProperties {
|
||||||
titleId?: string; // sets the title of the current HTML document (shows in browser tab)
|
/**
|
||||||
doNotSaveUrl?: boolean; // choose to not keep track of the previous URL in memory
|
* Title of the current HTML document (shows in browser tab)
|
||||||
|
*/
|
||||||
|
titleId?: string;
|
||||||
|
/**
|
||||||
|
* doNotSaveUrl - choose to not keep track of the previous URL in memory in the RouterService
|
||||||
|
*/
|
||||||
|
doNotSaveUrl?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const DEEP_LINK_REDIRECT_URL = new KeyDefinition(ROUTER_DISK, "deepLinkRedirectUrl", {
|
const DEEP_LINK_REDIRECT_URL = new KeyDefinition(ROUTER_DISK, "deepLinkRedirectUrl", {
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ import { VerifyEmailTokenComponent } from "./auth/verify-email-token.component";
|
|||||||
import { VerifyRecoverDeleteComponent } from "./auth/verify-recover-delete.component";
|
import { VerifyRecoverDeleteComponent } from "./auth/verify-recover-delete.component";
|
||||||
import { SponsoredFamiliesComponent } from "./billing/settings/sponsored-families.component";
|
import { SponsoredFamiliesComponent } from "./billing/settings/sponsored-families.component";
|
||||||
import { EnvironmentSelectorComponent } from "./components/environment-selector/environment-selector.component";
|
import { EnvironmentSelectorComponent } from "./components/environment-selector/environment-selector.component";
|
||||||
import { DataProperties } from "./core";
|
import { RouteDataProperties } from "./core";
|
||||||
import { FrontendLayoutComponent } from "./layouts/frontend-layout.component";
|
import { FrontendLayoutComponent } from "./layouts/frontend-layout.component";
|
||||||
import { UserLayoutComponent } from "./layouts/user-layout.component";
|
import { UserLayoutComponent } from "./layouts/user-layout.component";
|
||||||
import { RequestSMAccessComponent } from "./secrets-manager/secrets-manager-landing/request-sm-access.component";
|
import { RequestSMAccessComponent } from "./secrets-manager/secrets-manager-landing/request-sm-access.component";
|
||||||
@@ -79,7 +79,7 @@ const routes: Routes = [
|
|||||||
{
|
{
|
||||||
path: "",
|
path: "",
|
||||||
component: FrontendLayoutComponent,
|
component: FrontendLayoutComponent,
|
||||||
data: { doNotSaveUrl: true } satisfies DataProperties,
|
data: { doNotSaveUrl: true } satisfies RouteDataProperties,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "",
|
path: "",
|
||||||
@@ -90,17 +90,17 @@ const routes: Routes = [
|
|||||||
{
|
{
|
||||||
path: "login-with-device",
|
path: "login-with-device",
|
||||||
component: LoginViaAuthRequestComponent,
|
component: LoginViaAuthRequestComponent,
|
||||||
data: { titleId: "loginWithDevice" } satisfies DataProperties,
|
data: { titleId: "loginWithDevice" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "login-with-passkey",
|
path: "login-with-passkey",
|
||||||
component: LoginViaWebAuthnComponent,
|
component: LoginViaWebAuthnComponent,
|
||||||
data: { titleId: "loginWithPasskey" } satisfies DataProperties,
|
data: { titleId: "loginWithPasskey" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "admin-approval-requested",
|
path: "admin-approval-requested",
|
||||||
component: LoginViaAuthRequestComponent,
|
component: LoginViaAuthRequestComponent,
|
||||||
data: { titleId: "adminApprovalRequested" } satisfies DataProperties,
|
data: { titleId: "adminApprovalRequested" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "login-initiated",
|
path: "login-initiated",
|
||||||
@@ -111,7 +111,7 @@ const routes: Routes = [
|
|||||||
path: "register",
|
path: "register",
|
||||||
component: TrialInitiationComponent,
|
component: TrialInitiationComponent,
|
||||||
canActivate: [unauthGuardFn()],
|
canActivate: [unauthGuardFn()],
|
||||||
data: { titleId: "createAccount" } satisfies DataProperties,
|
data: { titleId: "createAccount" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "trial",
|
path: "trial",
|
||||||
@@ -121,20 +121,23 @@ const routes: Routes = [
|
|||||||
{
|
{
|
||||||
path: "set-password",
|
path: "set-password",
|
||||||
component: SetPasswordComponent,
|
component: SetPasswordComponent,
|
||||||
data: { titleId: "setMasterPassword" } satisfies DataProperties,
|
data: { titleId: "setMasterPassword" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{ path: "verify-email", component: VerifyEmailTokenComponent },
|
{ path: "verify-email", component: VerifyEmailTokenComponent },
|
||||||
{
|
{
|
||||||
path: "accept-organization",
|
path: "accept-organization",
|
||||||
canActivate: [deepLinkGuard()],
|
canActivate: [deepLinkGuard()],
|
||||||
component: AcceptOrganizationComponent,
|
component: AcceptOrganizationComponent,
|
||||||
data: { titleId: "joinOrganization", doNotSaveUrl: false } satisfies DataProperties,
|
data: { titleId: "joinOrganization", doNotSaveUrl: false } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "accept-families-for-enterprise",
|
path: "accept-families-for-enterprise",
|
||||||
component: AcceptFamilySponsorshipComponent,
|
component: AcceptFamilySponsorshipComponent,
|
||||||
canActivate: [deepLinkGuard()],
|
canActivate: [deepLinkGuard()],
|
||||||
data: { titleId: "acceptFamilySponsorship", doNotSaveUrl: false } satisfies DataProperties,
|
data: {
|
||||||
|
titleId: "acceptFamilySponsorship",
|
||||||
|
doNotSaveUrl: false,
|
||||||
|
} satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{ path: "recover", pathMatch: "full", redirectTo: "recover-2fa" },
|
{ path: "recover", pathMatch: "full", redirectTo: "recover-2fa" },
|
||||||
{
|
{
|
||||||
@@ -147,19 +150,19 @@ const routes: Routes = [
|
|||||||
path: "verify-recover-delete-provider",
|
path: "verify-recover-delete-provider",
|
||||||
component: VerifyRecoverDeleteProviderComponent,
|
component: VerifyRecoverDeleteProviderComponent,
|
||||||
canActivate: [unauthGuardFn()],
|
canActivate: [unauthGuardFn()],
|
||||||
data: { titleId: "deleteAccount" } satisfies DataProperties,
|
data: { titleId: "deleteAccount" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "update-temp-password",
|
path: "update-temp-password",
|
||||||
component: UpdateTempPasswordComponent,
|
component: UpdateTempPasswordComponent,
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { titleId: "updateTempPassword" } satisfies DataProperties,
|
data: { titleId: "updateTempPassword" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "update-password",
|
path: "update-password",
|
||||||
component: UpdatePasswordComponent,
|
component: UpdatePasswordComponent,
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
data: { titleId: "updatePassword" } satisfies DataProperties,
|
data: { titleId: "updatePassword" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "migrate-legacy-encryption",
|
path: "migrate-legacy-encryption",
|
||||||
@@ -220,8 +223,10 @@ const routes: Routes = [
|
|||||||
{
|
{
|
||||||
path: "signup",
|
path: "signup",
|
||||||
canActivate: [canAccessFeature(FeatureFlag.EmailVerification), unauthGuardFn()],
|
canActivate: [canAccessFeature(FeatureFlag.EmailVerification), unauthGuardFn()],
|
||||||
data: { pageTitle: "createAccount", titleId: "createAccount" } satisfies DataProperties &
|
data: {
|
||||||
AnonLayoutWrapperData,
|
pageTitle: "createAccount",
|
||||||
|
titleId: "createAccount",
|
||||||
|
} satisfies RouteDataProperties & AnonLayoutWrapperData,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "",
|
path: "",
|
||||||
@@ -244,7 +249,7 @@ const routes: Routes = [
|
|||||||
pageTitle: "setAStrongPassword",
|
pageTitle: "setAStrongPassword",
|
||||||
pageSubtitle: "finishCreatingYourAccountBySettingAPassword",
|
pageSubtitle: "finishCreatingYourAccountBySettingAPassword",
|
||||||
titleId: "setAStrongPassword",
|
titleId: "setAStrongPassword",
|
||||||
} satisfies DataProperties & AnonLayoutWrapperData,
|
} satisfies RouteDataProperties & AnonLayoutWrapperData,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "",
|
path: "",
|
||||||
@@ -257,7 +262,7 @@ const routes: Routes = [
|
|||||||
data: {
|
data: {
|
||||||
pageTitle: "viewSend",
|
pageTitle: "viewSend",
|
||||||
showReadonlyHostname: true,
|
showReadonlyHostname: true,
|
||||||
} satisfies DataProperties & AnonLayoutWrapperData,
|
} satisfies RouteDataProperties & AnonLayoutWrapperData,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "",
|
path: "",
|
||||||
@@ -301,7 +306,7 @@ const routes: Routes = [
|
|||||||
data: {
|
data: {
|
||||||
pageTitle: "enterpriseSingleSignOn",
|
pageTitle: "enterpriseSingleSignOn",
|
||||||
titleId: "enterpriseSingleSignOn",
|
titleId: "enterpriseSingleSignOn",
|
||||||
} satisfies DataProperties & AnonLayoutWrapperData,
|
} satisfies RouteDataProperties & AnonLayoutWrapperData,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "",
|
path: "",
|
||||||
@@ -362,7 +367,7 @@ const routes: Routes = [
|
|||||||
],
|
],
|
||||||
data: {
|
data: {
|
||||||
pageTitle: "verifyIdentity",
|
pageTitle: "verifyIdentity",
|
||||||
} satisfies DataProperties & AnonLayoutWrapperData,
|
} satisfies RouteDataProperties & AnonLayoutWrapperData,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "recover-2fa",
|
path: "recover-2fa",
|
||||||
@@ -381,7 +386,7 @@ const routes: Routes = [
|
|||||||
data: {
|
data: {
|
||||||
pageTitle: "recoverAccountTwoStep",
|
pageTitle: "recoverAccountTwoStep",
|
||||||
titleId: "recoverAccountTwoStep",
|
titleId: "recoverAccountTwoStep",
|
||||||
} satisfies DataProperties & AnonLayoutWrapperData,
|
} satisfies RouteDataProperties & AnonLayoutWrapperData,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "accept-emergency",
|
path: "accept-emergency",
|
||||||
@@ -390,7 +395,7 @@ const routes: Routes = [
|
|||||||
pageTitle: "emergencyAccess",
|
pageTitle: "emergencyAccess",
|
||||||
titleId: "acceptEmergency",
|
titleId: "acceptEmergency",
|
||||||
doNotSaveUrl: false,
|
doNotSaveUrl: false,
|
||||||
} satisfies DataProperties & AnonLayoutWrapperData,
|
} satisfies RouteDataProperties & AnonLayoutWrapperData,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "",
|
path: "",
|
||||||
@@ -407,7 +412,7 @@ const routes: Routes = [
|
|||||||
data: {
|
data: {
|
||||||
pageTitle: "deleteAccount",
|
pageTitle: "deleteAccount",
|
||||||
titleId: "deleteAccount",
|
titleId: "deleteAccount",
|
||||||
} satisfies DataProperties & AnonLayoutWrapperData,
|
} satisfies RouteDataProperties & AnonLayoutWrapperData,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "",
|
path: "",
|
||||||
@@ -426,7 +431,7 @@ const routes: Routes = [
|
|||||||
data: {
|
data: {
|
||||||
pageTitle: "deleteAccount",
|
pageTitle: "deleteAccount",
|
||||||
titleId: "deleteAccount",
|
titleId: "deleteAccount",
|
||||||
} satisfies DataProperties & AnonLayoutWrapperData,
|
} satisfies RouteDataProperties & AnonLayoutWrapperData,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "",
|
path: "",
|
||||||
@@ -441,7 +446,7 @@ const routes: Routes = [
|
|||||||
data: {
|
data: {
|
||||||
pageTitle: "removeMasterPassword",
|
pageTitle: "removeMasterPassword",
|
||||||
titleId: "removeMasterPassword",
|
titleId: "removeMasterPassword",
|
||||||
} satisfies DataProperties & AnonLayoutWrapperData,
|
} satisfies RouteDataProperties & AnonLayoutWrapperData,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "trial-initiation",
|
path: "trial-initiation",
|
||||||
@@ -479,7 +484,7 @@ const routes: Routes = [
|
|||||||
{
|
{
|
||||||
path: "sends",
|
path: "sends",
|
||||||
component: SendComponent,
|
component: SendComponent,
|
||||||
data: { titleId: "send" } satisfies DataProperties,
|
data: { titleId: "send" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "sm-landing",
|
path: "sm-landing",
|
||||||
@@ -494,7 +499,7 @@ const routes: Routes = [
|
|||||||
{
|
{
|
||||||
path: "create-organization",
|
path: "create-organization",
|
||||||
component: CreateOrganizationComponent,
|
component: CreateOrganizationComponent,
|
||||||
data: { titleId: "newOrganization" } satisfies DataProperties,
|
data: { titleId: "newOrganization" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "settings",
|
path: "settings",
|
||||||
@@ -503,12 +508,12 @@ const routes: Routes = [
|
|||||||
{
|
{
|
||||||
path: "account",
|
path: "account",
|
||||||
component: AccountComponent,
|
component: AccountComponent,
|
||||||
data: { titleId: "myAccount" } satisfies DataProperties,
|
data: { titleId: "myAccount" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "preferences",
|
path: "preferences",
|
||||||
component: PreferencesComponent,
|
component: PreferencesComponent,
|
||||||
data: { titleId: "preferences" } satisfies DataProperties,
|
data: { titleId: "preferences" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "security",
|
path: "security",
|
||||||
@@ -517,7 +522,7 @@ const routes: Routes = [
|
|||||||
{
|
{
|
||||||
path: "domain-rules",
|
path: "domain-rules",
|
||||||
component: DomainRulesComponent,
|
component: DomainRulesComponent,
|
||||||
data: { titleId: "domainRules" } satisfies DataProperties,
|
data: { titleId: "domainRules" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "subscription",
|
path: "subscription",
|
||||||
@@ -532,19 +537,19 @@ const routes: Routes = [
|
|||||||
{
|
{
|
||||||
path: "",
|
path: "",
|
||||||
component: EmergencyAccessComponent,
|
component: EmergencyAccessComponent,
|
||||||
data: { titleId: "emergencyAccess" } satisfies DataProperties,
|
data: { titleId: "emergencyAccess" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: ":id",
|
path: ":id",
|
||||||
component: EmergencyAccessViewComponent,
|
component: EmergencyAccessViewComponent,
|
||||||
data: { titleId: "emergencyAccess" } satisfies DataProperties,
|
data: { titleId: "emergencyAccess" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "sponsored-families",
|
path: "sponsored-families",
|
||||||
component: SponsoredFamiliesComponent,
|
component: SponsoredFamiliesComponent,
|
||||||
data: { titleId: "sponsoredFamilies" } satisfies DataProperties,
|
data: { titleId: "sponsoredFamilies" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -559,7 +564,7 @@ const routes: Routes = [
|
|||||||
import("./tools/import/import-web.component").then((mod) => mod.ImportWebComponent),
|
import("./tools/import/import-web.component").then((mod) => mod.ImportWebComponent),
|
||||||
data: {
|
data: {
|
||||||
titleId: "importData",
|
titleId: "importData",
|
||||||
} satisfies DataProperties,
|
} satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "export",
|
path: "export",
|
||||||
@@ -569,12 +574,12 @@ const routes: Routes = [
|
|||||||
),
|
),
|
||||||
data: {
|
data: {
|
||||||
titleId: "exportVault",
|
titleId: "exportVault",
|
||||||
} satisfies DataProperties,
|
} satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "generator",
|
path: "generator",
|
||||||
component: GeneratorComponent,
|
component: GeneratorComponent,
|
||||||
data: { titleId: "generator" } satisfies DataProperties,
|
data: { titleId: "generator" } satisfies RouteDataProperties,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user