From 9e409c03b47ff9fcce0b666c3123ee4ea8cd4a78 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 8 Jun 2025 11:38:55 +0200 Subject: [PATCH] Introduce internalRoutes and publicRoutes --- apps/client/src/app/app-routing.module.ts | 10 +++++++--- apps/client/src/app/app.component.ts | 4 ++-- .../app/components/header/header.component.ts | 10 +++++++--- .../home-overview/home-overview.component.ts | 4 ++-- apps/client/src/app/core/auth.guard.ts | 6 +++--- .../accounts/accounts-page-routing.module.ts | 3 ++- .../app/pages/faq/saas/saas-page.component.ts | 4 ++-- .../pages/features/features-page.component.ts | 4 ++-- .../pages/landing/landing-page.component.ts | 4 ++-- .../pages/pricing/pricing-page.component.ts | 4 ++-- .../register/register-page-routing.module.ts | 3 ++- libs/common/src/lib/routes.ts | 20 ++++++++++++++++--- 12 files changed, 50 insertions(+), 26 deletions(-) diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts index 6d90b8134..357a7d10b 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 { routes as ghostfolioRoutes } from '@ghostfolio/common/routes'; +import { + publicRoutes, + routes as ghostfolioRoutes, + internalRoutes +} from '@ghostfolio/common/routes'; import { NgModule } from '@angular/core'; import { RouterModule, Routes, TitleStrategy } from '@angular/router'; @@ -21,7 +25,7 @@ const routes: Routes = [ ) }, { - path: ghostfolioRoutes.accounts, + path: internalRoutes.accounts.path, loadChildren: () => import('./pages/accounts/accounts-page.module').then( (m) => m.AccountsPageModule @@ -121,7 +125,7 @@ const routes: Routes = [ ) }, { - path: ghostfolioRoutes.register, + path: publicRoutes.register.path, loadChildren: () => import('./pages/register/register-page.module').then( (m) => m.RegisterPageModule diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts index 2dd2b4455..ca65e2340 100644 --- a/apps/client/src/app/app.component.ts +++ b/apps/client/src/app/app.component.ts @@ -3,7 +3,7 @@ import { HoldingDetailDialogParams } from '@ghostfolio/client/components/holding import { getCssVariable } from '@ghostfolio/common/helper'; import { InfoItem, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; -import { routes } from '@ghostfolio/common/routes'; +import { publicRoutes, routes } from '@ghostfolio/common/routes'; import { ColorScheme } from '@ghostfolio/common/types'; import { DOCUMENT } from '@angular/common'; @@ -80,7 +80,7 @@ export class AppComponent implements OnDestroy, OnInit { public routerLinkMarkets = ['/' + routes.markets]; public routerLinkOpenStartup = ['/' + routes.openStartup]; public routerLinkPricing = ['/' + routes.pricing]; - public routerLinkRegister = ['/' + routes.register]; + public routerLinkRegister = ['/' + publicRoutes.register.path]; public routerLinkResources = ['/' + routes.resources]; public showFooter = false; public user: User; diff --git a/apps/client/src/app/components/header/header.component.ts b/apps/client/src/app/components/header/header.component.ts index c72a15f34..ea861fbe4 100644 --- a/apps/client/src/app/components/header/header.component.ts +++ b/apps/client/src/app/components/header/header.component.ts @@ -12,7 +12,11 @@ import { TokenStorageService } from '@ghostfolio/client/services/token-storage.s import { UserService } from '@ghostfolio/client/services/user/user.service'; import { Filter, InfoItem, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; -import { routes } from '@ghostfolio/common/routes'; +import { + internalRoutes, + publicRoutes, + routes +} from '@ghostfolio/common/routes'; import { DateRange } from '@ghostfolio/common/types'; import { GfAssistantComponent } from '@ghostfolio/ui/assistant/assistant.component'; @@ -88,13 +92,13 @@ export class HeaderComponent implements OnChanges { public routes = routes; public routerLinkAbout = ['/' + routes.about]; public routerLinkAccount = ['/' + routes.account]; - public routerLinkAccounts = ['/' + routes.accounts]; + public routerLinkAccounts = ['/' + internalRoutes.accounts.path]; public routerLinkAdminControl = ['/' + routes.adminControl]; public routerLinkFeatures = ['/' + routes.features]; public routerLinkMarkets = ['/' + routes.markets]; public routerLinkPortfolio = ['/' + routes.portfolio]; public routerLinkPricing = ['/' + routes.pricing]; - public routerLinkRegister = ['/' + routes.register]; + public routerLinkRegister = ['/' + publicRoutes.register.path]; public routerLinkResources = ['/' + routes.resources]; private unsubscribeSubject = new Subject(); 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 28c6866f2..518784da3 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 @@ -11,7 +11,7 @@ import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; -import { routes } from '@ghostfolio/common/routes'; +import { internalRoutes, routes } from '@ghostfolio/common/routes'; import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; import { DeviceDetectorService } from 'ngx-device-detector'; @@ -37,7 +37,7 @@ export class HomeOverviewComponent implements OnDestroy, OnInit { public isLoadingPerformance = true; public performance: PortfolioPerformance; public precision = 2; - public routerLinkAccounts = ['/' + routes.accounts]; + public routerLinkAccounts = ['/' + internalRoutes.accounts.path]; public routerLinkPortfolio = ['/' + routes.portfolio]; public routerLinkPortfolioActivities = [ '/' + routes.portfolio, diff --git a/apps/client/src/app/core/auth.guard.ts b/apps/client/src/app/core/auth.guard.ts index 127217ced..58a77b71f 100644 --- a/apps/client/src/app/core/auth.guard.ts +++ b/apps/client/src/app/core/auth.guard.ts @@ -1,7 +1,7 @@ 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 { routes } from '@ghostfolio/common/routes'; +import { publicRoutes, routes } from '@ghostfolio/common/routes'; import { Injectable } from '@angular/core'; import { @@ -24,7 +24,7 @@ export class AuthGuard { `/${routes.openStartup}`, `/${routes.pricing}`, `/${routes.public}`, - `/${routes.register}`, + `/${publicRoutes.register.path}`, `/${routes.resources}` ]; @@ -51,7 +51,7 @@ export class AuthGuard { this.router.navigate(['/' + routes.demo]); resolve(false); } else if (utmSource === 'trusted-web-activity') { - this.router.navigate(['/' + routes.register]); + this.router.navigate(['/' + publicRoutes.register.path]); resolve(false); } else if ( AuthGuard.PUBLIC_PAGE_ROUTES.some((publicPageRoute) => { 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/faq/saas/saas-page.component.ts b/apps/client/src/app/pages/faq/saas/saas-page.component.ts index b724c3fa6..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 { routes } from '@ghostfolio/common/routes'; +import { publicRoutes, routes } from '@ghostfolio/common/routes'; import { ChangeDetectorRef, Component, OnDestroy } from '@angular/core'; import { Subject, takeUntil } from 'rxjs'; @@ -20,7 +20,7 @@ export class SaasPageComponent implements OnDestroy { routes.membership ]; public routerLinkMarkets = ['/' + routes.markets]; - public routerLinkRegister = ['/' + routes.register]; + public routerLinkRegister = ['/' + publicRoutes.register.path]; public user: User; 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 01b424487..bb502fdaf 100644 --- a/apps/client/src/app/pages/features/features-page.component.ts +++ b/apps/client/src/app/pages/features/features-page.component.ts @@ -2,7 +2,7 @@ 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 { hasPermission, permissions } from '@ghostfolio/common/permissions'; -import { routes } from '@ghostfolio/common/routes'; +import { publicRoutes, routes } from '@ghostfolio/common/routes'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { ChangeDetectorRef, Component, OnDestroy } from '@angular/core'; @@ -26,7 +26,7 @@ import { Subject, takeUntil } from 'rxjs'; export class GfFeaturesPageComponent implements OnDestroy { public hasPermissionForSubscription: boolean; public info: InfoItem; - public routerLinkRegister = ['/' + routes.register]; + public routerLinkRegister = ['/' + publicRoutes.register.path]; public routerLinkResources = ['/' + routes.resources]; public user: User; 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 509c805ed..2704c8797 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 { hasPermission, permissions } from '@ghostfolio/common/permissions'; -import { routes } from '@ghostfolio/common/routes'; +import { publicRoutes, routes } from '@ghostfolio/common/routes'; import { Component, OnDestroy, OnInit } from '@angular/core'; import { format } from 'date-fns'; @@ -28,7 +28,7 @@ export class LandingPageComponent implements OnDestroy, OnInit { public routerLinkAbout = ['/' + routes.about]; public routerLinkDemo = ['/' + routes.demo]; public routerLinkOpenStartup = ['/' + routes.openStartup]; - public routerLinkRegister = ['/' + routes.register]; + public routerLinkRegister = ['/' + publicRoutes.register.path]; public statistics: Statistics; public testimonials = [ { 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 ae5ce39b3..e3cc8ccb2 100644 --- a/apps/client/src/app/pages/pricing/pricing-page.component.ts +++ b/apps/client/src/app/pages/pricing/pricing-page.component.ts @@ -3,7 +3,7 @@ import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; -import { routes } from '@ghostfolio/common/routes'; +import { publicRoutes, routes } from '@ghostfolio/common/routes'; import { translate } from '@ghostfolio/ui/i18n'; import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; @@ -42,7 +42,7 @@ export class PricingPageComponent implements OnDestroy, OnInit { 'PROFESSIONAL_DATA_PROVIDER_TOOLTIP_PREMIUM' ); public routerLinkFeatures = ['/' + routes.features]; - public routerLinkRegister = ['/' + routes.register]; + 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/libs/common/src/lib/routes.ts b/libs/common/src/lib/routes.ts index 36cdb90ef..75b4c33a7 100644 --- a/libs/common/src/lib/routes.ts +++ b/libs/common/src/lib/routes.ts @@ -3,13 +3,11 @@ import '@angular/localize/init'; 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', @@ -34,6 +32,7 @@ export const routes = { // 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`, @@ -46,8 +45,23 @@ export const routes = { 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', + subRoutes: {}, + title: $localize`Accounts` + } +}; + +export const publicRoutes = { + register: { + path: $localize`:kebab-case:register`, + subRoutes: {}, + title: $localize`Registration` + } +};