Browse Source

Feature/refactor various routes (part 3) (#4951)

* Refactor various routes
pull/4952/head
Thomas Kaul 2 weeks ago
committed by GitHub
parent
commit
153b162927
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 14
      apps/client/src/app/app-routing.module.ts
  2. 13
      apps/client/src/app/components/header/header.component.html
  3. 7
      apps/client/src/app/components/header/header.component.ts
  4. 8
      apps/client/src/app/pages/resources/glossary/resources-glossary.component.ts
  5. 8
      apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts
  6. 8
      apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.component.ts
  7. 4
      apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html
  8. 8
      apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
  9. 11
      apps/client/src/app/pages/resources/resources-page-routing.module.ts
  10. 35
      libs/common/src/lib/routes/routes.ts

14
apps/client/src/app/app-routing.module.ts

@ -1,10 +1,6 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { PageTitleStrategy } from '@ghostfolio/client/services/page-title.strategy'; import { PageTitleStrategy } from '@ghostfolio/client/services/page-title.strategy';
import { import { publicRoutes, internalRoutes } from '@ghostfolio/common/routes/routes';
publicRoutes,
routes as ghostfolioRoutes,
internalRoutes
} from '@ghostfolio/common/routes/routes';
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { RouterModule, Routes, TitleStrategy } from '@angular/router'; import { RouterModule, Routes, TitleStrategy } from '@angular/router';
@ -42,8 +38,8 @@ const routes: Routes = [
import('./pages/api/api-page.component').then( import('./pages/api/api-page.component').then(
(c) => c.GfApiPageComponent (c) => c.GfApiPageComponent
), ),
path: ghostfolioRoutes.api, path: internalRoutes.api.path,
title: 'Ghostfolio API' title: internalRoutes.api.title
}, },
{ {
path: internalRoutes.auth.path, path: internalRoutes.auth.path,
@ -89,8 +85,8 @@ const routes: Routes = [
import('./pages/i18n/i18n-page.component').then( import('./pages/i18n/i18n-page.component').then(
(c) => c.GfI18nPageComponent (c) => c.GfI18nPageComponent
), ),
path: ghostfolioRoutes.i18n, path: internalRoutes.i18n.path,
title: $localize`Internationalization` title: internalRoutes.i18n.title
}, },
{ {
path: publicRoutes.markets.path, path: publicRoutes.markets.path,

13
apps/client/src/app/components/header/header.component.html

@ -65,8 +65,10 @@
i18n i18n
mat-flat-button mat-flat-button
[ngClass]="{ [ngClass]="{
'font-weight-bold': currentRoute === routes.adminControl, 'font-weight-bold':
'text-decoration-underline': currentRoute === routes.adminControl currentRoute === internalRoutes.adminControl.path,
'text-decoration-underline':
currentRoute === internalRoutes.adminControl.path
}" }"
[routerLink]="routerLinkAdminControl" [routerLink]="routerLinkAdminControl"
>Admin Control</a >Admin Control</a
@ -268,7 +270,9 @@
<a <a
i18n i18n
mat-menu-item mat-menu-item
[ngClass]="{ 'font-weight-bold': currentRoute === routes.account }" [ngClass]="{
'font-weight-bold': currentRoute === internalRoutes.account.path
}"
[routerLink]="routerLinkAccount" [routerLink]="routerLinkAccount"
>My Ghostfolio</a >My Ghostfolio</a
> >
@ -278,7 +282,8 @@
i18n i18n
mat-menu-item mat-menu-item
[ngClass]="{ [ngClass]="{
'font-weight-bold': currentRoute === routes.adminControl 'font-weight-bold':
currentRoute === internalRoutes.adminControl.path
}" }"
[routerLink]="routerLinkAdminControl" [routerLink]="routerLinkAdminControl"
>Admin Control</a >Admin Control</a

7
apps/client/src/app/components/header/header.component.ts

@ -12,11 +12,7 @@ import { TokenStorageService } from '@ghostfolio/client/services/token-storage.s
import { UserService } from '@ghostfolio/client/services/user/user.service'; import { UserService } from '@ghostfolio/client/services/user/user.service';
import { Filter, InfoItem, User } from '@ghostfolio/common/interfaces'; import { Filter, InfoItem, User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes';
internalRoutes,
publicRoutes,
routes
} from '@ghostfolio/common/routes/routes';
import { DateRange } from '@ghostfolio/common/types'; import { DateRange } from '@ghostfolio/common/types';
import { GfAssistantComponent } from '@ghostfolio/ui/assistant/assistant.component'; import { GfAssistantComponent } from '@ghostfolio/ui/assistant/assistant.component';
@ -100,7 +96,6 @@ export class HeaderComponent implements OnChanges {
public routerLinkPricing = publicRoutes.pricing.routerLink; public routerLinkPricing = publicRoutes.pricing.routerLink;
public routerLinkRegister = publicRoutes.register.routerLink; public routerLinkRegister = publicRoutes.register.routerLink;
public routerLinkResources = publicRoutes.resources.routerLink; public routerLinkResources = publicRoutes.resources.routerLink;
public routes = routes;
private unsubscribeSubject = new Subject<void>(); private unsubscribeSubject = new Subject<void>();

8
apps/client/src/app/pages/resources/glossary/resources-glossary.component.ts

@ -1,7 +1,7 @@
import { DataService } from '@ghostfolio/client/services/data.service'; import { DataService } from '@ghostfolio/client/services/data.service';
import { InfoItem } from '@ghostfolio/common/interfaces'; import { InfoItem } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; 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'; import { Component, OnInit } from '@angular/core';
@ -14,10 +14,8 @@ import { Component, OnInit } from '@angular/core';
export class ResourcesGlossaryPageComponent implements OnInit { export class ResourcesGlossaryPageComponent implements OnInit {
public hasPermissionForSubscription: boolean; public hasPermissionForSubscription: boolean;
public info: InfoItem; public info: InfoItem;
public routerLinkResourcesPersonalFinanceTools = [ public routerLinkResourcesPersonalFinanceTools =
'/' + publicRoutes.resources.path, publicRoutes.resources.subRoutes.personalFinanceTools.routerLink;
routes.personalFinanceTools
];
public constructor(private dataService: DataService) { public constructor(private dataService: DataService) {
this.info = this.dataService.fetchInfo(); this.info = this.dataService.fetchInfo();

8
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 { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools'; 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 { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router'; import { RouterModule, Routes } from '@angular/router';
@ -12,7 +12,7 @@ const routes: Routes = [
canActivate: [AuthGuard], canActivate: [AuthGuard],
component: PersonalFinanceToolsPageComponent, component: PersonalFinanceToolsPageComponent,
path: '', path: '',
title: $localize`Personal Finance Tools` title: publicRoutes.resources.subRoutes.personalFinanceTools.title
}, },
...personalFinanceTools.map(({ alias, key, name }) => { ...personalFinanceTools.map(({ alias, key, name }) => {
return { return {
@ -24,8 +24,8 @@ const routes: Routes = [
return GfProductPageComponent; return GfProductPageComponent;
} }
), ),
path: `${ghostfolioRoutes.openSourceAlternativeTo}-${alias ?? key}`, path: `${publicRoutes.resources.subRoutes.personalFinanceTools.subRoutes.product.path}-${alias ?? key}`,
title: $localize`Open Source Alternative to ${name}` title: `${publicRoutes.resources.subRoutes.personalFinanceTools.subRoutes.product.title} ${name}`
}; };
}) })
]; ];

8
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 { 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 { Component, OnDestroy } from '@angular/core';
import { Subject } from 'rxjs'; import { Subject } from 'rxjs';
@ -12,8 +12,12 @@ import { Subject } from 'rxjs';
standalone: false standalone: false
}) })
export class PersonalFinanceToolsPageComponent implements OnDestroy { export class PersonalFinanceToolsPageComponent implements OnDestroy {
public pathAlternativeTo = routes.openSourceAlternativeTo + '-'; public pathAlternativeTo =
publicRoutes.resources.subRoutes.personalFinanceTools.subRoutes.product
.path + '-';
public pathResources = publicRoutes.resources.path; public pathResources = publicRoutes.resources.path;
public pathPersonalFinanceTools =
publicRoutes.resources.subRoutes.personalFinanceTools.path;
public personalFinanceTools = personalFinanceTools.sort((a, b) => { public personalFinanceTools = personalFinanceTools.sort((a, b) => {
return a.name.localeCompare(b.name, undefined, { sensitivity: 'base' }); return a.name.localeCompare(b.name, undefined, { sensitivity: 'base' });
}); });

4
apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html

@ -32,8 +32,8 @@
personalFinanceTool.name personalFinanceTool.name
}} - {{ personalFinanceTool.slogan }}" }} - {{ personalFinanceTool.slogan }}"
[routerLink]="[ [routerLink]="[
pathResources, '/' + pathResources,
'personal-finance-tools', pathPersonalFinanceTools,
pathAlternativeTo + pathAlternativeTo +
(personalFinanceTool.alias ?? personalFinanceTool.key) (personalFinanceTool.alias ?? personalFinanceTool.key)
]" ]"

8
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 { DataService } from '@ghostfolio/client/services/data.service';
import { Product } from '@ghostfolio/common/interfaces'; import { Product } from '@ghostfolio/common/interfaces';
import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools'; 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 { translate } from '@ghostfolio/ui/i18n';
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
@ -22,10 +22,8 @@ export class GfProductPageComponent implements OnInit {
public product2: Product; public product2: Product;
public routerLinkAbout = publicRoutes.about.routerLink; public routerLinkAbout = publicRoutes.about.routerLink;
public routerLinkFeatures = publicRoutes.features.routerLink; public routerLinkFeatures = publicRoutes.features.routerLink;
public routerLinkResourcesPersonalFinanceTools = [ public routerLinkResourcesPersonalFinanceTools =
'/' + publicRoutes.resources.path, publicRoutes.resources.subRoutes.personalFinanceTools.routerLink;
routes.personalFinanceTools
];
public tags: string[]; public tags: string[];
public constructor( public constructor(

11
apps/client/src/app/pages/resources/resources-page-routing.module.ts

@ -1,8 +1,5 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { import { publicRoutes } from '@ghostfolio/common/routes/routes';
routes as ghostfolioRoutes,
publicRoutes
} from '@ghostfolio/common/routes/routes';
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router'; import { RouterModule, Routes } from '@angular/router';
@ -42,13 +39,13 @@ const routes: Routes = [
(m) => m.ResourcesMarketsModule (m) => m.ResourcesMarketsModule
) )
}, },
...[ghostfolioRoutes.personalFinanceTools].map((path) => ({ {
path, path: publicRoutes.resources.subRoutes.personalFinanceTools.path,
loadChildren: () => loadChildren: () =>
import( import(
'./personal-finance-tools/personal-finance-tools-page.module' './personal-finance-tools/personal-finance-tools-page.module'
).then((m) => m.PersonalFinanceToolsPageModule) ).then((m) => m.PersonalFinanceToolsPageModule)
})) }
], ],
path: '', path: '',
title: publicRoutes.resources.title title: publicRoutes.resources.title

35
libs/common/src/lib/routes/routes.ts

@ -2,15 +2,6 @@ import '@angular/localize/init';
import { IRoute } from './interfaces/interfaces'; 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<string, IRoute> = { export const internalRoutes: Record<string, IRoute> = {
account: { account: {
path: 'account', path: 'account',
@ -62,6 +53,12 @@ export const internalRoutes: Record<string, IRoute> = {
routerLink: ['/accounts'], routerLink: ['/accounts'],
title: $localize`Accounts` title: $localize`Accounts`
}, },
api: {
excludeFromAssistant: true,
path: 'api',
routerLink: ['/api'],
title: 'Ghostfolio API'
},
auth: { auth: {
excludeFromAssistant: true, excludeFromAssistant: true,
path: 'auth', path: 'auth',
@ -95,6 +92,12 @@ export const internalRoutes: Record<string, IRoute> = {
}, },
title: $localize`Overview` title: $localize`Overview`
}, },
i18n: {
excludeFromAssistant: true,
path: 'i18n',
routerLink: ['/i18n'],
title: $localize`Internationalization`
},
portfolio: { portfolio: {
path: 'portfolio', path: 'portfolio',
routerLink: ['/portfolio'], routerLink: ['/portfolio'],
@ -279,6 +282,20 @@ export const publicRoutes = {
$localize`:kebab-case:markets` $localize`:kebab-case:markets`
], ],
title: $localize`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` title: $localize`Resources`

Loading…
Cancel
Save