Browse Source

Feature/refactor public routes: faq (#4933)

* Refactor public routes: faq
pull/4935/head
Thomas Kaul 2 weeks ago
committed by GitHub
parent
commit
908a731989
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 2
      apps/client/src/app/app-routing.module.ts
  2. 4
      apps/client/src/app/app.component.ts
  3. 2
      apps/client/src/app/core/auth.guard.ts
  4. 4
      apps/client/src/app/pages/about/overview/about-overview-page.component.ts
  5. 8
      apps/client/src/app/pages/faq/faq-page-routing.module.ts
  6. 8
      apps/client/src/app/pages/faq/faq-page.component.ts
  7. 3
      apps/client/src/app/pages/faq/saas/saas-page-routing.module.ts
  8. 3
      apps/client/src/app/pages/faq/self-hosting/self-hosting-page-routing.module.ts
  9. 2
      apps/client/src/app/pages/resources/overview/resources-overview.component.html
  10. 18
      apps/client/src/app/pages/resources/overview/resources-overview.component.ts
  11. 23
      libs/common/src/lib/routes/routes.ts

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

@ -64,7 +64,7 @@ const routes: Routes = [
path: ghostfolioRoutes.demo path: ghostfolioRoutes.demo
}, },
{ {
path: ghostfolioRoutes.faq, path: publicRoutes.faq.path,
loadChildren: () => loadChildren: () =>
import('./pages/faq/faq-page.module').then((m) => m.FaqPageModule) import('./pages/faq/faq-page.module').then((m) => m.FaqPageModule)
}, },

4
apps/client/src/app/app.component.ts

@ -79,7 +79,7 @@ export class AppComponent implements OnDestroy, OnInit {
routes.termsOfService routes.termsOfService
]; ];
public routerLinkBlog = publicRoutes.blog.routerLink; public routerLinkBlog = publicRoutes.blog.routerLink;
public routerLinkFaq = ['/' + routes.faq]; public routerLinkFaq = publicRoutes.faq.routerLink;
public routerLinkFeatures = publicRoutes.features.routerLink; public routerLinkFeatures = publicRoutes.features.routerLink;
public routerLinkMarkets = ['/' + routes.markets]; public routerLinkMarkets = ['/' + routes.markets];
public routerLinkOpenStartup = publicRoutes.openStartup.routerLink; public routerLinkOpenStartup = publicRoutes.openStartup.routerLink;
@ -201,7 +201,7 @@ export class AppComponent implements OnDestroy, OnInit {
this.hasTabs = this.hasTabs =
(this.currentRoute === routes.about || (this.currentRoute === routes.about ||
this.currentRoute === routes.faq || this.currentRoute === publicRoutes.faq.path ||
this.currentRoute === routes.resources || this.currentRoute === routes.resources ||
this.currentRoute === internalRoutes.account.path || this.currentRoute === internalRoutes.account.path ||
this.currentRoute === routes.adminControl || this.currentRoute === routes.adminControl ||

2
apps/client/src/app/core/auth.guard.ts

@ -22,7 +22,7 @@ export class AuthGuard {
`/${routes.about}`, `/${routes.about}`,
`/${publicRoutes.blog.path}`, `/${publicRoutes.blog.path}`,
`/${routes.demo}`, `/${routes.demo}`,
`/${routes.faq}`, `/${publicRoutes.faq.path}`,
`/${publicRoutes.features.path}`, `/${publicRoutes.features.path}`,
`/${routes.markets}`, `/${routes.markets}`,
`/${publicRoutes.openStartup.path}`, `/${publicRoutes.openStartup.path}`,

4
apps/client/src/app/pages/about/overview/about-overview-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 { UserService } from '@ghostfolio/client/services/user/user.service';
import { User } from '@ghostfolio/common/interfaces'; import { User } 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 { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
import { Subject } from 'rxjs'; import { Subject } from 'rxjs';
@ -19,7 +19,7 @@ export class AboutOverviewPageComponent implements OnDestroy, OnInit {
public hasPermissionForSubscription: boolean; public hasPermissionForSubscription: boolean;
public isLoggedIn: boolean; public isLoggedIn: boolean;
public routerLinkBlog = publicRoutes.blog.routerLink; public routerLinkBlog = publicRoutes.blog.routerLink;
public routerLinkFaq = ['/' + routes.faq]; public routerLinkFaq = publicRoutes.faq.routerLink;
public routerLinkFeatures = publicRoutes.features.routerLink; public routerLinkFeatures = publicRoutes.features.routerLink;
public routerLinkOpenStartup = publicRoutes.openStartup.routerLink; public routerLinkOpenStartup = publicRoutes.openStartup.routerLink;
public user: User; public user: User;

8
apps/client/src/app/pages/faq/faq-page-routing.module.ts

@ -1,5 +1,5 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
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';
@ -18,12 +18,12 @@ const routes: Routes = [
) )
}, },
{ {
path: ghostfolioRoutes.saas, path: publicRoutes.faq.subRoutes.saas.path,
loadChildren: () => loadChildren: () =>
import('./saas/saas-page.module').then((m) => m.SaasPageModule) import('./saas/saas-page.module').then((m) => m.SaasPageModule)
}, },
{ {
path: ghostfolioRoutes.selfHosting, path: publicRoutes.faq.subRoutes.selfHosting.path,
loadChildren: () => loadChildren: () =>
import('./self-hosting/self-hosting-page.module').then( import('./self-hosting/self-hosting-page.module').then(
(m) => m.SelfHostingPageModule (m) => m.SelfHostingPageModule
@ -32,7 +32,7 @@ const routes: Routes = [
], ],
component: FaqPageComponent, component: FaqPageComponent,
path: '', path: '',
title: $localize`Frequently Asked Questions (FAQ)` title: publicRoutes.faq.title
} }
]; ];

8
apps/client/src/app/pages/faq/faq-page.component.ts

@ -1,7 +1,7 @@
import { DataService } from '@ghostfolio/client/services/data.service'; import { DataService } from '@ghostfolio/client/services/data.service';
import { TabConfiguration } from '@ghostfolio/common/interfaces'; import { TabConfiguration } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { routes } from '@ghostfolio/common/routes/routes'; import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Component, OnDestroy, OnInit } from '@angular/core'; import { Component, OnDestroy, OnInit } from '@angular/core';
import { DeviceDetectorService } from 'ngx-device-detector'; import { DeviceDetectorService } from 'ngx-device-detector';
@ -36,18 +36,18 @@ export class FaqPageComponent implements OnDestroy, OnInit {
{ {
iconName: 'reader-outline', iconName: 'reader-outline',
label: $localize`General`, label: $localize`General`,
routerLink: ['/' + routes.faq] routerLink: publicRoutes.faq.routerLink
}, },
{ {
iconName: 'cloudy-outline', iconName: 'cloudy-outline',
label: $localize`Cloud` + ' (SaaS)', label: $localize`Cloud` + ' (SaaS)',
routerLink: ['/' + routes.faq, routes.saas], routerLink: publicRoutes.faq.subRoutes.saas.routerLink,
showCondition: this.hasPermissionForSubscription showCondition: this.hasPermissionForSubscription
}, },
{ {
iconName: 'server-outline', iconName: 'server-outline',
label: $localize`Self-Hosting`, label: $localize`Self-Hosting`,
routerLink: ['/' + routes.faq, routes.selfHosting] routerLink: publicRoutes.faq.subRoutes.selfHosting.routerLink
} }
]; ];
} }

3
apps/client/src/app/pages/faq/saas/saas-page-routing.module.ts

@ -1,4 +1,5 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
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';
@ -10,7 +11,7 @@ const routes: Routes = [
canActivate: [AuthGuard], canActivate: [AuthGuard],
component: SaasPageComponent, component: SaasPageComponent,
path: '', path: '',
title: $localize`Cloud` + ' (SaaS) – ' + $localize`FAQ` title: `${publicRoutes.faq.subRoutes.saas.title} - ${publicRoutes.faq.title}`
} }
]; ];

3
apps/client/src/app/pages/faq/self-hosting/self-hosting-page-routing.module.ts

@ -1,4 +1,5 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
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';
@ -10,7 +11,7 @@ const routes: Routes = [
canActivate: [AuthGuard], canActivate: [AuthGuard],
component: SelfHostingPageComponent, component: SelfHostingPageComponent,
path: '', path: '',
title: $localize`Self-Hosting` + ' – ' + $localize`FAQ` title: `${publicRoutes.faq.subRoutes.selfHosting.title} - ${publicRoutes.faq.title}`
} }
]; ];

2
apps/client/src/app/pages/resources/overview/resources-overview.component.html

@ -7,7 +7,7 @@
<div class="mb-4"> <div class="mb-4">
<h3 class="h5 mt-0">{{ item.title }}</h3> <h3 class="h5 mt-0">{{ item.title }}</h3>
<p class="mb-1">{{ item.description }}</p> <p class="mb-1">{{ item.description }}</p>
<a [routerLink]="item.link">Explore {{ item.title }} →</a> <a [routerLink]="item.routerLink">Explore {{ item.title }} →</a>
</div> </div>
} }
</div> </div>

18
apps/client/src/app/pages/resources/overview/resources-overview.component.ts

@ -1,4 +1,4 @@
import { routes } from '@ghostfolio/common/routes/routes'; import { publicRoutes, routes } from '@ghostfolio/common/routes/routes';
import { Component } from '@angular/core'; import { Component } from '@angular/core';
@ -11,28 +11,28 @@ import { Component } from '@angular/core';
export class ResourcesOverviewComponent { export class ResourcesOverviewComponent {
public overviewItems = [ public overviewItems = [
{ {
title: 'Frequently Asked Questions (FAQ)',
description: description:
'Find quick answers to commonly asked questions about Ghostfolio in our Frequently Asked Questions (FAQ) section.', 'Find quick answers to commonly asked questions about Ghostfolio in our Frequently Asked Questions (FAQ) section.',
link: ['/' + routes.faq] routerLink: publicRoutes.faq.routerLink,
title: publicRoutes.faq.title
}, },
{ {
title: 'Guides',
description: description:
'Explore our guides to help you get started with investing and managing your finances.', 'Explore our guides to help you get started with investing and managing your finances.',
link: ['/' + routes.resources, routes.guides] routerLink: ['/' + routes.resources, routes.guides],
title: 'Guides'
}, },
{ {
title: 'Markets',
description: description:
'Access various market resources and tools to stay informed about financial markets.', 'Access various market resources and tools to stay informed about financial markets.',
link: ['/' + routes.resources, routes.markets] routerLink: ['/' + routes.resources, routes.markets],
title: 'Markets'
}, },
{ {
title: 'Glossary',
description: description:
'Learn key financial terms and concepts in our comprehensive glossary.', 'Learn key financial terms and concepts in our comprehensive glossary.',
link: ['/' + routes.resources, routes.glossary] routerLink: ['/' + routes.resources, routes.glossary],
title: 'Glossary'
} }
]; ];
} }

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

@ -15,7 +15,6 @@ export const routes = {
membership: 'membership', membership: 'membership',
personalFinanceTools: 'personal-finance-tools', personalFinanceTools: 'personal-finance-tools',
public: 'p', public: 'p',
saas: 'saas',
settings: 'settings', settings: 'settings',
start: 'start', start: 'start',
users: 'users', users: 'users',
@ -24,7 +23,6 @@ export const routes = {
// Publicly accessible pages // Publicly accessible pages
about: $localize`:kebab-case:about`, about: $localize`:kebab-case:about`,
changelog: $localize`:kebab-case:changelog`, changelog: $localize`:kebab-case:changelog`,
faq: $localize`:kebab-case:faq`,
glossary: $localize`:kebab-case:glossary`, glossary: $localize`:kebab-case:glossary`,
guides: $localize`:kebab-case:guides`, guides: $localize`:kebab-case:guides`,
license: $localize`:kebab-case:license`, license: $localize`:kebab-case:license`,
@ -32,7 +30,6 @@ export const routes = {
openSourceAlternativeTo: $localize`:kebab-case:open-source-alternative-to`, openSourceAlternativeTo: $localize`:kebab-case:open-source-alternative-to`,
privacyPolicy: $localize`:kebab-case:privacy-policy`, privacyPolicy: $localize`:kebab-case:privacy-policy`,
resources: $localize`:kebab-case:resources`, resources: $localize`:kebab-case:resources`,
selfHosting: $localize`:kebab-case:self-hosting`,
termsOfService: $localize`:kebab-case:terms-of-service` termsOfService: $localize`:kebab-case:terms-of-service`
}; };
@ -134,6 +131,26 @@ export const publicRoutes = {
routerLink: ['/blog'], routerLink: ['/blog'],
title: $localize`Blog` title: $localize`Blog`
}, },
faq: {
path: $localize`:kebab-case:faq`,
routerLink: ['/' + $localize`:kebab-case:faq`],
subRoutes: {
saas: {
path: 'saas',
routerLink: ['/' + $localize`:kebab-case:faq`, 'saas'],
title: $localize`Cloud` + ' (SaaS)'
},
selfHosting: {
path: $localize`:kebab-case:self-hosting`,
routerLink: [
'/' + $localize`:kebab-case:faq`,
$localize`:kebab-case:self-hosting`
],
title: $localize`Self-Hosting`
}
},
title: $localize`Frequently Asked Questions (FAQ)`
},
features: { features: {
path: $localize`:kebab-case:features`, path: $localize`:kebab-case:features`,
routerLink: ['/' + $localize`:kebab-case:features`], routerLink: ['/' + $localize`:kebab-case:features`],

Loading…
Cancel
Save