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]; }