diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts index 27eedb5c5..46ad162ea 100644 --- a/apps/client/src/app/app-routing.module.ts +++ b/apps/client/src/app/app-routing.module.ts @@ -13,7 +13,7 @@ import { ModulePreloadService } from './core/module-preload.service'; const routes: Routes = [ { - path: ghostfolioRoutes.about, + path: publicRoutes.about.path, loadChildren: () => import('./pages/about/about-page.module').then((m) => m.AboutPageModule) }, @@ -132,7 +132,7 @@ const routes: Routes = [ ) }, { - path: ghostfolioRoutes.resources, + path: publicRoutes.resources.path, loadChildren: () => import('./pages/resources/resources-page.module').then( (m) => m.ResourcesPageModule diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts index 65ec9fd7f..7d2c51af9 100644 --- a/apps/client/src/app/app.component.ts +++ b/apps/client/src/app/app.component.ts @@ -83,7 +83,7 @@ export class AppComponent implements OnDestroy, OnInit { public routerLinkOpenStartup = publicRoutes.openStartup.routerLink; public routerLinkPricing = publicRoutes.pricing.routerLink; public routerLinkRegister = publicRoutes.register.routerLink; - public routerLinkResources = ['/' + routes.resources]; + public routerLinkResources = publicRoutes.resources.routerLink; public showFooter = false; public user: User; @@ -198,9 +198,9 @@ export class AppComponent implements OnDestroy, OnInit { } this.hasTabs = - (this.currentRoute === routes.about || + (this.currentRoute === publicRoutes.about.path || this.currentRoute === publicRoutes.faq.path || - this.currentRoute === routes.resources || + this.currentRoute === publicRoutes.resources.path || this.currentRoute === internalRoutes.account.path || this.currentRoute === routes.adminControl || this.currentRoute === internalRoutes.home.path || diff --git a/apps/client/src/app/components/header/header.component.ts b/apps/client/src/app/components/header/header.component.ts index ccba9f1e9..a79ec6786 100644 --- a/apps/client/src/app/components/header/header.component.ts +++ b/apps/client/src/app/components/header/header.component.ts @@ -85,11 +85,11 @@ export class HeaderComponent implements OnChanges { public impersonationId: string; public internalRoutes = internalRoutes; public isMenuOpen: boolean; - public routeAbout = routes.about; + public routeAbout = publicRoutes.about.path; public routeFeatures = publicRoutes.features.path; public routeMarkets = publicRoutes.markets.path; public routePricing = publicRoutes.pricing.path; - public routeResources = routes.resources; + public routeResources = publicRoutes.resources.path; public routerLinkAbout = publicRoutes.about.routerLink; public routerLinkAccount = internalRoutes.account.routerLink; public routerLinkAccounts = internalRoutes.accounts.routerLink; @@ -99,7 +99,7 @@ export class HeaderComponent implements OnChanges { public routerLinkPortfolio = internalRoutes.portfolio.routerLink; public routerLinkPricing = publicRoutes.pricing.routerLink; public routerLinkRegister = publicRoutes.register.routerLink; - public routerLinkResources = ['/' + routes.resources]; + public routerLinkResources = publicRoutes.resources.routerLink; public routes = routes; private unsubscribeSubject = new Subject(); diff --git a/apps/client/src/app/core/auth.guard.ts b/apps/client/src/app/core/auth.guard.ts index 728e2f234..4ddc0d229 100644 --- a/apps/client/src/app/core/auth.guard.ts +++ b/apps/client/src/app/core/auth.guard.ts @@ -19,7 +19,7 @@ import { catchError } from 'rxjs/operators'; @Injectable({ providedIn: 'root' }) export class AuthGuard { private static PUBLIC_PAGE_ROUTES = [ - `/${routes.about}`, + `/${publicRoutes.about.path}`, `/${publicRoutes.blog.path}`, `/${routes.demo}`, `/${publicRoutes.faq.path}`, @@ -29,7 +29,7 @@ export class AuthGuard { `/${publicRoutes.pricing.path}`, `/${routes.public}`, `/${publicRoutes.register.path}`, - `/${routes.resources}` + `/${publicRoutes.resources.path}` ]; public constructor( 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 9dbbf08e5..597c8d998 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 { publicRoutes, routes } from '@ghostfolio/common/routes/routes'; +import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { Component } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; @@ -13,5 +13,5 @@ import { RouterModule } from '@angular/router'; export class HalloGhostfolioPageComponent { public routerLinkBlog = publicRoutes.blog.routerLink; public routerLinkPricing = publicRoutes.pricing.routerLink; - public routerLinkResources = ['/' + routes.resources]; + public routerLinkResources = publicRoutes.resources.routerLink; } 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 368b73740..dd29cfd80 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 { publicRoutes, routes } from '@ghostfolio/common/routes/routes'; +import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { Component } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; @@ -13,5 +13,5 @@ import { RouterModule } from '@angular/router'; export class HelloGhostfolioPageComponent { public routerLinkBlog = publicRoutes.blog.routerLink; public routerLinkPricing = publicRoutes.pricing.routerLink; - public routerLinkResources = ['/' + routes.resources]; + public routerLinkResources = publicRoutes.resources.routerLink; } 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 9c960edce..812151600 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 { publicRoutes, routes } from '@ghostfolio/common/routes/routes'; +import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { Component } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; @@ -12,5 +12,5 @@ import { RouterModule } from '@angular/router'; }) export class HowDoIGetMyFinancesInOrderPageComponent { public routerLinkBlog = publicRoutes.blog.routerLink; - public routerLinkResources = ['/' + routes.resources]; + public routerLinkResources = publicRoutes.resources.routerLink; } 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 dfb223496..5781674a6 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 { publicRoutes, routes } from '@ghostfolio/common/routes/routes'; +import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { Component } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; @@ -13,5 +13,5 @@ import { RouterModule } from '@angular/router'; export class UnlockYourFinancialPotentialWithGhostfolioPageComponent { public routerLinkBlog = publicRoutes.blog.routerLink; public routerLinkFeatures = publicRoutes.features.routerLink; - public routerLinkResources = ['/' + routes.resources]; + public routerLinkResources = publicRoutes.resources.routerLink; } 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 ad1e1ce5a..197bc3e6b 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 { publicRoutes, routes } from '@ghostfolio/common/routes/routes'; +import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { Component } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; 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 7d4ff2675..dc9d30f07 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 { publicRoutes, routes } from '@ghostfolio/common/routes/routes'; +import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { ChangeDetectorRef, Component, OnDestroy } from '@angular/core'; @@ -27,7 +27,7 @@ export class GfFeaturesPageComponent implements OnDestroy { public hasPermissionForSubscription: boolean; public info: InfoItem; public routerLinkRegister = publicRoutes.register.routerLink; - public routerLinkResources = ['/' + routes.resources]; + public routerLinkResources = publicRoutes.resources.routerLink; public user: User; private unsubscribeSubject = new Subject(); diff --git a/apps/client/src/app/pages/resources/glossary/resources-glossary-routing.module.ts b/apps/client/src/app/pages/resources/glossary/resources-glossary-routing.module.ts index 0ca4ecd4f..c65afcfbb 100644 --- a/apps/client/src/app/pages/resources/glossary/resources-glossary-routing.module.ts +++ b/apps/client/src/app/pages/resources/glossary/resources-glossary-routing.module.ts @@ -1,3 +1,5 @@ +import { publicRoutes } from '@ghostfolio/common/routes/routes'; + import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; @@ -7,7 +9,7 @@ const routes: Routes = [ { component: ResourcesGlossaryPageComponent, path: '', - title: $localize`Glossary` + title: publicRoutes.resources.subRoutes.glossary.title } ]; 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 706249752..c9d94d8ed 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 { hasPermission, permissions } from '@ghostfolio/common/permissions'; -import { routes } from '@ghostfolio/common/routes/routes'; +import { publicRoutes, routes } from '@ghostfolio/common/routes/routes'; import { Component, OnInit } from '@angular/core'; @@ -15,7 +15,7 @@ export class ResourcesGlossaryPageComponent implements OnInit { public hasPermissionForSubscription: boolean; public info: InfoItem; public routerLinkResourcesPersonalFinanceTools = [ - '/' + routes.resources, + '/' + publicRoutes.resources.path, routes.personalFinanceTools ]; diff --git a/apps/client/src/app/pages/resources/guides/resources-guides-routing.module.ts b/apps/client/src/app/pages/resources/guides/resources-guides-routing.module.ts index 468881733..ba731b7c9 100644 --- a/apps/client/src/app/pages/resources/guides/resources-guides-routing.module.ts +++ b/apps/client/src/app/pages/resources/guides/resources-guides-routing.module.ts @@ -1,3 +1,5 @@ +import { publicRoutes } from '@ghostfolio/common/routes/routes'; + import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; @@ -7,7 +9,7 @@ const routes: Routes = [ { component: ResourcesGuidesComponent, path: '', - title: $localize`Guides` + title: publicRoutes.resources.subRoutes.guides.title } ]; diff --git a/apps/client/src/app/pages/resources/markets/resources-markets-routing.module.ts b/apps/client/src/app/pages/resources/markets/resources-markets-routing.module.ts index c8cdb1026..a3304fffb 100644 --- a/apps/client/src/app/pages/resources/markets/resources-markets-routing.module.ts +++ b/apps/client/src/app/pages/resources/markets/resources-markets-routing.module.ts @@ -1,3 +1,5 @@ +import { publicRoutes } from '@ghostfolio/common/routes/routes'; + import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; @@ -7,7 +9,7 @@ const routes: Routes = [ { component: ResourcesMarketsComponent, path: '', - title: $localize`Markets` + title: publicRoutes.resources.subRoutes.markets.title } ]; 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 f4ce372e7..5cd7f09b5 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 { publicRoutes, routes } from '@ghostfolio/common/routes/routes'; +import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { Component } from '@angular/core'; @@ -19,20 +19,20 @@ export class ResourcesOverviewComponent { { description: 'Explore our guides to help you get started with investing and managing your finances.', - routerLink: ['/' + routes.resources, routes.guides], - title: 'Guides' + routerLink: publicRoutes.resources.subRoutes.guides.routerLink, + title: publicRoutes.resources.subRoutes.guides.title }, { description: 'Access various market resources and tools to stay informed about financial markets.', - routerLink: ['/' + routes.resources, routes.markets], - title: 'Markets' + routerLink: publicRoutes.resources.subRoutes.markets.routerLink, + title: publicRoutes.resources.subRoutes.markets.title }, { description: 'Learn key financial terms and concepts in our comprehensive glossary.', - routerLink: ['/' + routes.resources, routes.glossary], - title: 'Glossary' + routerLink: publicRoutes.resources.subRoutes.glossary.routerLink, + title: publicRoutes.resources.subRoutes.glossary.title } ]; } 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 0c4589056..59b4c80bf 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 @@ -13,7 +13,7 @@ import { Subject } from 'rxjs'; }) export class PersonalFinanceToolsPageComponent implements OnDestroy { public pathAlternativeTo = routes.openSourceAlternativeTo + '-'; - public pathResources = '/' + routes.resources; + public pathResources = publicRoutes.resources.path; public personalFinanceTools = personalFinanceTools.sort((a, b) => { return a.name.localeCompare(b.name, undefined, { sensitivity: 'base' }); }); 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 b53887ff9..3694fc227 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 @@ -23,7 +23,7 @@ export class GfProductPageComponent implements OnInit { public routerLinkAbout = publicRoutes.about.routerLink; public routerLinkFeatures = publicRoutes.features.routerLink; public routerLinkResourcesPersonalFinanceTools = [ - '/' + routes.resources, + '/' + publicRoutes.resources.path, 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 960d6c283..19a08ba1d 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,8 @@ import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; -import { routes as ghostfolioRoutes } from '@ghostfolio/common/routes/routes'; +import { + routes as ghostfolioRoutes, + publicRoutes +} from '@ghostfolio/common/routes/routes'; import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; @@ -19,21 +22,21 @@ const routes: Routes = [ ) }, { - path: ghostfolioRoutes.glossary, + path: publicRoutes.resources.subRoutes.glossary.path, loadChildren: () => import('./glossary/resources-glossary.module').then( (m) => m.ResourcesGlossaryPageModule ) }, { - path: ghostfolioRoutes.guides, + path: publicRoutes.resources.subRoutes.guides.path, loadChildren: () => import('./guides/resources-guides.module').then( (m) => m.ResourcesGuidesModule ) }, { - path: ghostfolioRoutes.markets, + path: publicRoutes.resources.subRoutes.markets.path, loadChildren: () => import('./markets/resources-markets.module').then( (m) => m.ResourcesMarketsModule @@ -48,7 +51,7 @@ const routes: Routes = [ })) ], path: '', - title: $localize`Resources` + title: publicRoutes.resources.title } ]; 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 ffe683d70..22c8f0ec6 100644 --- a/apps/client/src/app/pages/resources/resources-page.component.ts +++ b/apps/client/src/app/pages/resources/resources-page.component.ts @@ -1,5 +1,5 @@ import { TabConfiguration } from '@ghostfolio/common/interfaces'; -import { routes } from '@ghostfolio/common/routes/routes'; +import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { Component, OnInit } from '@angular/core'; import { DeviceDetectorService } from 'ngx-device-detector'; @@ -18,22 +18,22 @@ export class ResourcesPageComponent implements OnInit { { iconName: 'reader-outline', label: $localize`Overview`, - routerLink: ['/' + routes.resources] + routerLink: publicRoutes.resources.routerLink }, { label: $localize`Guides`, iconName: 'book-outline', - routerLink: ['/' + routes.resources, routes.guides] + routerLink: publicRoutes.resources.subRoutes.guides.routerLink }, { iconName: 'newspaper-outline', label: $localize`Markets`, - routerLink: ['/' + routes.resources, routes.markets] + routerLink: publicRoutes.resources.subRoutes.markets.routerLink }, { iconName: 'library-outline', label: $localize`Glossary`, - routerLink: ['/' + routes.resources, routes.glossary] + routerLink: publicRoutes.resources.subRoutes.glossary.routerLink } ]; diff --git a/libs/common/src/lib/routes/routes.ts b/libs/common/src/lib/routes/routes.ts index c2a509ab8..d993da7ed 100644 --- a/libs/common/src/lib/routes/routes.ts +++ b/libs/common/src/lib/routes/routes.ts @@ -21,12 +21,7 @@ export const routes = { webauthn: 'webauthn', // Publicly accessible pages - about: $localize`:kebab-case:about`, - glossary: $localize`:kebab-case:glossary`, - guides: $localize`:kebab-case:guides`, - markets: $localize`:kebab-case:markets`, - openSourceAlternativeTo: $localize`:kebab-case:open-source-alternative-to`, - resources: $localize`:kebab-case:resources` + openSourceAlternativeTo: $localize`:kebab-case:open-source-alternative-to` }; export const internalRoutes: Record = { @@ -203,5 +198,36 @@ export const publicRoutes = { path: $localize`:kebab-case:register`, routerLink: ['/' + $localize`:kebab-case:register`], title: $localize`Registration` + }, + resources: { + path: $localize`:kebab-case:resources`, + routerLink: ['/' + $localize`:kebab-case:resources`], + subRoutes: { + glossary: { + path: $localize`:kebab-case:glossary`, + routerLink: [ + '/' + $localize`:kebab-case:resources`, + $localize`:kebab-case:glossary` + ], + title: $localize`Glossary` + }, + guides: { + path: $localize`:kebab-case:guides`, + routerLink: [ + '/' + $localize`:kebab-case:resources`, + $localize`:kebab-case:guides` + ], + title: $localize`Guides` + }, + markets: { + path: $localize`:kebab-case:markets`, + routerLink: [ + '/' + $localize`:kebab-case:resources`, + $localize`:kebab-case:markets` + ], + title: $localize`Markets` + } + }, + title: $localize`Resources` } };