From 766d792b10d366afa0cea6a583deece0354988ae Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Sun, 8 Jun 2025 13:50:52 +0200
Subject: [PATCH] Feature/restructure paths to routes (#4863)
* Restructure paths to routes
---
apps/client/src/app/app-routing.module.ts | 50 +++++++-------
apps/client/src/app/app.component.ts | 32 ++++-----
.../access-table/access-table.component.ts | 4 +-
.../account-detail-dialog.component.ts | 20 ++++--
.../admin-settings.component.ts | 4 +-
.../benchmark-comparator.component.ts | 6 +-
.../components/header/header.component.html | 26 +++----
.../app/components/header/header.component.ts | 38 +++++-----
.../holding-detail-dialog.component.ts | 20 ++++--
.../home-holdings/home-holdings.component.ts | 8 +--
.../home-overview/home-overview.component.ts | 12 ++--
...scription-interstitial-dialog.component.ts | 4 +-
.../user-account-membership.component.ts | 4 +-
apps/client/src/app/core/auth.guard.ts | 48 +++++++------
.../src/app/core/http-response.interceptor.ts | 6 +-
.../pages/about/about-page-routing.module.ts | 12 ++--
.../app/pages/about/about-page.component.ts | 14 ++--
.../overview/about-overview-page.component.ts | 10 +--
.../accounts/accounts-page-routing.module.ts | 3 +-
.../pages/admin/admin-page-routing.module.ts | 10 +--
.../app/pages/admin/admin-page.component.ts | 12 ++--
.../hallo-ghostfolio-page.component.ts | 8 +--
.../hello-ghostfolio-page.component.ts | 8 +--
...st-months-in-open-source-page.component.ts | 6 +-
...-meets-internet-identity-page.component.ts | 4 +-
...get-my-finances-in-order-page.component.ts | 6 +-
.../500-stars-on-github-page.component.ts | 8 +--
.../hacktoberfest-2022-page.component.ts | 4 +-
.../black-friday-2022-page.component.ts | 8 +--
...g-your-personal-finances-page.component.ts | 4 +-
...auf-sackgeld-vorgestellt-page.component.ts | 4 +-
.../ghostfolio-meets-umbrel-page.component.ts | 4 +-
.../1000-stars-on-github-page.component.ts | 8 +--
...otential-with-ghostfolio-page.component.ts | 8 +--
...ploring-the-path-to-fire-page.component.ts | 6 +-
...tfolio-joins-oss-friends-page.component.ts | 6 +-
.../ghostfolio-2-page.component.ts | 12 ++--
.../hacktoberfest-2023-page.component.ts | 8 +--
.../black-week-2023-page.component.ts | 8 +--
...oberfest-2023-debriefing-page.component.ts | 8 +--
.../hacktoberfest-2024-page.component.ts | 8 +--
.../black-weeks-2024-page.component.ts | 8 +--
.../app/pages/faq/faq-page-routing.module.ts | 6 +-
.../src/app/pages/faq/faq-page.component.ts | 8 +--
.../overview/faq-overview-page.component.ts | 6 +-
.../app/pages/faq/saas/saas-page.component.ts | 15 ++--
.../self-hosting-page.component.ts | 4 +-
.../pages/features/features-page.component.ts | 6 +-
.../pages/home/home-page-routing.module.ts | 18 +++--
.../src/app/pages/home/home-page.component.ts | 16 ++---
.../pages/landing/landing-page.component.ts | 10 +--
.../pages/open/open-page-routing.module.ts | 3 +-
.../activities-page-routing.module.ts | 3 +-
.../portfolio-page-routing.module.ts | 15 ++--
.../portfolio/portfolio-page.component.ts | 14 ++--
.../pages/pricing/pricing-page.component.ts | 6 +-
.../register/register-page-routing.module.ts | 3 +-
.../show-access-token-dialog.component.ts | 6 +-
.../glossary/resources-glossary.component.ts | 6 +-
.../overview/resources-overview.component.ts | 10 +--
...sonal-finance-tools-page-routing.module.ts | 4 +-
.../personal-finance-tools-page.component.ts | 8 +--
.../product-page.component.ts | 10 +--
.../resources-page-routing.module.ts | 10 +--
.../resources/resources-page.component.ts | 8 +--
.../user-account-page-routing.module.ts | 6 +-
.../user-account-page.component.ts | 8 +--
.../app/pages/zen/zen-page-routing.module.ts | 15 ++--
.../src/app/pages/zen/zen-page.component.ts | 10 +--
libs/common/src/lib/{paths.ts => routes.ts} | 69 ++++++++++++++++---
.../membership-card.component.ts | 4 +-
.../no-transactions-info.component.ts | 8 +--
.../premium-indicator.component.ts | 4 +-
73 files changed, 447 insertions(+), 359 deletions(-)
rename libs/common/src/lib/{paths.ts => routes.ts} (52%)
diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts
index b3be70bb2..46473d35d 100644
--- a/apps/client/src/app/app-routing.module.ts
+++ b/apps/client/src/app/app-routing.module.ts
@@ -1,6 +1,10 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { PageTitleStrategy } from '@ghostfolio/client/services/page-title.strategy';
-import { paths } from '@ghostfolio/common/paths';
+import {
+ publicRoutes,
+ routes as ghostfolioRoutes,
+ internalRoutes
+} from '@ghostfolio/common/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes, TitleStrategy } from '@angular/router';
@@ -9,26 +13,26 @@ import { ModulePreloadService } from './core/module-preload.service';
const routes: Routes = [
{
- path: paths.about,
+ path: ghostfolioRoutes.about,
loadChildren: () =>
import('./pages/about/about-page.module').then((m) => m.AboutPageModule)
},
{
- path: paths.account,
+ path: ghostfolioRoutes.account,
loadChildren: () =>
import('./pages/user-account/user-account-page.module').then(
(m) => m.UserAccountPageModule
)
},
{
- path: paths.accounts,
+ path: internalRoutes.accounts.path,
loadChildren: () =>
import('./pages/accounts/accounts-page.module').then(
(m) => m.AccountsPageModule
)
},
{
- path: paths.adminControl,
+ path: ghostfolioRoutes.adminControl,
loadChildren: () =>
import('./pages/admin/admin-page.module').then((m) => m.AdminPageModule)
},
@@ -38,16 +42,16 @@ const routes: Routes = [
import('./pages/api/api-page.component').then(
(c) => c.GfApiPageComponent
),
- path: paths.api,
+ path: ghostfolioRoutes.api,
title: 'Ghostfolio API'
},
{
- path: paths.auth,
+ path: ghostfolioRoutes.auth,
loadChildren: () =>
import('./pages/auth/auth-page.module').then((m) => m.AuthPageModule)
},
{
- path: paths.blog,
+ path: ghostfolioRoutes.blog,
loadChildren: () =>
import('./pages/blog/blog-page.module').then((m) => m.BlogPageModule)
},
@@ -57,10 +61,10 @@ const routes: Routes = [
import('./pages/demo/demo-page.component').then(
(c) => c.GfDemoPageComponent
),
- path: paths.demo
+ path: ghostfolioRoutes.demo
},
{
- path: paths.faq,
+ path: ghostfolioRoutes.faq,
loadChildren: () =>
import('./pages/faq/faq-page.module').then((m) => m.FaqPageModule)
},
@@ -70,11 +74,11 @@ const routes: Routes = [
import('./pages/features/features-page.component').then(
(c) => c.GfFeaturesPageComponent
),
- path: paths.features,
+ path: ghostfolioRoutes.features,
title: $localize`Features`
},
{
- path: paths.home,
+ path: internalRoutes.home.path,
loadChildren: () =>
import('./pages/home/home-page.module').then((m) => m.HomePageModule)
},
@@ -84,58 +88,58 @@ const routes: Routes = [
import('./pages/i18n/i18n-page.component').then(
(c) => c.GfI18nPageComponent
),
- path: paths.i18n,
+ path: ghostfolioRoutes.i18n,
title: $localize`Internationalization`
},
{
- path: paths.markets,
+ path: ghostfolioRoutes.markets,
loadChildren: () =>
import('./pages/markets/markets-page.module').then(
(m) => m.MarketsPageModule
)
},
{
- path: paths.openStartup,
+ path: publicRoutes.openStartup.path,
loadChildren: () =>
import('./pages/open/open-page.module').then((m) => m.OpenPageModule)
},
{
- path: paths.portfolio,
+ path: internalRoutes.portfolio.path,
loadChildren: () =>
import('./pages/portfolio/portfolio-page.module').then(
(m) => m.PortfolioPageModule
)
},
{
- path: paths.pricing,
+ path: ghostfolioRoutes.pricing,
loadChildren: () =>
import('./pages/pricing/pricing-page.module').then(
(m) => m.PricingPageModule
)
},
{
- path: paths.public,
+ path: ghostfolioRoutes.public,
loadChildren: () =>
import('./pages/public/public-page.module').then(
(m) => m.PublicPageModule
)
},
{
- path: paths.register,
+ path: publicRoutes.register.path,
loadChildren: () =>
import('./pages/register/register-page.module').then(
(m) => m.RegisterPageModule
)
},
{
- path: paths.resources,
+ path: ghostfolioRoutes.resources,
loadChildren: () =>
import('./pages/resources/resources-page.module').then(
(m) => m.ResourcesPageModule
)
},
{
- path: paths.start,
+ path: ghostfolioRoutes.start,
loadChildren: () =>
import('./pages/landing/landing-page.module').then(
(m) => m.LandingPageModule
@@ -146,11 +150,11 @@ const routes: Routes = [
import('./pages/webauthn/webauthn-page.component').then(
(c) => c.GfWebauthnPageComponent
),
- path: paths.webauthn,
+ path: ghostfolioRoutes.webauthn,
title: $localize`Sign in`
},
{
- path: paths.zen,
+ path: internalRoutes.zen.path,
loadChildren: () =>
import('./pages/zen/zen-page.module').then((m) => m.ZenPageModule)
},
diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts
index 5d198580e..f0be8c76e 100644
--- a/apps/client/src/app/app.component.ts
+++ b/apps/client/src/app/app.component.ts
@@ -2,8 +2,8 @@ import { GfHoldingDetailDialogComponent } from '@ghostfolio/client/components/ho
import { HoldingDetailDialogParams } from '@ghostfolio/client/components/holding-detail-dialog/interfaces/interfaces';
import { getCssVariable } from '@ghostfolio/common/helper';
import { InfoItem, User } from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
+import { publicRoutes, routes } from '@ghostfolio/common/routes';
import { ColorScheme } from '@ghostfolio/common/types';
import { DOCUMENT } from '@angular/common';
@@ -63,25 +63,25 @@ export class AppComponent implements OnDestroy, OnInit {
public hasTabs = false;
public info: InfoItem;
public pageTitle: string;
- public routerLinkAbout = ['/' + paths.about];
- public routerLinkAboutChangelog = ['/' + paths.about, paths.changelog];
- public routerLinkAboutLicense = ['/' + paths.about, paths.license];
+ public routerLinkAbout = ['/' + routes.about];
+ public routerLinkAboutChangelog = ['/' + routes.about, routes.changelog];
+ public routerLinkAboutLicense = ['/' + routes.about, routes.license];
public routerLinkAboutPrivacyPolicy = [
- '/' + paths.about,
- paths.privacyPolicy
+ '/' + routes.about,
+ routes.privacyPolicy
];
public routerLinkAboutTermsOfService = [
- '/' + paths.about,
- paths.termsOfService
+ '/' + routes.about,
+ routes.termsOfService
];
- public routerLinkBlog = ['/' + paths.blog];
- public routerLinkFaq = ['/' + paths.faq];
- public routerLinkFeatures = ['/' + paths.features];
- public routerLinkMarkets = ['/' + paths.markets];
- public routerLinkOpenStartup = ['/' + paths.openStartup];
- public routerLinkPricing = ['/' + paths.pricing];
- public routerLinkRegister = ['/' + paths.register];
- public routerLinkResources = ['/' + paths.resources];
+ public routerLinkBlog = ['/' + routes.blog];
+ public routerLinkFaq = ['/' + routes.faq];
+ public routerLinkFeatures = ['/' + routes.features];
+ public routerLinkMarkets = ['/' + routes.markets];
+ public routerLinkOpenStartup = ['/' + publicRoutes.openStartup.path];
+ public routerLinkPricing = ['/' + routes.pricing];
+ public routerLinkRegister = ['/' + publicRoutes.register.path];
+ public routerLinkResources = ['/' + routes.resources];
public showFooter = false;
public user: User;
diff --git a/apps/client/src/app/components/access-table/access-table.component.ts b/apps/client/src/app/components/access-table/access-table.component.ts
index bcd5839e0..5487f570d 100644
--- a/apps/client/src/app/components/access-table/access-table.component.ts
+++ b/apps/client/src/app/components/access-table/access-table.component.ts
@@ -1,7 +1,7 @@
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { Access, User } from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Clipboard } from '@angular/cdk/clipboard';
import {
@@ -55,7 +55,7 @@ export class AccessTableComponent implements OnChanges {
public getPublicUrl(aId: string): string {
const languageCode = this.user.settings.language;
- return `${this.baseUrl}/${languageCode}/${paths.public}/${aId}`;
+ return `${this.baseUrl}/${languageCode}/${routes.public}/${aId}`;
}
public onCopyUrlToClipboard(aId: string): void {
diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
index ba3b9e871..aea1c544c 100644
--- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
+++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts
@@ -9,8 +9,8 @@ import {
PortfolioPosition,
User
} from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
+import { internalRoutes } from '@ghostfolio/common/routes';
import { OrderWithAccount } from '@ghostfolio/common/types';
import {
@@ -93,9 +93,12 @@ export class AccountDetailDialog implements OnDestroy, OnInit {
}
public onCloneActivity(aActivity: Activity) {
- this.router.navigate(['/' + paths.portfolio, paths.activities], {
- queryParams: { activityId: aActivity.id, createDialog: true }
- });
+ this.router.navigate(
+ internalRoutes.portfolio.subRoutes.activities.routerLink,
+ {
+ queryParams: { activityId: aActivity.id, createDialog: true }
+ }
+ );
this.dialogRef.close();
}
@@ -152,9 +155,12 @@ export class AccountDetailDialog implements OnDestroy, OnInit {
}
public onUpdateActivity(aActivity: Activity) {
- this.router.navigate(['/' + paths.portfolio, paths.activities], {
- queryParams: { activityId: aActivity.id, editDialog: true }
- });
+ this.router.navigate(
+ internalRoutes.portfolio.subRoutes.activities.routerLink,
+ {
+ queryParams: { activityId: aActivity.id, editDialog: true }
+ }
+ );
this.dialogRef.close();
}
diff --git a/apps/client/src/app/components/admin-settings/admin-settings.component.ts b/apps/client/src/app/components/admin-settings/admin-settings.component.ts
index 68db9eaac..e6fdb53cc 100644
--- a/apps/client/src/app/components/admin-settings/admin-settings.component.ts
+++ b/apps/client/src/app/components/admin-settings/admin-settings.component.ts
@@ -10,7 +10,7 @@ import {
DataProviderInfo,
User
} from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import {
ChangeDetectionStrategy,
@@ -72,7 +72,7 @@ export class AdminSettingsComponent implements OnDestroy, OnInit {
const languageCode = this.user.settings.language;
- this.pricingUrl = `https://ghostfol.io/${languageCode}/${paths.pricing}`;
+ this.pricingUrl = `https://ghostfol.io/${languageCode}/${routes.pricing}`;
this.changeDetectorRef.markForCheck();
}
diff --git a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
index c98f01fb7..74a2f85d6 100644
--- a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
+++ b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
@@ -12,8 +12,8 @@ import {
parseDate
} from '@ghostfolio/common/helper';
import { LineChartItem, User } from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
+import { routes } from '@ghostfolio/common/routes';
import { ColorScheme } from '@ghostfolio/common/types';
import {
@@ -65,8 +65,8 @@ export class BenchmarkComparatorComponent implements OnChanges, OnDestroy {
public chart: Chart<'line'>;
public hasPermissionToAccessAdminControl: boolean;
public routerLinkAdminControlMarketData = [
- '/' + paths.adminControl,
- paths.marketData
+ '/' + routes.adminControl,
+ routes.marketData
];
public constructor() {
diff --git a/apps/client/src/app/components/header/header.component.html b/apps/client/src/app/components/header/header.component.html
index 74737ca05..c20711242 100644
--- a/apps/client/src/app/components/header/header.component.html
+++ b/apps/client/src/app/components/header/header.component.html
@@ -20,9 +20,9 @@
mat-flat-button
[ngClass]="{
'font-weight-bold':
- currentRoute === paths.home || currentRoute === paths.zen,
+ currentRoute === routes.home || currentRoute === routes.zen,
'text-decoration-underline':
- currentRoute === paths.home || currentRoute === paths.zen
+ currentRoute === routes.home || currentRoute === routes.zen
}"
[routerLink]="['/']"
>OverviewPortfolioAccountsAdmin ControlOverviewPortfolioAccounts
My Ghostfolio
@@ -271,7 +271,7 @@
i18n
mat-menu-item
[ngClass]="{
- 'font-weight-bold': currentRoute === paths.adminControl
+ 'font-weight-bold': currentRoute === routes.adminControl
}"
[routerLink]="routerLinkAdminControl"
>Admin Control();
diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
index cdaea83dc..6e8fc2af5 100644
--- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
+++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
@@ -13,8 +13,8 @@ import {
LineChartItem,
User
} from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
+import { internalRoutes } from '@ghostfolio/common/routes';
import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table';
import { GfDataProviderCreditsComponent } from '@ghostfolio/ui/data-provider-credits';
import { GfHistoricalMarketDataEditorComponent } from '@ghostfolio/ui/historical-market-data-editor';
@@ -470,9 +470,12 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
}
public onCloneActivity(aActivity: Activity) {
- this.router.navigate(['/' + paths.portfolio, paths.activities], {
- queryParams: { activityId: aActivity.id, createDialog: true }
- });
+ this.router.navigate(
+ internalRoutes.portfolio.subRoutes.activities.routerLink,
+ {
+ queryParams: { activityId: aActivity.id, createDialog: true }
+ }
+ );
this.dialogRef.close();
}
@@ -512,9 +515,12 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
}
public onUpdateActivity(aActivity: Activity) {
- this.router.navigate(['/' + paths.portfolio, paths.activities], {
- queryParams: { activityId: aActivity.id, editDialog: true }
- });
+ this.router.navigate(
+ internalRoutes.portfolio.subRoutes.activities.routerLink,
+ {
+ queryParams: { activityId: aActivity.id, editDialog: true }
+ }
+ );
this.dialogRef.close();
}
diff --git a/apps/client/src/app/components/home-holdings/home-holdings.component.ts b/apps/client/src/app/components/home-holdings/home-holdings.component.ts
index 9f772a3e4..03de79f44 100644
--- a/apps/client/src/app/components/home-holdings/home-holdings.component.ts
+++ b/apps/client/src/app/components/home-holdings/home-holdings.component.ts
@@ -7,8 +7,8 @@ import {
ToggleOption,
User
} from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
+import { internalRoutes } from '@ghostfolio/common/routes';
import { HoldingType, HoldingsViewMode } from '@ghostfolio/common/types';
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
@@ -37,10 +37,8 @@ export class HomeHoldingsComponent implements OnDestroy, OnInit {
{ label: $localize`Active`, value: 'ACTIVE' },
{ label: $localize`Closed`, value: 'CLOSED' }
];
- public routerLinkPortfolioActivities = [
- '/' + paths.portfolio,
- paths.activities
- ];
+ public routerLinkPortfolioActivities =
+ internalRoutes.portfolio.subRoutes.activities.routerLink;
public user: User;
public viewModeFormControl = new FormControl(
HomeHoldingsComponent.DEFAULT_HOLDINGS_VIEW_MODE
diff --git a/apps/client/src/app/components/home-overview/home-overview.component.ts b/apps/client/src/app/components/home-overview/home-overview.component.ts
index 783b7d1b9..776967c3d 100644
--- a/apps/client/src/app/components/home-overview/home-overview.component.ts
+++ b/apps/client/src/app/components/home-overview/home-overview.component.ts
@@ -10,8 +10,8 @@ import {
PortfolioPerformance,
User
} from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
+import { internalRoutes } from '@ghostfolio/common/routes';
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
import { DeviceDetectorService } from 'ngx-device-detector';
@@ -37,12 +37,10 @@ export class HomeOverviewComponent implements OnDestroy, OnInit {
public isLoadingPerformance = true;
public performance: PortfolioPerformance;
public precision = 2;
- public routerLinkAccounts = ['/' + paths.accounts];
- public routerLinkPortfolio = ['/' + paths.portfolio];
- public routerLinkPortfolioActivities = [
- '/' + paths.portfolio,
- paths.activities
- ];
+ public routerLinkAccounts = internalRoutes.accounts.routerLink;
+ public routerLinkPortfolio = internalRoutes.portfolio.routerLink;
+ public routerLinkPortfolioActivities =
+ internalRoutes.portfolio.subRoutes.activities.routerLink;
public showDetails = false;
public unit: string;
public user: User;
diff --git a/apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts b/apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts
index 233493d13..df257a001 100644
--- a/apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts
+++ b/apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import {
ChangeDetectionStrategy,
@@ -28,7 +28,7 @@ export class SubscriptionInterstitialDialog implements OnInit {
public remainingSkipButtonDelay =
SubscriptionInterstitialDialog.SKIP_BUTTON_DELAY_IN_SECONDS;
- public routerLinkPricing = ['/' + paths.pricing];
+ public routerLinkPricing = ['/' + routes.pricing];
public variantIndex: number;
private unsubscribeSubject = new Subject();
diff --git a/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts b/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
index 82810392c..27655915b 100644
--- a/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
+++ b/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
@@ -4,8 +4,8 @@ import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { getDateFormatString } from '@ghostfolio/common/helper';
import { User } from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
+import { routes } from '@ghostfolio/common/routes';
import {
ChangeDetectionStrategy,
@@ -37,7 +37,7 @@ export class UserAccountMembershipComponent implements OnDestroy {
public hasPermissionToUpdateUserSettings: boolean;
public price: number;
public priceId: string;
- public routerLinkPricing = ['/' + paths.pricing];
+ public routerLinkPricing = ['/' + routes.pricing];
public trySubscriptionMail =
'mailto:hi@ghostfol.io?Subject=Ghostfolio Premium Trial&body=Hello%0D%0DI am interested in Ghostfolio Premium. Can you please send me a coupon code to try it for some time?%0D%0DKind regards';
public user: User;
diff --git a/apps/client/src/app/core/auth.guard.ts b/apps/client/src/app/core/auth.guard.ts
index 87ef23d60..21a92b166 100644
--- a/apps/client/src/app/core/auth.guard.ts
+++ b/apps/client/src/app/core/auth.guard.ts
@@ -1,7 +1,11 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { SettingsStorageService } from '@ghostfolio/client/services/settings-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
-import { paths } from '@ghostfolio/common/paths';
+import {
+ internalRoutes,
+ publicRoutes,
+ routes
+} from '@ghostfolio/common/routes';
import { Injectable } from '@angular/core';
import {
@@ -15,17 +19,17 @@ import { catchError } from 'rxjs/operators';
@Injectable({ providedIn: 'root' })
export class AuthGuard {
private static PUBLIC_PAGE_ROUTES = [
- `/${paths.about}`,
- `/${paths.blog}`,
- `/${paths.demo}`,
- `/${paths.faq}`,
- `/${paths.features}`,
- `/${paths.markets}`,
- `/${paths.openStartup}`,
- `/${paths.pricing}`,
- `/${paths.public}`,
- `/${paths.register}`,
- `/${paths.resources}`
+ `/${routes.about}`,
+ `/${routes.blog}`,
+ `/${routes.demo}`,
+ `/${routes.faq}`,
+ `/${routes.features}`,
+ `/${routes.markets}`,
+ `/${publicRoutes.openStartup.path}`,
+ `/${routes.pricing}`,
+ `/${routes.public}`,
+ `/${publicRoutes.register.path}`,
+ `/${routes.resources}`
];
public constructor(
@@ -48,10 +52,10 @@ export class AuthGuard {
.pipe(
catchError(() => {
if (utmSource === 'ios') {
- this.router.navigate(['/' + paths.demo]);
+ this.router.navigate(['/' + routes.demo]);
resolve(false);
} else if (utmSource === 'trusted-web-activity') {
- this.router.navigate(['/' + paths.register]);
+ this.router.navigate(['/' + publicRoutes.register.path]);
resolve(false);
} else if (
AuthGuard.PUBLIC_PAGE_ROUTES.some((publicPageRoute) => {
@@ -62,7 +66,7 @@ export class AuthGuard {
resolve(true);
return EMPTY;
} else if (state.url !== '/start') {
- this.router.navigate(['/' + paths.start]);
+ this.router.navigate(['/' + routes.start]);
resolve(false);
return EMPTY;
}
@@ -88,26 +92,26 @@ export class AuthGuard {
resolve(true);
return;
} else if (
- state.url.startsWith(`/${paths.home}`) &&
+ state.url.startsWith(`/${internalRoutes.home.path}`) &&
user.settings.viewMode === 'ZEN'
) {
- this.router.navigate(['/' + paths.zen]);
+ this.router.navigate(internalRoutes.zen.routerLink);
resolve(false);
return;
- } else if (state.url.startsWith(`/${paths.start}`)) {
+ } else if (state.url.startsWith(`/${routes.start}`)) {
if (user.settings.viewMode === 'ZEN') {
- this.router.navigate(['/' + paths.zen]);
+ this.router.navigate(internalRoutes.zen.routerLink);
} else {
- this.router.navigate(['/' + paths.home]);
+ this.router.navigate(internalRoutes.home.routerLink);
}
resolve(false);
return;
} else if (
- state.url.startsWith(`/${paths.zen}`) &&
+ state.url.startsWith(`/${internalRoutes.zen.path}`) &&
user.settings.viewMode === 'DEFAULT'
) {
- this.router.navigate(['/' + paths.home]);
+ this.router.navigate(internalRoutes.home.routerLink);
resolve(false);
return;
}
diff --git a/apps/client/src/app/core/http-response.interceptor.ts b/apps/client/src/app/core/http-response.interceptor.ts
index 32c5350bb..31e1c1947 100644
--- a/apps/client/src/app/core/http-response.interceptor.ts
+++ b/apps/client/src/app/core/http-response.interceptor.ts
@@ -2,7 +2,7 @@ import { DataService } from '@ghostfolio/client/services/data.service';
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service';
import { InfoItem } from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import {
HTTP_INTERCEPTORS,
@@ -75,7 +75,7 @@ export class HttpResponseInterceptor implements HttpInterceptor {
});
this.snackBarRef.onAction().subscribe(() => {
- this.router.navigate(['/' + paths.pricing]);
+ this.router.navigate(['/' + routes.pricing]);
});
}
} else if (error.status === StatusCodes.INTERNAL_SERVER_ERROR) {
@@ -111,7 +111,7 @@ export class HttpResponseInterceptor implements HttpInterceptor {
} else if (error.status === StatusCodes.UNAUTHORIZED) {
if (!error.url.includes('/data-providers/ghostfolio/status')) {
if (this.webAuthnService.isEnabled()) {
- this.router.navigate(['/' + paths.webauthn]);
+ this.router.navigate(['/' + routes.webauthn]);
} else {
this.tokenStorageService.signOut();
}
diff --git a/apps/client/src/app/pages/about/about-page-routing.module.ts b/apps/client/src/app/pages/about/about-page-routing.module.ts
index d8d70a2da..d17612584 100644
--- a/apps/client/src/app/pages/about/about-page-routing.module.ts
+++ b/apps/client/src/app/pages/about/about-page-routing.module.ts
@@ -1,5 +1,5 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
-import { paths } from '@ghostfolio/common/paths';
+import { routes as ghostfolioRoutes } from '@ghostfolio/common/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
@@ -18,35 +18,35 @@ const routes: Routes = [
)
},
{
- path: paths.changelog,
+ path: ghostfolioRoutes.changelog,
loadChildren: () =>
import('./changelog/changelog-page.module').then(
(m) => m.ChangelogPageModule
)
},
{
- path: paths.license,
+ path: ghostfolioRoutes.license,
loadChildren: () =>
import('./license/license-page.module').then(
(m) => m.LicensePageModule
)
},
{
- path: paths.ossFriends,
+ path: ghostfolioRoutes.ossFriends,
loadChildren: () =>
import('./oss-friends/oss-friends-page.module').then(
(m) => m.OpenSourceSoftwareFriendsPageModule
)
},
{
- path: paths.privacyPolicy,
+ path: ghostfolioRoutes.privacyPolicy,
loadChildren: () =>
import('./privacy-policy/privacy-policy-page.module').then(
(m) => m.PrivacyPolicyPageModule
)
},
{
- path: paths.termsOfService,
+ path: ghostfolioRoutes.termsOfService,
loadChildren: () =>
import('./terms-of-service/terms-of-service-page.module').then(
(m) => m.TermsOfServicePageModule
diff --git a/apps/client/src/app/pages/about/about-page.component.ts b/apps/client/src/app/pages/about/about-page.component.ts
index deeffa166..de307cbf9 100644
--- a/apps/client/src/app/pages/about/about-page.component.ts
+++ b/apps/client/src/app/pages/about/about-page.component.ts
@@ -1,8 +1,8 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { TabConfiguration, User } from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
+import { routes } from '@ghostfolio/common/routes';
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
import { DeviceDetectorService } from 'ngx-device-detector';
@@ -44,17 +44,17 @@ export class AboutPageComponent implements OnDestroy, OnInit {
{
iconName: 'information-circle-outline',
label: $localize`About`,
- path: ['/' + paths.about]
+ path: ['/' + routes.about]
},
{
iconName: 'sparkles-outline',
label: $localize`Changelog`,
- path: ['/' + paths.about, paths.changelog]
+ path: ['/' + routes.about, routes.changelog]
},
{
iconName: 'ribbon-outline',
label: $localize`License`,
- path: ['/' + paths.about, paths.license],
+ path: ['/' + routes.about, routes.license],
showCondition: !this.hasPermissionForSubscription
}
];
@@ -63,14 +63,14 @@ export class AboutPageComponent implements OnDestroy, OnInit {
this.tabs.push({
iconName: 'shield-checkmark-outline',
label: $localize`Privacy Policy`,
- path: ['/' + paths.about, paths.privacyPolicy],
+ path: ['/' + routes.about, routes.privacyPolicy],
showCondition: this.hasPermissionForSubscription
});
this.tabs.push({
iconName: 'document-text-outline',
label: $localize`Terms of Service`,
- path: ['/' + paths.about, paths.termsOfService],
+ path: ['/' + routes.about, routes.termsOfService],
showCondition: this.hasPermissionForSubscription
});
@@ -82,7 +82,7 @@ export class AboutPageComponent implements OnDestroy, OnInit {
this.tabs.push({
iconName: 'happy-outline',
label: 'OSS Friends',
- path: ['/' + paths.about, paths.ossFriends]
+ path: ['/' + routes.about, routes.ossFriends]
});
});
}
diff --git a/apps/client/src/app/pages/about/overview/about-overview-page.component.ts b/apps/client/src/app/pages/about/overview/about-overview-page.component.ts
index ec135e4d3..a2d911a8e 100644
--- a/apps/client/src/app/pages/about/overview/about-overview-page.component.ts
+++ b/apps/client/src/app/pages/about/overview/about-overview-page.component.ts
@@ -1,8 +1,8 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { User } from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
+import { publicRoutes, routes } from '@ghostfolio/common/routes';
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
import { Subject } from 'rxjs';
@@ -18,10 +18,10 @@ export class AboutOverviewPageComponent implements OnDestroy, OnInit {
public hasPermissionForStatistics: boolean;
public hasPermissionForSubscription: boolean;
public isLoggedIn: boolean;
- public routerLinkBlog = ['/' + paths.blog];
- public routerLinkFaq = ['/' + paths.faq];
- public routerLinkFeatures = ['/' + paths.features];
- public routerLinkOpenStartup = ['/' + paths.openStartup];
+ public routerLinkBlog = ['/' + routes.blog];
+ public routerLinkFaq = ['/' + routes.faq];
+ public routerLinkFeatures = ['/' + routes.features];
+ public routerLinkOpenStartup = ['/' + publicRoutes.openStartup.path];
public user: User;
private unsubscribeSubject = new Subject();
diff --git a/apps/client/src/app/pages/accounts/accounts-page-routing.module.ts b/apps/client/src/app/pages/accounts/accounts-page-routing.module.ts
index 59c708006..d34ab48fb 100644
--- a/apps/client/src/app/pages/accounts/accounts-page-routing.module.ts
+++ b/apps/client/src/app/pages/accounts/accounts-page-routing.module.ts
@@ -1,4 +1,5 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
+import { internalRoutes } from '@ghostfolio/common/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
@@ -10,7 +11,7 @@ const routes: Routes = [
canActivate: [AuthGuard],
component: AccountsPageComponent,
path: '',
- title: $localize`Accounts`
+ title: internalRoutes.accounts.title
}
];
diff --git a/apps/client/src/app/pages/admin/admin-page-routing.module.ts b/apps/client/src/app/pages/admin/admin-page-routing.module.ts
index d22c754bb..f19f27051 100644
--- a/apps/client/src/app/pages/admin/admin-page-routing.module.ts
+++ b/apps/client/src/app/pages/admin/admin-page-routing.module.ts
@@ -4,7 +4,7 @@ import { AdminOverviewComponent } from '@ghostfolio/client/components/admin-over
import { AdminSettingsComponent } from '@ghostfolio/client/components/admin-settings/admin-settings.component';
import { AdminUsersComponent } from '@ghostfolio/client/components/admin-users/admin-users.component';
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
-import { paths } from '@ghostfolio/common/paths';
+import { routes as ghostfolioRoutes } from '@ghostfolio/common/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
@@ -21,22 +21,22 @@ const routes: Routes = [
title: $localize`Admin Control`
},
{
- path: paths.jobs,
+ path: ghostfolioRoutes.jobs,
component: AdminJobsComponent,
title: $localize`Job Queue`
},
{
- path: paths.marketData,
+ path: ghostfolioRoutes.marketData,
component: AdminMarketDataComponent,
title: $localize`Market Data`
},
{
- path: paths.settings,
+ path: ghostfolioRoutes.settings,
component: AdminSettingsComponent,
title: $localize`Settings`
},
{
- path: paths.users,
+ path: ghostfolioRoutes.users,
component: AdminUsersComponent,
title: $localize`Users`
}
diff --git a/apps/client/src/app/pages/admin/admin-page.component.ts b/apps/client/src/app/pages/admin/admin-page.component.ts
index e787cb0fc..eea04f930 100644
--- a/apps/client/src/app/pages/admin/admin-page.component.ts
+++ b/apps/client/src/app/pages/admin/admin-page.component.ts
@@ -1,5 +1,5 @@
import { TabConfiguration } from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Component, OnDestroy, OnInit } from '@angular/core';
import { DeviceDetectorService } from 'ngx-device-detector';
@@ -27,27 +27,27 @@ export class AdminPageComponent implements OnDestroy, OnInit {
{
iconName: 'reader-outline',
label: $localize`Overview`,
- path: ['/' + paths.adminControl]
+ path: ['/' + routes.adminControl]
},
{
iconName: 'settings-outline',
label: $localize`Settings`,
- path: ['/' + paths.adminControl, paths.settings]
+ path: ['/' + routes.adminControl, routes.settings]
},
{
iconName: 'server-outline',
label: $localize`Market Data`,
- path: ['/' + paths.adminControl, paths.marketData]
+ path: ['/' + routes.adminControl, routes.marketData]
},
{
iconName: 'flash-outline',
label: $localize`Job Queue`,
- path: ['/' + paths.adminControl, paths.jobs]
+ path: ['/' + routes.adminControl, routes.jobs]
},
{
iconName: 'people-outline',
label: $localize`Users`,
- path: ['/' + paths.adminControl, paths.users]
+ path: ['/' + routes.adminControl, routes.users]
}
];
}
diff --git a/apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.component.ts b/apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.component.ts
index 222a79648..430166065 100644
--- a/apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.component.ts
+++ b/apps/client/src/app/pages/blog/2021/07/hallo-ghostfolio/hallo-ghostfolio-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
@@ -11,7 +11,7 @@ import { RouterModule } from '@angular/router';
templateUrl: './hallo-ghostfolio-page.html'
})
export class HalloGhostfolioPageComponent {
- public routerLinkBlog = ['/' + paths.blog];
- public routerLinkPricing = ['/' + paths.pricing];
- public routerLinkResources = ['/' + paths.resources];
+ public routerLinkBlog = ['/' + routes.blog];
+ public routerLinkPricing = ['/' + routes.pricing];
+ public routerLinkResources = ['/' + routes.resources];
}
diff --git a/apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page.component.ts b/apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page.component.ts
index 7538356a5..0c8584cd0 100644
--- a/apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page.component.ts
+++ b/apps/client/src/app/pages/blog/2021/07/hello-ghostfolio/hello-ghostfolio-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
@@ -11,7 +11,7 @@ import { RouterModule } from '@angular/router';
templateUrl: './hello-ghostfolio-page.html'
})
export class HelloGhostfolioPageComponent {
- public routerLinkBlog = ['/' + paths.blog];
- public routerLinkPricing = ['/' + paths.pricing];
- public routerLinkResources = ['/' + paths.resources];
+ public routerLinkBlog = ['/' + routes.blog];
+ public routerLinkPricing = ['/' + routes.pricing];
+ public routerLinkResources = ['/' + routes.resources];
}
diff --git a/apps/client/src/app/pages/blog/2022/01/first-months-in-open-source/first-months-in-open-source-page.component.ts b/apps/client/src/app/pages/blog/2022/01/first-months-in-open-source/first-months-in-open-source-page.component.ts
index 348318421..0b5e6f659 100644
--- a/apps/client/src/app/pages/blog/2022/01/first-months-in-open-source/first-months-in-open-source-page.component.ts
+++ b/apps/client/src/app/pages/blog/2022/01/first-months-in-open-source/first-months-in-open-source-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
@@ -11,6 +11,6 @@ import { RouterModule } from '@angular/router';
templateUrl: './first-months-in-open-source-page.html'
})
export class FirstMonthsInOpenSourcePageComponent {
- public routerLinkBlog = ['/' + paths.blog];
- public routerLinkPricing = ['/' + paths.pricing];
+ public routerLinkBlog = ['/' + routes.blog];
+ public routerLinkPricing = ['/' + routes.pricing];
}
diff --git a/apps/client/src/app/pages/blog/2022/07/ghostfolio-meets-internet-identity/ghostfolio-meets-internet-identity-page.component.ts b/apps/client/src/app/pages/blog/2022/07/ghostfolio-meets-internet-identity/ghostfolio-meets-internet-identity-page.component.ts
index 8c0160c25..a644c7996 100644
--- a/apps/client/src/app/pages/blog/2022/07/ghostfolio-meets-internet-identity/ghostfolio-meets-internet-identity-page.component.ts
+++ b/apps/client/src/app/pages/blog/2022/07/ghostfolio-meets-internet-identity/ghostfolio-meets-internet-identity-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
@@ -11,5 +11,5 @@ import { RouterModule } from '@angular/router';
templateUrl: './ghostfolio-meets-internet-identity-page.html'
})
export class GhostfolioMeetsInternetIdentityPageComponent {
- public routerLinkBlog = ['/' + paths.blog];
+ public routerLinkBlog = ['/' + routes.blog];
}
diff --git a/apps/client/src/app/pages/blog/2022/07/how-do-i-get-my-finances-in-order/how-do-i-get-my-finances-in-order-page.component.ts b/apps/client/src/app/pages/blog/2022/07/how-do-i-get-my-finances-in-order/how-do-i-get-my-finances-in-order-page.component.ts
index 4d747e89a..c7ab04820 100644
--- a/apps/client/src/app/pages/blog/2022/07/how-do-i-get-my-finances-in-order/how-do-i-get-my-finances-in-order-page.component.ts
+++ b/apps/client/src/app/pages/blog/2022/07/how-do-i-get-my-finances-in-order/how-do-i-get-my-finances-in-order-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
@@ -11,6 +11,6 @@ import { RouterModule } from '@angular/router';
templateUrl: './how-do-i-get-my-finances-in-order-page.html'
})
export class HowDoIGetMyFinancesInOrderPageComponent {
- public routerLinkBlog = ['/' + paths.blog];
- public routerLinkResources = ['/' + paths.resources];
+ public routerLinkBlog = ['/' + routes.blog];
+ public routerLinkResources = ['/' + routes.resources];
}
diff --git a/apps/client/src/app/pages/blog/2022/08/500-stars-on-github/500-stars-on-github-page.component.ts b/apps/client/src/app/pages/blog/2022/08/500-stars-on-github/500-stars-on-github-page.component.ts
index b0cd76494..635a8bde3 100644
--- a/apps/client/src/app/pages/blog/2022/08/500-stars-on-github/500-stars-on-github-page.component.ts
+++ b/apps/client/src/app/pages/blog/2022/08/500-stars-on-github/500-stars-on-github-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
@@ -11,7 +11,7 @@ import { RouterModule } from '@angular/router';
templateUrl: './500-stars-on-github-page.html'
})
export class FiveHundredStarsOnGitHubPageComponent {
- public routerLinkBlog = ['/' + paths.blog];
- public routerLinkMarkets = ['/' + paths.markets];
- public routerLinkPricing = ['/' + paths.pricing];
+ public routerLinkBlog = ['/' + routes.blog];
+ public routerLinkMarkets = ['/' + routes.markets];
+ public routerLinkPricing = ['/' + routes.pricing];
}
diff --git a/apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.component.ts b/apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.component.ts
index 491d82f20..8b15e9f2f 100644
--- a/apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.component.ts
+++ b/apps/client/src/app/pages/blog/2022/10/hacktoberfest-2022/hacktoberfest-2022-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
@@ -11,5 +11,5 @@ import { RouterModule } from '@angular/router';
templateUrl: './hacktoberfest-2022-page.html'
})
export class Hacktoberfest2022PageComponent {
- public routerLinkBlog = ['/' + paths.blog];
+ public routerLinkBlog = ['/' + routes.blog];
}
diff --git a/apps/client/src/app/pages/blog/2022/11/black-friday-2022/black-friday-2022-page.component.ts b/apps/client/src/app/pages/blog/2022/11/black-friday-2022/black-friday-2022-page.component.ts
index 311d25096..07ffd76d9 100644
--- a/apps/client/src/app/pages/blog/2022/11/black-friday-2022/black-friday-2022-page.component.ts
+++ b/apps/client/src/app/pages/blog/2022/11/black-friday-2022/black-friday-2022-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { Component } from '@angular/core';
@@ -12,7 +12,7 @@ import { RouterModule } from '@angular/router';
templateUrl: './black-friday-2022-page.html'
})
export class BlackFriday2022PageComponent {
- public routerLinkBlog = ['/' + paths.blog];
- public routerLinkFeatures = ['/' + paths.features];
- public routerLinkPricing = ['/' + paths.pricing];
+ public routerLinkBlog = ['/' + routes.blog];
+ public routerLinkFeatures = ['/' + routes.features];
+ public routerLinkPricing = ['/' + routes.pricing];
}
diff --git a/apps/client/src/app/pages/blog/2022/12/the-importance-of-tracking-your-personal-finances/the-importance-of-tracking-your-personal-finances-page.component.ts b/apps/client/src/app/pages/blog/2022/12/the-importance-of-tracking-your-personal-finances/the-importance-of-tracking-your-personal-finances-page.component.ts
index cffd0be81..f9ebee82b 100644
--- a/apps/client/src/app/pages/blog/2022/12/the-importance-of-tracking-your-personal-finances/the-importance-of-tracking-your-personal-finances-page.component.ts
+++ b/apps/client/src/app/pages/blog/2022/12/the-importance-of-tracking-your-personal-finances/the-importance-of-tracking-your-personal-finances-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
@@ -11,5 +11,5 @@ import { RouterModule } from '@angular/router';
templateUrl: './the-importance-of-tracking-your-personal-finances-page.html'
})
export class TheImportanceOfTrackingYourPersonalFinancesPageComponent {
- public routerLinkBlog = ['/' + paths.blog];
+ public routerLinkBlog = ['/' + routes.blog];
}
diff --git a/apps/client/src/app/pages/blog/2023/01/ghostfolio-auf-sackgeld-vorgestellt/ghostfolio-auf-sackgeld-vorgestellt-page.component.ts b/apps/client/src/app/pages/blog/2023/01/ghostfolio-auf-sackgeld-vorgestellt/ghostfolio-auf-sackgeld-vorgestellt-page.component.ts
index cb86af86f..363bfc8eb 100644
--- a/apps/client/src/app/pages/blog/2023/01/ghostfolio-auf-sackgeld-vorgestellt/ghostfolio-auf-sackgeld-vorgestellt-page.component.ts
+++ b/apps/client/src/app/pages/blog/2023/01/ghostfolio-auf-sackgeld-vorgestellt/ghostfolio-auf-sackgeld-vorgestellt-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
@@ -11,5 +11,5 @@ import { RouterModule } from '@angular/router';
templateUrl: './ghostfolio-auf-sackgeld-vorgestellt-page.html'
})
export class GhostfolioAufSackgeldVorgestelltPageComponent {
- public routerLinkBlog = ['/' + paths.blog];
+ public routerLinkBlog = ['/' + routes.blog];
}
diff --git a/apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.component.ts b/apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.component.ts
index 25fb5d05a..9d6af906c 100644
--- a/apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.component.ts
+++ b/apps/client/src/app/pages/blog/2023/02/ghostfolio-meets-umbrel/ghostfolio-meets-umbrel-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
@@ -11,5 +11,5 @@ import { RouterModule } from '@angular/router';
templateUrl: './ghostfolio-meets-umbrel-page.html'
})
export class GhostfolioMeetsUmbrelPageComponent {
- public routerLinkBlog = ['/' + paths.blog];
+ public routerLinkBlog = ['/' + routes.blog];
}
diff --git a/apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.component.ts b/apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.component.ts
index 1203eb16b..4e1360622 100644
--- a/apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.component.ts
+++ b/apps/client/src/app/pages/blog/2023/03/1000-stars-on-github/1000-stars-on-github-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
@@ -11,7 +11,7 @@ import { RouterModule } from '@angular/router';
templateUrl: './1000-stars-on-github-page.html'
})
export class ThousandStarsOnGitHubPageComponent {
- public routerLinkBlog = ['/' + paths.blog];
- public routerLinkFeatures = ['/' + paths.features];
- public routerLinkPricing = ['/' + paths.pricing];
+ public routerLinkBlog = ['/' + routes.blog];
+ public routerLinkFeatures = ['/' + routes.features];
+ public routerLinkPricing = ['/' + routes.pricing];
}
diff --git a/apps/client/src/app/pages/blog/2023/05/unlock-your-financial-potential-with-ghostfolio/unlock-your-financial-potential-with-ghostfolio-page.component.ts b/apps/client/src/app/pages/blog/2023/05/unlock-your-financial-potential-with-ghostfolio/unlock-your-financial-potential-with-ghostfolio-page.component.ts
index a33691e92..e97dce009 100644
--- a/apps/client/src/app/pages/blog/2023/05/unlock-your-financial-potential-with-ghostfolio/unlock-your-financial-potential-with-ghostfolio-page.component.ts
+++ b/apps/client/src/app/pages/blog/2023/05/unlock-your-financial-potential-with-ghostfolio/unlock-your-financial-potential-with-ghostfolio-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
@@ -11,7 +11,7 @@ import { RouterModule } from '@angular/router';
templateUrl: './unlock-your-financial-potential-with-ghostfolio-page.html'
})
export class UnlockYourFinancialPotentialWithGhostfolioPageComponent {
- public routerLinkBlog = ['/' + paths.blog];
- public routerLinkFeatures = ['/' + paths.features];
- public routerLinkResources = ['/' + paths.resources];
+ public routerLinkBlog = ['/' + routes.blog];
+ public routerLinkFeatures = ['/' + routes.features];
+ public routerLinkResources = ['/' + routes.resources];
}
diff --git a/apps/client/src/app/pages/blog/2023/07/exploring-the-path-to-fire/exploring-the-path-to-fire-page.component.ts b/apps/client/src/app/pages/blog/2023/07/exploring-the-path-to-fire/exploring-the-path-to-fire-page.component.ts
index 891d835e8..abe3d9383 100644
--- a/apps/client/src/app/pages/blog/2023/07/exploring-the-path-to-fire/exploring-the-path-to-fire-page.component.ts
+++ b/apps/client/src/app/pages/blog/2023/07/exploring-the-path-to-fire/exploring-the-path-to-fire-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
@@ -11,6 +11,6 @@ import { RouterModule } from '@angular/router';
templateUrl: './exploring-the-path-to-fire-page.html'
})
export class ExploringThePathToFirePageComponent {
- public routerLinkBlog = ['/' + paths.blog];
- public routerLinkFeatures = ['/' + paths.features];
+ public routerLinkBlog = ['/' + routes.blog];
+ public routerLinkFeatures = ['/' + routes.features];
}
diff --git a/apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.component.ts b/apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.component.ts
index 8ba2dac49..0811f2df7 100644
--- a/apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.component.ts
+++ b/apps/client/src/app/pages/blog/2023/08/ghostfolio-joins-oss-friends/ghostfolio-joins-oss-friends-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
@@ -11,6 +11,6 @@ import { RouterModule } from '@angular/router';
templateUrl: './ghostfolio-joins-oss-friends-page.html'
})
export class GhostfolioJoinsOssFriendsPageComponent {
- public routerLinkAboutOssFriends = ['/' + paths.about, paths.ossFriends];
- public routerLinkBlog = ['/' + paths.blog];
+ public routerLinkAboutOssFriends = ['/' + routes.about, routes.ossFriends];
+ public routerLinkBlog = ['/' + routes.blog];
}
diff --git a/apps/client/src/app/pages/blog/2023/09/ghostfolio-2/ghostfolio-2-page.component.ts b/apps/client/src/app/pages/blog/2023/09/ghostfolio-2/ghostfolio-2-page.component.ts
index 42e8f8200..4d5581251 100644
--- a/apps/client/src/app/pages/blog/2023/09/ghostfolio-2/ghostfolio-2-page.component.ts
+++ b/apps/client/src/app/pages/blog/2023/09/ghostfolio-2/ghostfolio-2-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
@@ -11,9 +11,9 @@ import { RouterModule } from '@angular/router';
templateUrl: './ghostfolio-2-page.html'
})
export class Ghostfolio2PageComponent {
- public routerLinkAbout = ['/' + paths.about];
- public routerLinkAboutChangelog = ['/' + paths.about, paths.changelog];
- public routerLinkBlog = ['/' + paths.blog];
- public routerLinkFeatures = ['/' + paths.features];
- public routerLinkMarkets = ['/' + paths.markets];
+ public routerLinkAbout = ['/' + routes.about];
+ public routerLinkAboutChangelog = ['/' + routes.about, routes.changelog];
+ public routerLinkBlog = ['/' + routes.blog];
+ public routerLinkFeatures = ['/' + routes.features];
+ public routerLinkMarkets = ['/' + routes.markets];
}
diff --git a/apps/client/src/app/pages/blog/2023/09/hacktoberfest-2023/hacktoberfest-2023-page.component.ts b/apps/client/src/app/pages/blog/2023/09/hacktoberfest-2023/hacktoberfest-2023-page.component.ts
index 3aed72cbe..0525adc93 100644
--- a/apps/client/src/app/pages/blog/2023/09/hacktoberfest-2023/hacktoberfest-2023-page.component.ts
+++ b/apps/client/src/app/pages/blog/2023/09/hacktoberfest-2023/hacktoberfest-2023-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { publicRoutes, routes } from '@ghostfolio/common/routes';
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
@@ -11,7 +11,7 @@ import { RouterModule } from '@angular/router';
templateUrl: './hacktoberfest-2023-page.html'
})
export class Hacktoberfest2023PageComponent {
- public routerLinkAbout = ['/' + paths.about];
- public routerLinkBlog = ['/' + paths.blog];
- public routerLinkOpenStartup = ['/' + paths.openStartup];
+ public routerLinkAbout = ['/' + routes.about];
+ public routerLinkBlog = ['/' + routes.blog];
+ public routerLinkOpenStartup = ['/' + publicRoutes.openStartup.path];
}
diff --git a/apps/client/src/app/pages/blog/2023/11/black-week-2023/black-week-2023-page.component.ts b/apps/client/src/app/pages/blog/2023/11/black-week-2023/black-week-2023-page.component.ts
index 39b713386..a3b02004e 100644
--- a/apps/client/src/app/pages/blog/2023/11/black-week-2023/black-week-2023-page.component.ts
+++ b/apps/client/src/app/pages/blog/2023/11/black-week-2023/black-week-2023-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { Component } from '@angular/core';
@@ -12,7 +12,7 @@ import { RouterModule } from '@angular/router';
templateUrl: './black-week-2023-page.html'
})
export class BlackWeek2023PageComponent {
- public routerLinkBlog = ['/' + paths.blog];
- public routerLinkFeatures = ['/' + paths.features];
- public routerLinkPricing = ['/' + paths.pricing];
+ public routerLinkBlog = ['/' + routes.blog];
+ public routerLinkFeatures = ['/' + routes.features];
+ public routerLinkPricing = ['/' + routes.pricing];
}
diff --git a/apps/client/src/app/pages/blog/2023/11/hacktoberfest-2023-debriefing/hacktoberfest-2023-debriefing-page.component.ts b/apps/client/src/app/pages/blog/2023/11/hacktoberfest-2023-debriefing/hacktoberfest-2023-debriefing-page.component.ts
index e4a628fb6..689581bf1 100644
--- a/apps/client/src/app/pages/blog/2023/11/hacktoberfest-2023-debriefing/hacktoberfest-2023-debriefing-page.component.ts
+++ b/apps/client/src/app/pages/blog/2023/11/hacktoberfest-2023-debriefing/hacktoberfest-2023-debriefing-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
@@ -11,7 +11,7 @@ import { RouterModule } from '@angular/router';
templateUrl: './hacktoberfest-2023-debriefing-page.html'
})
export class Hacktoberfest2023DebriefingPageComponent {
- public routerLinkAbout = ['/' + paths.about];
- public routerLinkBlog = ['/' + paths.blog];
- public routerLinkFeatures = ['/' + paths.features];
+ public routerLinkAbout = ['/' + routes.about];
+ public routerLinkBlog = ['/' + routes.blog];
+ public routerLinkFeatures = ['/' + routes.features];
}
diff --git a/apps/client/src/app/pages/blog/2024/09/hacktoberfest-2024/hacktoberfest-2024-page.component.ts b/apps/client/src/app/pages/blog/2024/09/hacktoberfest-2024/hacktoberfest-2024-page.component.ts
index 8db7f0d63..5a559dd95 100644
--- a/apps/client/src/app/pages/blog/2024/09/hacktoberfest-2024/hacktoberfest-2024-page.component.ts
+++ b/apps/client/src/app/pages/blog/2024/09/hacktoberfest-2024/hacktoberfest-2024-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { publicRoutes, routes } from '@ghostfolio/common/routes';
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
@@ -11,7 +11,7 @@ import { RouterModule } from '@angular/router';
templateUrl: './hacktoberfest-2024-page.html'
})
export class Hacktoberfest2024PageComponent {
- public routerLinkAbout = ['/' + paths.about];
- public routerLinkBlog = ['/' + paths.blog];
- public routerLinkOpenStartup = ['/' + paths.openStartup];
+ public routerLinkAbout = ['/' + routes.about];
+ public routerLinkBlog = ['/' + routes.blog];
+ public routerLinkOpenStartup = ['/' + publicRoutes.openStartup.path];
}
diff --git a/apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts b/apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts
index cacf1077c..b29a82b57 100644
--- a/apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts
+++ b/apps/client/src/app/pages/blog/2024/11/black-weeks-2024/black-weeks-2024-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { Component } from '@angular/core';
@@ -12,7 +12,7 @@ import { RouterModule } from '@angular/router';
templateUrl: './black-weeks-2024-page.html'
})
export class BlackWeeks2024PageComponent {
- public routerLinkBlog = ['/' + paths.blog];
- public routerLinkFeatures = ['/' + paths.features];
- public routerLinkPricing = ['/' + paths.pricing];
+ public routerLinkBlog = ['/' + routes.blog];
+ public routerLinkFeatures = ['/' + routes.features];
+ public routerLinkPricing = ['/' + routes.pricing];
}
diff --git a/apps/client/src/app/pages/faq/faq-page-routing.module.ts b/apps/client/src/app/pages/faq/faq-page-routing.module.ts
index 3ebf1912a..47870958d 100644
--- a/apps/client/src/app/pages/faq/faq-page-routing.module.ts
+++ b/apps/client/src/app/pages/faq/faq-page-routing.module.ts
@@ -1,5 +1,5 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
-import { paths } from '@ghostfolio/common/paths';
+import { routes as ghostfolioRoutes } from '@ghostfolio/common/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
@@ -18,12 +18,12 @@ const routes: Routes = [
)
},
{
- path: paths.saas,
+ path: ghostfolioRoutes.saas,
loadChildren: () =>
import('./saas/saas-page.module').then((m) => m.SaasPageModule)
},
{
- path: paths.selfHosting,
+ path: ghostfolioRoutes.selfHosting,
loadChildren: () =>
import('./self-hosting/self-hosting-page.module').then(
(m) => m.SelfHostingPageModule
diff --git a/apps/client/src/app/pages/faq/faq-page.component.ts b/apps/client/src/app/pages/faq/faq-page.component.ts
index 270719cf3..8bfbdcbcc 100644
--- a/apps/client/src/app/pages/faq/faq-page.component.ts
+++ b/apps/client/src/app/pages/faq/faq-page.component.ts
@@ -1,7 +1,7 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { TabConfiguration } from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
+import { routes } from '@ghostfolio/common/routes';
import { Component, OnDestroy, OnInit } from '@angular/core';
import { DeviceDetectorService } from 'ngx-device-detector';
@@ -36,18 +36,18 @@ export class FaqPageComponent implements OnDestroy, OnInit {
{
iconName: 'reader-outline',
label: $localize`General`,
- path: ['/' + paths.faq]
+ path: ['/' + routes.faq]
},
{
iconName: 'cloudy-outline',
label: $localize`Cloud` + ' (SaaS)',
- path: ['/' + paths.faq, paths.saas],
+ path: ['/' + routes.faq, routes.saas],
showCondition: this.hasPermissionForSubscription
},
{
iconName: 'server-outline',
label: $localize`Self-Hosting`,
- path: ['/' + paths.faq, paths.selfHosting]
+ path: ['/' + routes.faq, routes.selfHosting]
}
];
}
diff --git a/apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts b/apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts
index 4e5ed76b9..a59bb7160 100644
--- a/apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts
+++ b/apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts
@@ -1,6 +1,6 @@
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { User } from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { ChangeDetectorRef, Component, OnDestroy } from '@angular/core';
import { Subject, takeUntil } from 'rxjs';
@@ -13,8 +13,8 @@ import { Subject, takeUntil } from 'rxjs';
standalone: false
})
export class FaqOverviewPageComponent implements OnDestroy {
- public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${paths.pricing}`;
- public routerLinkFeatures = ['/' + paths.features];
+ public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${routes.pricing}`;
+ public routerLinkFeatures = ['/' + routes.features];
public user: User;
private unsubscribeSubject = new Subject();
diff --git a/apps/client/src/app/pages/faq/saas/saas-page.component.ts b/apps/client/src/app/pages/faq/saas/saas-page.component.ts
index b6e6b7002..27c794069 100644
--- a/apps/client/src/app/pages/faq/saas/saas-page.component.ts
+++ b/apps/client/src/app/pages/faq/saas/saas-page.component.ts
@@ -1,6 +1,6 @@
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { User } from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
+import { publicRoutes, routes } from '@ghostfolio/common/routes';
import { ChangeDetectorRef, Component, OnDestroy } from '@angular/core';
import { Subject, takeUntil } from 'rxjs';
@@ -13,11 +13,14 @@ import { Subject, takeUntil } from 'rxjs';
standalone: false
})
export class SaasPageComponent implements OnDestroy {
- public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${paths.pricing}`;
- public routerLinkAccount = ['/' + paths.account];
- public routerLinkAccountMembership = ['/' + paths.account, paths.membership];
- public routerLinkMarkets = ['/' + paths.markets];
- public routerLinkRegister = ['/' + paths.register];
+ public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${routes.pricing}`;
+ public routerLinkAccount = ['/' + routes.account];
+ public routerLinkAccountMembership = [
+ '/' + routes.account,
+ routes.membership
+ ];
+ public routerLinkMarkets = ['/' + routes.markets];
+ public routerLinkRegister = ['/' + publicRoutes.register.path];
public user: User;
private unsubscribeSubject = new Subject();
diff --git a/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts b/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts
index 1b7836755..864db7af3 100644
--- a/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts
+++ b/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Component, OnDestroy } from '@angular/core';
import { Subject } from 'rxjs';
@@ -11,7 +11,7 @@ import { Subject } from 'rxjs';
standalone: false
})
export class SelfHostingPageComponent implements OnDestroy {
- public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${paths.pricing}`;
+ public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${routes.pricing}`;
private unsubscribeSubject = new Subject();
diff --git a/apps/client/src/app/pages/features/features-page.component.ts b/apps/client/src/app/pages/features/features-page.component.ts
index 1057516bd..bb502fdaf 100644
--- a/apps/client/src/app/pages/features/features-page.component.ts
+++ b/apps/client/src/app/pages/features/features-page.component.ts
@@ -1,8 +1,8 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { InfoItem, User } from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
+import { publicRoutes, routes } from '@ghostfolio/common/routes';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { ChangeDetectorRef, Component, OnDestroy } from '@angular/core';
@@ -26,8 +26,8 @@ import { Subject, takeUntil } from 'rxjs';
export class GfFeaturesPageComponent implements OnDestroy {
public hasPermissionForSubscription: boolean;
public info: InfoItem;
- public routerLinkRegister = ['/' + paths.register];
- public routerLinkResources = ['/' + paths.resources];
+ public routerLinkRegister = ['/' + publicRoutes.register.path];
+ public routerLinkResources = ['/' + routes.resources];
public user: User;
private unsubscribeSubject = new Subject();
diff --git a/apps/client/src/app/pages/home/home-page-routing.module.ts b/apps/client/src/app/pages/home/home-page-routing.module.ts
index a28ea864f..7f00ceabe 100644
--- a/apps/client/src/app/pages/home/home-page-routing.module.ts
+++ b/apps/client/src/app/pages/home/home-page-routing.module.ts
@@ -4,7 +4,10 @@ import { HomeOverviewComponent } from '@ghostfolio/client/components/home-overvi
import { HomeSummaryComponent } from '@ghostfolio/client/components/home-summary/home-summary.component';
import { HomeWatchlistComponent } from '@ghostfolio/client/components/home-watchlist/home-watchlist.component';
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
-import { paths } from '@ghostfolio/common/paths';
+import {
+ routes as ghostfolioRoutes,
+ internalRoutes
+} from '@ghostfolio/common/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
@@ -20,28 +23,29 @@ const routes: Routes = [
component: HomeOverviewComponent
},
{
- path: paths.holdings,
+ path: internalRoutes.home.subRoutes.holdings.path,
component: HomeHoldingsComponent,
- title: $localize`Holdings`
+ title: internalRoutes.home.subRoutes.holdings.title
},
{
- path: paths.summary,
+ path: ghostfolioRoutes.summary,
component: HomeSummaryComponent,
title: $localize`Summary`
},
{
- path: paths.market,
+ path: ghostfolioRoutes.market,
component: HomeMarketComponent,
title: $localize`Markets`
},
{
- path: paths.watchlist,
+ path: ghostfolioRoutes.watchlist,
component: HomeWatchlistComponent,
title: $localize`Watchlist`
}
],
component: HomePageComponent,
- path: ''
+ path: '',
+ title: internalRoutes.home.title
}
];
diff --git a/apps/client/src/app/pages/home/home-page.component.ts b/apps/client/src/app/pages/home/home-page.component.ts
index ecb8ff0be..870930b4e 100644
--- a/apps/client/src/app/pages/home/home-page.component.ts
+++ b/apps/client/src/app/pages/home/home-page.component.ts
@@ -1,7 +1,7 @@
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { TabConfiguration, User } from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
+import { internalRoutes, routes } from '@ghostfolio/common/routes';
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
import { DeviceDetectorService } from 'ngx-device-detector';
@@ -36,28 +36,28 @@ export class HomePageComponent implements OnDestroy, OnInit {
this.tabs = [
{
iconName: 'analytics-outline',
- label: $localize`Overview`,
- path: ['/' + paths.home]
+ label: internalRoutes.home.title,
+ path: internalRoutes.home.routerLink
},
{
iconName: 'wallet-outline',
- label: $localize`Holdings`,
- path: ['/' + paths.home, paths.holdings]
+ label: internalRoutes.home.subRoutes.holdings.title,
+ path: internalRoutes.home.subRoutes.holdings.routerLink
},
{
iconName: 'reader-outline',
label: $localize`Summary`,
- path: ['/' + paths.home, paths.summary]
+ path: ['/' + internalRoutes.home.path, routes.summary]
},
{
iconName: 'bookmark-outline',
label: $localize`Watchlist`,
- path: ['/' + paths.home, paths.watchlist]
+ path: ['/' + internalRoutes.home.path, routes.watchlist]
},
{
iconName: 'newspaper-outline',
label: $localize`Markets`,
- path: ['/' + paths.home, paths.market]
+ path: ['/' + internalRoutes.home.path, routes.market]
}
];
diff --git a/apps/client/src/app/pages/landing/landing-page.component.ts b/apps/client/src/app/pages/landing/landing-page.component.ts
index 9777a6c01..84a2e4768 100644
--- a/apps/client/src/app/pages/landing/landing-page.component.ts
+++ b/apps/client/src/app/pages/landing/landing-page.component.ts
@@ -1,7 +1,7 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { Statistics } from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
+import { publicRoutes, routes } from '@ghostfolio/common/routes';
import { Component, OnDestroy, OnInit } from '@angular/core';
import { format } from 'date-fns';
@@ -25,10 +25,10 @@ export class LandingPageComponent implements OnDestroy, OnInit {
public hasPermissionForStatistics: boolean;
public hasPermissionForSubscription: boolean;
public hasPermissionToCreateUser: boolean;
- public routerLinkAbout = ['/' + paths.about];
- public routerLinkDemo = ['/' + paths.demo];
- public routerLinkOpenStartup = ['/' + paths.openStartup];
- public routerLinkRegister = ['/' + paths.register];
+ public routerLinkAbout = ['/' + routes.about];
+ public routerLinkDemo = ['/' + routes.demo];
+ public routerLinkOpenStartup = ['/' + publicRoutes.openStartup.path];
+ public routerLinkRegister = ['/' + publicRoutes.register.path];
public statistics: Statistics;
public testimonials = [
{
diff --git a/apps/client/src/app/pages/open/open-page-routing.module.ts b/apps/client/src/app/pages/open/open-page-routing.module.ts
index b9db4ab10..cd113d361 100644
--- a/apps/client/src/app/pages/open/open-page-routing.module.ts
+++ b/apps/client/src/app/pages/open/open-page-routing.module.ts
@@ -1,4 +1,5 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
+import { publicRoutes } from '@ghostfolio/common/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
@@ -10,7 +11,7 @@ const routes: Routes = [
canActivate: [AuthGuard],
component: OpenPageComponent,
path: '',
- title: 'Open Startup'
+ title: publicRoutes.openStartup.title
}
];
diff --git a/apps/client/src/app/pages/portfolio/activities/activities-page-routing.module.ts b/apps/client/src/app/pages/portfolio/activities/activities-page-routing.module.ts
index 00962d563..38a594c99 100644
--- a/apps/client/src/app/pages/portfolio/activities/activities-page-routing.module.ts
+++ b/apps/client/src/app/pages/portfolio/activities/activities-page-routing.module.ts
@@ -1,4 +1,5 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
+import { internalRoutes } from '@ghostfolio/common/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
@@ -10,7 +11,7 @@ const routes: Routes = [
canActivate: [AuthGuard],
component: ActivitiesPageComponent,
path: '',
- title: $localize`Activities`
+ title: internalRoutes.portfolio.subRoutes.activities.title
}
];
diff --git a/apps/client/src/app/pages/portfolio/portfolio-page-routing.module.ts b/apps/client/src/app/pages/portfolio/portfolio-page-routing.module.ts
index 84499573a..87c1a2785 100644
--- a/apps/client/src/app/pages/portfolio/portfolio-page-routing.module.ts
+++ b/apps/client/src/app/pages/portfolio/portfolio-page-routing.module.ts
@@ -1,5 +1,8 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
-import { paths } from '@ghostfolio/common/paths';
+import {
+ routes as ghostfolioRoutes,
+ internalRoutes
+} from '@ghostfolio/common/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
@@ -18,33 +21,33 @@ const routes: Routes = [
)
},
{
- path: paths.activities,
+ path: internalRoutes.portfolio.subRoutes.activities.path,
loadChildren: () =>
import('./activities/activities-page.module').then(
(m) => m.ActivitiesPageModule
)
},
{
- path: paths.allocations,
+ path: ghostfolioRoutes.allocations,
loadChildren: () =>
import('./allocations/allocations-page.module').then(
(m) => m.AllocationsPageModule
)
},
{
- path: paths.fire,
+ path: ghostfolioRoutes.fire,
loadChildren: () =>
import('./fire/fire-page.module').then((m) => m.FirePageModule)
},
{
- path: paths.xRay,
+ path: ghostfolioRoutes.xRay,
loadChildren: () =>
import('./x-ray/x-ray-page.module').then((m) => m.XRayPageModule)
}
],
component: PortfolioPageComponent,
path: '',
- title: $localize`Portfolio`
+ title: internalRoutes.portfolio.title
}
];
diff --git a/apps/client/src/app/pages/portfolio/portfolio-page.component.ts b/apps/client/src/app/pages/portfolio/portfolio-page.component.ts
index 926ec7a8b..8e0748f64 100644
--- a/apps/client/src/app/pages/portfolio/portfolio-page.component.ts
+++ b/apps/client/src/app/pages/portfolio/portfolio-page.component.ts
@@ -1,6 +1,6 @@
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { TabConfiguration, User } from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
+import { internalRoutes, routes } from '@ghostfolio/common/routes';
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
import { DeviceDetectorService } from 'ngx-device-detector';
@@ -34,27 +34,27 @@ export class PortfolioPageComponent implements OnDestroy, OnInit {
{
iconName: 'analytics-outline',
label: $localize`Analysis`,
- path: ['/' + paths.portfolio]
+ path: internalRoutes.portfolio.routerLink
},
{
iconName: 'swap-vertical-outline',
- label: $localize`Activities`,
- path: ['/' + paths.portfolio, paths.activities]
+ label: internalRoutes.portfolio.subRoutes.activities.title,
+ path: internalRoutes.portfolio.subRoutes.activities.routerLink
},
{
iconName: 'pie-chart-outline',
label: $localize`Allocations`,
- path: ['/' + paths.portfolio, paths.allocations]
+ path: ['/' + internalRoutes.portfolio.path, routes.allocations]
},
{
iconName: 'calculator-outline',
label: 'FIRE ',
- path: ['/' + paths.portfolio, paths.fire]
+ path: ['/' + internalRoutes.portfolio.path, routes.fire]
},
{
iconName: 'scan-outline',
label: 'X-ray',
- path: ['/' + paths.portfolio, paths.xRay]
+ path: ['/' + internalRoutes.portfolio.path, routes.xRay]
}
];
this.user = state.user;
diff --git a/apps/client/src/app/pages/pricing/pricing-page.component.ts b/apps/client/src/app/pages/pricing/pricing-page.component.ts
index 68573dde5..e3cc8ccb2 100644
--- a/apps/client/src/app/pages/pricing/pricing-page.component.ts
+++ b/apps/client/src/app/pages/pricing/pricing-page.component.ts
@@ -2,8 +2,8 @@ import { NotificationService } from '@ghostfolio/client/core/notification/notifi
import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { User } from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
+import { publicRoutes, routes } from '@ghostfolio/common/routes';
import { translate } from '@ghostfolio/ui/i18n';
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
@@ -41,8 +41,8 @@ export class PricingPageComponent implements OnDestroy, OnInit {
public professionalDataProviderTooltipPremium = translate(
'PROFESSIONAL_DATA_PROVIDER_TOOLTIP_PREMIUM'
);
- public routerLinkFeatures = ['/' + paths.features];
- public routerLinkRegister = ['/' + paths.register];
+ public routerLinkFeatures = ['/' + routes.features];
+ public routerLinkRegister = ['/' + publicRoutes.register.path];
public user: User;
private unsubscribeSubject = new Subject();
diff --git a/apps/client/src/app/pages/register/register-page-routing.module.ts b/apps/client/src/app/pages/register/register-page-routing.module.ts
index 80ab69b62..81af9f09f 100644
--- a/apps/client/src/app/pages/register/register-page-routing.module.ts
+++ b/apps/client/src/app/pages/register/register-page-routing.module.ts
@@ -1,4 +1,5 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
+import { publicRoutes } from '@ghostfolio/common/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
@@ -10,7 +11,7 @@ const routes: Routes = [
canActivate: [AuthGuard],
component: RegisterPageComponent,
path: '',
- title: $localize`Registration`
+ title: publicRoutes.register.title
}
];
diff --git a/apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.component.ts b/apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.component.ts
index 5b7de607d..fb35a357d 100644
--- a/apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.component.ts
+++ b/apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.component.ts
@@ -1,5 +1,5 @@
import { DataService } from '@ghostfolio/client/services/data.service';
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import {
ChangeDetectionStrategy,
@@ -31,8 +31,8 @@ export class ShowAccessTokenDialog {
public isDisclaimerChecked = false;
public role: string;
public routerLinkAboutTermsOfService = [
- '/' + paths.about,
- paths.termsOfService
+ '/' + routes.about,
+ routes.termsOfService
];
private unsubscribeSubject = new Subject();
diff --git a/apps/client/src/app/pages/resources/glossary/resources-glossary.component.ts b/apps/client/src/app/pages/resources/glossary/resources-glossary.component.ts
index 2734707d1..f05b353d2 100644
--- a/apps/client/src/app/pages/resources/glossary/resources-glossary.component.ts
+++ b/apps/client/src/app/pages/resources/glossary/resources-glossary.component.ts
@@ -1,7 +1,7 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { InfoItem } from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
+import { routes } from '@ghostfolio/common/routes';
import { Component, OnInit } from '@angular/core';
@@ -15,8 +15,8 @@ export class ResourcesGlossaryPageComponent implements OnInit {
public hasPermissionForSubscription: boolean;
public info: InfoItem;
public routerLinkResourcesPersonalFinanceTools = [
- '/' + paths.resources,
- paths.personalFinanceTools
+ '/' + routes.resources,
+ routes.personalFinanceTools
];
public constructor(private dataService: DataService) {
diff --git a/apps/client/src/app/pages/resources/overview/resources-overview.component.ts b/apps/client/src/app/pages/resources/overview/resources-overview.component.ts
index cca9aa9bf..6cf136ed9 100644
--- a/apps/client/src/app/pages/resources/overview/resources-overview.component.ts
+++ b/apps/client/src/app/pages/resources/overview/resources-overview.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Component } from '@angular/core';
@@ -14,25 +14,25 @@ export class ResourcesOverviewComponent {
title: 'Frequently Asked Questions (FAQ)',
description:
'Find quick answers to commonly asked questions about Ghostfolio in our Frequently Asked Questions (FAQ) section.',
- link: ['/' + paths.faq]
+ link: ['/' + routes.faq]
},
{
title: 'Guides',
description:
'Explore our guides to help you get started with investing and managing your finances.',
- link: ['/' + paths.resources, paths.guides]
+ link: ['/' + routes.resources, routes.guides]
},
{
title: 'Markets',
description:
'Access various market resources and tools to stay informed about financial markets.',
- link: ['/' + paths.resources, paths.markets]
+ link: ['/' + routes.resources, routes.markets]
},
{
title: 'Glossary',
description:
'Learn key financial terms and concepts in our comprehensive glossary.',
- link: ['/' + paths.resources, paths.glossary]
+ link: ['/' + routes.resources, routes.glossary]
}
];
}
diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts
index 2b5146d89..921b7340d 100644
--- a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts
+++ b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts
@@ -1,6 +1,6 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
-import { paths } from '@ghostfolio/common/paths';
import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools';
+import { routes as ghostfolioRoutes } from '@ghostfolio/common/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
@@ -24,7 +24,7 @@ const routes: Routes = [
return GfProductPageComponent;
}
),
- path: `${paths.openSourceAlternativeTo}-${alias ?? key}`,
+ path: `${ghostfolioRoutes.openSourceAlternativeTo}-${alias ?? key}`,
title: $localize`Open Source Alternative to ${name}`
};
})
diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts
index f2b6a6541..e6394098c 100644
--- a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts
+++ b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts
@@ -1,5 +1,5 @@
-import { paths } from '@ghostfolio/common/paths';
import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools';
+import { routes } from '@ghostfolio/common/routes';
import { Component, OnDestroy } from '@angular/core';
import { Subject } from 'rxjs';
@@ -12,12 +12,12 @@ import { Subject } from 'rxjs';
standalone: false
})
export class PersonalFinanceToolsPageComponent implements OnDestroy {
- public pathAlternativeTo = paths.openSourceAlternativeTo + '-';
- public pathResources = '/' + paths.resources;
+ public pathAlternativeTo = routes.openSourceAlternativeTo + '-';
+ public pathResources = '/' + routes.resources;
public personalFinanceTools = personalFinanceTools.sort((a, b) => {
return a.name.localeCompare(b.name, undefined, { sensitivity: 'base' });
});
- public routerLinkAbout = ['/' + paths.about];
+ public routerLinkAbout = ['/' + routes.about];
private unsubscribeSubject = new Subject();
diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
index 6c3e8b551..9024acc7e 100644
--- a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
+++ b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
@@ -1,7 +1,7 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { Product } from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools';
+import { routes } from '@ghostfolio/common/routes';
import { translate } from '@ghostfolio/ui/i18n';
import { Component, OnInit } from '@angular/core';
@@ -20,11 +20,11 @@ export class GfProductPageComponent implements OnInit {
public price: number;
public product1: Product;
public product2: Product;
- public routerLinkAbout = ['/' + paths.about];
- public routerLinkFeatures = ['/' + paths.features];
+ public routerLinkAbout = ['/' + routes.about];
+ public routerLinkFeatures = ['/' + routes.features];
public routerLinkResourcesPersonalFinanceTools = [
- '/' + paths.resources,
- paths.personalFinanceTools
+ '/' + routes.resources,
+ routes.personalFinanceTools
];
public tags: string[];
diff --git a/apps/client/src/app/pages/resources/resources-page-routing.module.ts b/apps/client/src/app/pages/resources/resources-page-routing.module.ts
index b7c1734be..fe226a896 100644
--- a/apps/client/src/app/pages/resources/resources-page-routing.module.ts
+++ b/apps/client/src/app/pages/resources/resources-page-routing.module.ts
@@ -1,5 +1,5 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
-import { paths } from '@ghostfolio/common/paths';
+import { routes as ghostfolioRoutes } from '@ghostfolio/common/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
@@ -19,27 +19,27 @@ const routes: Routes = [
)
},
{
- path: paths.glossary,
+ path: ghostfolioRoutes.glossary,
loadChildren: () =>
import('./glossary/resources-glossary.module').then(
(m) => m.ResourcesGlossaryPageModule
)
},
{
- path: paths.guides,
+ path: ghostfolioRoutes.guides,
loadChildren: () =>
import('./guides/resources-guides.module').then(
(m) => m.ResourcesGuidesModule
)
},
{
- path: paths.markets,
+ path: ghostfolioRoutes.markets,
loadChildren: () =>
import('./markets/resources-markets.module').then(
(m) => m.ResourcesMarketsModule
)
},
- ...[paths.personalFinanceTools].map((path) => ({
+ ...[ghostfolioRoutes.personalFinanceTools].map((path) => ({
path,
loadChildren: () =>
import(
diff --git a/apps/client/src/app/pages/resources/resources-page.component.ts b/apps/client/src/app/pages/resources/resources-page.component.ts
index ba38fac18..907779ed8 100644
--- a/apps/client/src/app/pages/resources/resources-page.component.ts
+++ b/apps/client/src/app/pages/resources/resources-page.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { Component, OnInit } from '@angular/core';
import { DeviceDetectorService } from 'ngx-device-detector';
@@ -20,17 +20,17 @@ export class ResourcesPageComponent implements OnInit {
iconName: 'reader-outline'
},
{
- path: paths.guides,
+ path: routes.guides,
label: $localize`Guides`,
iconName: 'book-outline'
},
{
- path: paths.markets,
+ path: routes.markets,
label: $localize`Markets`,
iconName: 'newspaper-outline'
},
{
- path: paths.glossary,
+ path: routes.glossary,
label: $localize`Glossary`,
iconName: 'library-outline'
}
diff --git a/apps/client/src/app/pages/user-account/user-account-page-routing.module.ts b/apps/client/src/app/pages/user-account/user-account-page-routing.module.ts
index 003d0df75..9701c20a2 100644
--- a/apps/client/src/app/pages/user-account/user-account-page-routing.module.ts
+++ b/apps/client/src/app/pages/user-account/user-account-page-routing.module.ts
@@ -2,7 +2,7 @@ import { UserAccountAccessComponent } from '@ghostfolio/client/components/user-a
import { UserAccountMembershipComponent } from '@ghostfolio/client/components/user-account-membership/user-account-membership.component';
import { UserAccountSettingsComponent } from '@ghostfolio/client/components/user-account-settings/user-account-settings.component';
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
-import { paths } from '@ghostfolio/common/paths';
+import { routes as ghostfolioRoutes } from '@ghostfolio/common/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
@@ -19,12 +19,12 @@ const routes: Routes = [
title: $localize`Settings`
},
{
- path: paths.membership,
+ path: ghostfolioRoutes.membership,
component: UserAccountMembershipComponent,
title: $localize`Membership`
},
{
- path: paths.access,
+ path: ghostfolioRoutes.access,
component: UserAccountAccessComponent,
title: $localize`Access`
}
diff --git a/apps/client/src/app/pages/user-account/user-account-page.component.ts b/apps/client/src/app/pages/user-account/user-account-page.component.ts
index c18598910..da53c1fd6 100644
--- a/apps/client/src/app/pages/user-account/user-account-page.component.ts
+++ b/apps/client/src/app/pages/user-account/user-account-page.component.ts
@@ -1,6 +1,6 @@
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { TabConfiguration, User } from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
import { DeviceDetectorService } from 'ngx-device-detector';
@@ -35,18 +35,18 @@ export class UserAccountPageComponent implements OnDestroy, OnInit {
{
iconName: 'settings-outline',
label: $localize`Settings`,
- path: ['/' + paths.account]
+ path: ['/' + routes.account]
},
{
iconName: 'diamond-outline',
label: $localize`Membership`,
- path: ['/' + paths.account, paths.membership],
+ path: ['/' + routes.account, routes.membership],
showCondition: !!this.user?.subscription
},
{
iconName: 'key-outline',
label: $localize`Access`,
- path: ['/' + paths.account, paths.access]
+ path: ['/' + routes.account, routes.access]
}
];
diff --git a/apps/client/src/app/pages/zen/zen-page-routing.module.ts b/apps/client/src/app/pages/zen/zen-page-routing.module.ts
index 819f39f7e..8ca947957 100644
--- a/apps/client/src/app/pages/zen/zen-page-routing.module.ts
+++ b/apps/client/src/app/pages/zen/zen-page-routing.module.ts
@@ -1,7 +1,7 @@
import { HomeHoldingsComponent } from '@ghostfolio/client/components/home-holdings/home-holdings.component';
import { HomeOverviewComponent } from '@ghostfolio/client/components/home-overview/home-overview.component';
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
-import { paths } from '@ghostfolio/common/paths';
+import { internalRoutes } from '@ghostfolio/common/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
@@ -12,12 +12,19 @@ const routes: Routes = [
{
canActivate: [AuthGuard],
children: [
- { path: '', component: HomeOverviewComponent },
- { path: paths.holdings, component: HomeHoldingsComponent }
+ {
+ path: '',
+ component: HomeOverviewComponent
+ },
+ {
+ path: internalRoutes.zen.subRoutes.holdings.path,
+ component: HomeHoldingsComponent,
+ title: internalRoutes.home.subRoutes.holdings.title
+ }
],
component: ZenPageComponent,
path: '',
- title: $localize`Overview`
+ title: internalRoutes.zen.title
}
];
diff --git a/apps/client/src/app/pages/zen/zen-page.component.ts b/apps/client/src/app/pages/zen/zen-page.component.ts
index cad969bd5..ae15c1532 100644
--- a/apps/client/src/app/pages/zen/zen-page.component.ts
+++ b/apps/client/src/app/pages/zen/zen-page.component.ts
@@ -1,6 +1,6 @@
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { TabConfiguration, User } from '@ghostfolio/common/interfaces';
-import { paths } from '@ghostfolio/common/paths';
+import { internalRoutes } from '@ghostfolio/common/routes';
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
import { DeviceDetectorService } from 'ngx-device-detector';
@@ -33,13 +33,13 @@ export class ZenPageComponent implements OnDestroy, OnInit {
this.tabs = [
{
iconName: 'analytics-outline',
- label: $localize`Overview`,
- path: ['/' + paths.zen]
+ label: internalRoutes.zen.title,
+ path: internalRoutes.zen.routerLink
},
{
iconName: 'wallet-outline',
- label: $localize`Holdings`,
- path: ['/' + paths.zen, paths.holdings]
+ label: internalRoutes.zen.subRoutes.holdings.title,
+ path: internalRoutes.zen.subRoutes.holdings.routerLink
}
];
this.user = state.user;
diff --git a/libs/common/src/lib/paths.ts b/libs/common/src/lib/routes.ts
similarity index 52%
rename from libs/common/src/lib/paths.ts
rename to libs/common/src/lib/routes.ts
index c63457afc..bf4b40fee 100644
--- a/libs/common/src/lib/paths.ts
+++ b/libs/common/src/lib/routes.ts
@@ -1,26 +1,20 @@
import '@angular/localize/init';
-export const paths = {
+export const routes = {
access: 'access',
account: 'account',
- accounts: 'accounts',
- activities: 'activities',
adminControl: 'admin',
allocations: 'allocations',
api: 'api',
auth: 'auth',
- blog: 'blog',
demo: 'demo',
fire: 'fire',
- holdings: 'holdings',
- home: 'home',
i18n: 'i18n',
jobs: 'jobs',
market: 'market',
marketData: 'market-data',
membership: 'membership',
personalFinanceTools: 'personal-finance-tools',
- portfolio: 'portfolio',
public: 'p',
saas: 'saas',
settings: 'settings',
@@ -30,10 +24,10 @@ export const paths = {
watchlist: 'watchlist',
webauthn: 'webauthn',
xRay: 'x-ray',
- zen: 'zen',
// Publicly accessible pages
about: $localize`:kebab-case:about`,
+ blog: 'blog',
changelog: $localize`:kebab-case:changelog`,
faq: $localize`:kebab-case:faq`,
features: $localize`:kebab-case:features`,
@@ -42,12 +36,67 @@ export const paths = {
license: $localize`:kebab-case:license`,
markets: $localize`:kebab-case:markets`,
openSourceAlternativeTo: $localize`:kebab-case:open-source-alternative-to`,
- openStartup: 'open',
ossFriends: 'oss-friends',
pricing: $localize`:kebab-case:pricing`,
privacyPolicy: $localize`:kebab-case:privacy-policy`,
- register: $localize`:kebab-case:register`,
resources: $localize`:kebab-case:resources`,
selfHosting: $localize`:kebab-case:self-hosting`,
termsOfService: $localize`:kebab-case:terms-of-service`
};
+
+export const internalRoutes = {
+ accounts: {
+ path: 'accounts',
+ routerLink: ['/accounts'],
+ title: $localize`Accounts`
+ },
+ home: {
+ excludeFromAssistant: true,
+ path: 'home',
+ routerLink: ['/home'],
+ subRoutes: {
+ holdings: {
+ path: 'holdings',
+ routerLink: ['/home', 'holdings'],
+ title: $localize`Holdings`
+ }
+ },
+ title: $localize`Overview`
+ },
+ portfolio: {
+ path: 'portfolio',
+ routerLink: ['/portfolio'],
+ subRoutes: {
+ activities: {
+ path: 'activities',
+ routerLink: ['/portfolio', 'activities'],
+ title: $localize`Activities`
+ }
+ },
+ title: $localize`Portfolio`
+ },
+ zen: {
+ excludeFromAssistant: true,
+ path: 'zen',
+ routerLink: ['/zen'],
+ subRoutes: {
+ holdings: {
+ path: 'holdings',
+ routerLink: ['/zen', 'holdings'],
+ title: $localize`Holdings`
+ }
+ },
+ title: $localize`Overview`
+ }
+};
+
+export const publicRoutes = {
+ openStartup: {
+ path: 'open',
+ title: 'Open Startup'
+ },
+ register: {
+ path: $localize`:kebab-case:register`,
+ title: $localize`Registration`
+ }
+};
diff --git a/libs/ui/src/lib/membership-card/membership-card.component.ts b/libs/ui/src/lib/membership-card/membership-card.component.ts
index fd2986e18..1264a7a94 100644
--- a/libs/ui/src/lib/membership-card/membership-card.component.ts
+++ b/libs/ui/src/lib/membership-card/membership-card.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { CommonModule } from '@angular/common';
import {
@@ -29,7 +29,7 @@ export class GfMembershipCardComponent {
@Output() generateApiKeyClicked = new EventEmitter();
- public routerLinkPricing = ['/' + paths.pricing];
+ public routerLinkPricing = ['/' + routes.pricing];
public onGenerateApiKey(event: MouseEvent) {
event.preventDefault();
diff --git a/libs/ui/src/lib/no-transactions-info/no-transactions-info.component.ts b/libs/ui/src/lib/no-transactions-info/no-transactions-info.component.ts
index 286aeb322..f948edcca 100644
--- a/libs/ui/src/lib/no-transactions-info/no-transactions-info.component.ts
+++ b/libs/ui/src/lib/no-transactions-info/no-transactions-info.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { internalRoutes } from '@ghostfolio/common/routes';
import {
CUSTOM_ELEMENTS_SCHEMA,
@@ -23,8 +23,6 @@ import { GfLogoComponent } from '../logo';
export class GfNoTransactionsInfoComponent {
@HostBinding('class.has-border') @Input() hasBorder = true;
- public routerLinkPortfolioActivities = [
- '/' + paths.portfolio,
- paths.activities
- ];
+ public routerLinkPortfolioActivities =
+ internalRoutes.portfolio.subRoutes.activities.routerLink;
}
diff --git a/libs/ui/src/lib/premium-indicator/premium-indicator.component.ts b/libs/ui/src/lib/premium-indicator/premium-indicator.component.ts
index 90198fed6..56ce7cf58 100644
--- a/libs/ui/src/lib/premium-indicator/premium-indicator.component.ts
+++ b/libs/ui/src/lib/premium-indicator/premium-indicator.component.ts
@@ -1,4 +1,4 @@
-import { paths } from '@ghostfolio/common/paths';
+import { routes } from '@ghostfolio/common/routes';
import { CommonModule } from '@angular/common';
import {
@@ -20,5 +20,5 @@ import { RouterModule } from '@angular/router';
export class GfPremiumIndicatorComponent {
@Input() enableLink = true;
- public routerLinkPricing = ['/' + paths.pricing];
+ public routerLinkPricing = ['/' + routes.pricing];
}