diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts index a7e587ea8..7eac28c87 100644 --- a/apps/client/src/app/app-routing.module.ts +++ b/apps/client/src/app/app-routing.module.ts @@ -1,10 +1,6 @@ import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; import { PageTitleStrategy } from '@ghostfolio/client/services/page-title.strategy'; -import { - publicRoutes, - routes as ghostfolioRoutes, - internalRoutes -} from '@ghostfolio/common/routes/routes'; +import { publicRoutes, internalRoutes } from '@ghostfolio/common/routes/routes'; import { NgModule } from '@angular/core'; import { RouterModule, Routes, TitleStrategy } from '@angular/router'; @@ -42,8 +38,8 @@ const routes: Routes = [ import('./pages/api/api-page.component').then( (c) => c.GfApiPageComponent ), - path: ghostfolioRoutes.api, - title: 'Ghostfolio API' + path: internalRoutes.api.path, + title: internalRoutes.api.title }, { path: internalRoutes.auth.path, @@ -89,8 +85,8 @@ const routes: Routes = [ import('./pages/i18n/i18n-page.component').then( (c) => c.GfI18nPageComponent ), - path: ghostfolioRoutes.i18n, - title: $localize`Internationalization` + path: internalRoutes.i18n.path, + title: internalRoutes.i18n.title }, { path: publicRoutes.markets.path, diff --git a/apps/client/src/app/components/header/header.component.html b/apps/client/src/app/components/header/header.component.html index c1475d549..3f443dfea 100644 --- a/apps/client/src/app/components/header/header.component.html +++ b/apps/client/src/app/components/header/header.component.html @@ -65,8 +65,10 @@ i18n mat-flat-button [ngClass]="{ - 'font-weight-bold': currentRoute === routes.adminControl, - 'text-decoration-underline': currentRoute === routes.adminControl + 'font-weight-bold': + currentRoute === internalRoutes.adminControl.path, + 'text-decoration-underline': + currentRoute === internalRoutes.adminControl.path }" [routerLink]="routerLinkAdminControl" >Admin ControlMy Ghostfolio @@ -278,7 +282,8 @@ i18n mat-menu-item [ngClass]="{ - 'font-weight-bold': currentRoute === routes.adminControl + 'font-weight-bold': + currentRoute === internalRoutes.adminControl.path }" [routerLink]="routerLinkAdminControl" >Admin Control(); 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 c9d94d8ed..81ae00fe1 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 { publicRoutes, routes } from '@ghostfolio/common/routes/routes'; +import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { Component, OnInit } from '@angular/core'; @@ -14,10 +14,8 @@ import { Component, OnInit } from '@angular/core'; export class ResourcesGlossaryPageComponent implements OnInit { public hasPermissionForSubscription: boolean; public info: InfoItem; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + publicRoutes.resources.path, - routes.personalFinanceTools - ]; + public routerLinkResourcesPersonalFinanceTools = + publicRoutes.resources.subRoutes.personalFinanceTools.routerLink; public constructor(private dataService: DataService) { this.info = this.dataService.fetchInfo(); 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 e8c256c0d..13b6cfbaf 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 { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools'; -import { routes as ghostfolioRoutes } from '@ghostfolio/common/routes/routes'; +import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; @@ -12,7 +12,7 @@ const routes: Routes = [ canActivate: [AuthGuard], component: PersonalFinanceToolsPageComponent, path: '', - title: $localize`Personal Finance Tools` + title: publicRoutes.resources.subRoutes.personalFinanceTools.title }, ...personalFinanceTools.map(({ alias, key, name }) => { return { @@ -24,8 +24,8 @@ const routes: Routes = [ return GfProductPageComponent; } ), - path: `${ghostfolioRoutes.openSourceAlternativeTo}-${alias ?? key}`, - title: $localize`Open Source Alternative to ${name}` + path: `${publicRoutes.resources.subRoutes.personalFinanceTools.subRoutes.product.path}-${alias ?? key}`, + title: `${publicRoutes.resources.subRoutes.personalFinanceTools.subRoutes.product.title} ${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 59b4c80bf..e450aa65e 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 { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools'; -import { publicRoutes, routes } from '@ghostfolio/common/routes/routes'; +import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { Component, OnDestroy } from '@angular/core'; import { Subject } from 'rxjs'; @@ -12,8 +12,12 @@ import { Subject } from 'rxjs'; standalone: false }) export class PersonalFinanceToolsPageComponent implements OnDestroy { - public pathAlternativeTo = routes.openSourceAlternativeTo + '-'; + public pathAlternativeTo = + publicRoutes.resources.subRoutes.personalFinanceTools.subRoutes.product + .path + '-'; public pathResources = publicRoutes.resources.path; + public pathPersonalFinanceTools = + publicRoutes.resources.subRoutes.personalFinanceTools.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/personal-finance-tools-page.html b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html index f3c128433..3e4784307 100644 --- a/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html +++ b/apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html @@ -32,8 +32,8 @@ personalFinanceTool.name }} - {{ personalFinanceTool.slogan }}" [routerLink]="[ - pathResources, - 'personal-finance-tools', + '/' + pathResources, + pathPersonalFinanceTools, pathAlternativeTo + (personalFinanceTool.alias ?? personalFinanceTool.key) ]" 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 3694fc227..caf29e7a0 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 { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools'; -import { publicRoutes, routes } from '@ghostfolio/common/routes/routes'; +import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { translate } from '@ghostfolio/ui/i18n'; import { Component, OnInit } from '@angular/core'; @@ -22,10 +22,8 @@ export class GfProductPageComponent implements OnInit { public product2: Product; public routerLinkAbout = publicRoutes.about.routerLink; public routerLinkFeatures = publicRoutes.features.routerLink; - public routerLinkResourcesPersonalFinanceTools = [ - '/' + publicRoutes.resources.path, - routes.personalFinanceTools - ]; + public routerLinkResourcesPersonalFinanceTools = + publicRoutes.resources.subRoutes.personalFinanceTools.routerLink; public tags: string[]; public constructor( 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 19a08ba1d..51d9e2c73 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,8 +1,5 @@ import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; -import { - routes as ghostfolioRoutes, - publicRoutes -} from '@ghostfolio/common/routes/routes'; +import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; @@ -42,13 +39,13 @@ const routes: Routes = [ (m) => m.ResourcesMarketsModule ) }, - ...[ghostfolioRoutes.personalFinanceTools].map((path) => ({ - path, + { + path: publicRoutes.resources.subRoutes.personalFinanceTools.path, loadChildren: () => import( './personal-finance-tools/personal-finance-tools-page.module' ).then((m) => m.PersonalFinanceToolsPageModule) - })) + } ], path: '', title: publicRoutes.resources.title diff --git a/libs/common/src/lib/routes/routes.ts b/libs/common/src/lib/routes/routes.ts index adf2b5704..20d911d24 100644 --- a/libs/common/src/lib/routes/routes.ts +++ b/libs/common/src/lib/routes/routes.ts @@ -2,15 +2,6 @@ import '@angular/localize/init'; import { IRoute } from './interfaces/interfaces'; -export const routes = { - api: 'api', - i18n: 'i18n', - personalFinanceTools: 'personal-finance-tools', - - // Publicly accessible pages - openSourceAlternativeTo: $localize`:kebab-case:open-source-alternative-to` -}; - export const internalRoutes: Record = { account: { path: 'account', @@ -62,6 +53,12 @@ export const internalRoutes: Record = { routerLink: ['/accounts'], title: $localize`Accounts` }, + api: { + excludeFromAssistant: true, + path: 'api', + routerLink: ['/api'], + title: 'Ghostfolio API' + }, auth: { excludeFromAssistant: true, path: 'auth', @@ -95,6 +92,12 @@ export const internalRoutes: Record = { }, title: $localize`Overview` }, + i18n: { + excludeFromAssistant: true, + path: 'i18n', + routerLink: ['/i18n'], + title: $localize`Internationalization` + }, portfolio: { path: 'portfolio', routerLink: ['/portfolio'], @@ -279,6 +282,20 @@ export const publicRoutes = { $localize`:kebab-case:markets` ], title: $localize`Markets` + }, + personalFinanceTools: { + path: 'personal-finance-tools', + routerLink: [ + '/' + $localize`:kebab-case:resources`, + 'personal-finance-tools' + ], + subRoutes: { + product: { + path: $localize`:kebab-case:open-source-alternative-to`, + title: $localize`Open Source Alternative to` + } + }, + title: $localize`Personal Finance Tools` } }, title: $localize`Resources`