diff --git a/CHANGELOG.md b/CHANGELOG.md index cdb3ee041..0761db2bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Extended the export functionality by custom asset profiles - Improved the platform icon in the create or update platform dialog of the admin control - Localized the durations of the coupon system +- Refactored the Frequently Asked Questions (FAQ) pages to standalone - Refactored the resources pages to standalone - Improved the language localization for Catalan (`ca`) - Improved the language localization for Dutch (`nl`) diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts index eeb843e0c..fdd0ec5d5 100644 --- a/apps/client/src/app/app-routing.module.ts +++ b/apps/client/src/app/app-routing.module.ts @@ -61,7 +61,7 @@ const routes: Routes = [ { path: publicRoutes.faq.path, loadChildren: () => - import('./pages/faq/faq-page.module').then((m) => m.FaqPageModule) + import('./pages/faq/faq-page.routes').then((m) => m.routes) }, { canActivate: [AuthGuard], diff --git a/apps/client/src/app/pages/faq/faq-page-routing.module.ts b/apps/client/src/app/pages/faq/faq-page-routing.module.ts deleted file mode 100644 index e48c07b8f..000000000 --- a/apps/client/src/app/pages/faq/faq-page-routing.module.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; -import { publicRoutes } from '@ghostfolio/common/routes/routes'; - -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -import { FaqPageComponent } from './faq-page.component'; - -const routes: Routes = [ - { - canActivate: [AuthGuard], - children: [ - { - path: '', - loadChildren: () => - import('./overview/faq-overview-page.module').then( - (m) => m.FaqOverviewPageModule - ) - }, - { - path: publicRoutes.faq.subRoutes.saas.path, - loadChildren: () => - import('./saas/saas-page.module').then((m) => m.SaasPageModule) - }, - { - path: publicRoutes.faq.subRoutes.selfHosting.path, - loadChildren: () => - import('./self-hosting/self-hosting-page.module').then( - (m) => m.SelfHostingPageModule - ) - } - ], - component: FaqPageComponent, - path: '', - title: publicRoutes.faq.title - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class FaqPageRoutingModule {} diff --git a/apps/client/src/app/pages/faq/faq-page.component.ts b/apps/client/src/app/pages/faq/faq-page.component.ts index 30b4d43c5..cba9e19f1 100644 --- a/apps/client/src/app/pages/faq/faq-page.component.ts +++ b/apps/client/src/app/pages/faq/faq-page.component.ts @@ -3,7 +3,15 @@ import { TabConfiguration } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { publicRoutes } from '@ghostfolio/common/routes/routes'; -import { Component, OnDestroy, OnInit } from '@angular/core'; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + OnDestroy, + OnInit +} from '@angular/core'; +import { MatTabsModule } from '@angular/material/tabs'; +import { RouterModule } from '@angular/router'; +import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { cloudyOutline, readerOutline, serverOutline } from 'ionicons/icons'; import { DeviceDetectorService } from 'ngx-device-detector'; @@ -11,12 +19,13 @@ import { Subject } from 'rxjs'; @Component({ host: { class: 'page has-tabs' }, + imports: [IonIcon, MatTabsModule, RouterModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], selector: 'gf-faq-page', styleUrls: ['./faq-page.scss'], - templateUrl: './faq-page.html', - standalone: false + templateUrl: './faq-page.html' }) -export class FaqPageComponent implements OnDestroy, OnInit { +export class GfFaqPageComponent implements OnDestroy, OnInit { public deviceType: string; public hasPermissionForSubscription: boolean; public tabs: TabConfiguration[] = []; diff --git a/apps/client/src/app/pages/faq/faq-page.module.ts b/apps/client/src/app/pages/faq/faq-page.module.ts deleted file mode 100644 index 4bb7977bd..000000000 --- a/apps/client/src/app/pages/faq/faq-page.module.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { MatTabsModule } from '@angular/material/tabs'; -import { RouterModule } from '@angular/router'; -import { IonIcon } from '@ionic/angular/standalone'; - -import { FaqPageRoutingModule } from './faq-page-routing.module'; -import { FaqPageComponent } from './faq-page.component'; - -@NgModule({ - declarations: [FaqPageComponent], - imports: [ - CommonModule, - FaqPageRoutingModule, - IonIcon, - MatTabsModule, - RouterModule - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class FaqPageModule {} diff --git a/apps/client/src/app/pages/faq/faq-page.routes.ts b/apps/client/src/app/pages/faq/faq-page.routes.ts new file mode 100644 index 000000000..2999e3c80 --- /dev/null +++ b/apps/client/src/app/pages/faq/faq-page.routes.ts @@ -0,0 +1,34 @@ +import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; +import { publicRoutes } from '@ghostfolio/common/routes/routes'; + +import { Routes } from '@angular/router'; + +import { GfFaqPageComponent } from './faq-page.component'; + +export const routes: Routes = [ + { + canActivate: [AuthGuard], + children: [ + { + path: '', + loadChildren: () => + import('./overview/faq-overview-page.routes').then((m) => m.routes) + }, + { + path: publicRoutes.faq.subRoutes.saas.path, + loadChildren: () => + import('./saas/saas-page.routes').then((m) => m.routes) + }, + { + path: publicRoutes.faq.subRoutes.selfHosting.path, + loadChildren: () => + import('./self-hosting/self-hosting-page.routes').then( + (m) => m.routes + ) + } + ], + component: GfFaqPageComponent, + path: '', + title: publicRoutes.faq.title + } +]; diff --git a/apps/client/src/app/pages/faq/overview/faq-overview-page-routing.module.ts b/apps/client/src/app/pages/faq/overview/faq-overview-page-routing.module.ts deleted file mode 100644 index 78a466e70..000000000 --- a/apps/client/src/app/pages/faq/overview/faq-overview-page-routing.module.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; - -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -import { FaqOverviewPageComponent } from './faq-overview-page.component'; - -const routes: Routes = [ - { - canActivate: [AuthGuard], - component: FaqOverviewPageComponent, - path: '', - title: $localize`Frequently Asked Questions (FAQ)` - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class FaqOverviewPageRoutingModule {} diff --git a/apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts b/apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts index 9b7bbf180..8faa8307e 100644 --- a/apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts +++ b/apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts @@ -1,18 +1,27 @@ import { UserService } from '@ghostfolio/client/services/user/user.service'; import { User } from '@ghostfolio/common/interfaces'; import { publicRoutes } from '@ghostfolio/common/routes/routes'; +import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; -import { ChangeDetectorRef, Component, OnDestroy } from '@angular/core'; +import { + ChangeDetectorRef, + Component, + CUSTOM_ELEMENTS_SCHEMA, + OnDestroy +} from '@angular/core'; +import { MatCardModule } from '@angular/material/card'; +import { RouterModule } from '@angular/router'; import { Subject, takeUntil } from 'rxjs'; @Component({ host: { class: 'page' }, + imports: [GfPremiumIndicatorComponent, MatCardModule, RouterModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], selector: 'gf-faq-overview-page', styleUrls: ['./faq-overview-page.scss'], - templateUrl: './faq-overview-page.html', - standalone: false + templateUrl: './faq-overview-page.html' }) -export class FaqOverviewPageComponent implements OnDestroy { +export class GfFaqOverviewPageComponent implements OnDestroy { public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${publicRoutes.pricing.path}`; public routerLinkFeatures = publicRoutes.features.routerLink; public user: User; diff --git a/apps/client/src/app/pages/faq/overview/faq-overview-page.module.ts b/apps/client/src/app/pages/faq/overview/faq-overview-page.module.ts deleted file mode 100644 index 37952c2ab..000000000 --- a/apps/client/src/app/pages/faq/overview/faq-overview-page.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; - -import { CommonModule } from '@angular/common'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { MatCardModule } from '@angular/material/card'; - -import { FaqOverviewPageRoutingModule } from './faq-overview-page-routing.module'; -import { FaqOverviewPageComponent } from './faq-overview-page.component'; - -@NgModule({ - declarations: [FaqOverviewPageComponent], - imports: [ - CommonModule, - FaqOverviewPageRoutingModule, - GfPremiumIndicatorComponent, - MatCardModule - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class FaqOverviewPageModule {} diff --git a/apps/client/src/app/pages/faq/overview/faq-overview-page.routes.ts b/apps/client/src/app/pages/faq/overview/faq-overview-page.routes.ts new file mode 100644 index 000000000..691703383 --- /dev/null +++ b/apps/client/src/app/pages/faq/overview/faq-overview-page.routes.ts @@ -0,0 +1,14 @@ +import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; + +import { Routes } from '@angular/router'; + +import { GfFaqOverviewPageComponent } from './faq-overview-page.component'; + +export const routes: Routes = [ + { + canActivate: [AuthGuard], + component: GfFaqOverviewPageComponent, + path: '', + title: $localize`Frequently Asked Questions (FAQ)` + } +]; diff --git a/apps/client/src/app/pages/faq/saas/saas-page-routing.module.ts b/apps/client/src/app/pages/faq/saas/saas-page-routing.module.ts deleted file mode 100644 index 62017df69..000000000 --- a/apps/client/src/app/pages/faq/saas/saas-page-routing.module.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; -import { publicRoutes } from '@ghostfolio/common/routes/routes'; - -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -import { SaasPageComponent } from './saas-page.component'; - -const routes: Routes = [ - { - canActivate: [AuthGuard], - component: SaasPageComponent, - path: '', - title: `${publicRoutes.faq.subRoutes.saas.title} - ${publicRoutes.faq.title}` - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class SaasPageRoutingModule {} 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 f5063d765..b47d45fe2 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,18 +1,27 @@ import { UserService } from '@ghostfolio/client/services/user/user.service'; import { User } from '@ghostfolio/common/interfaces'; import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes'; +import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; -import { ChangeDetectorRef, Component, OnDestroy } from '@angular/core'; +import { + ChangeDetectorRef, + Component, + CUSTOM_ELEMENTS_SCHEMA, + OnDestroy +} from '@angular/core'; +import { MatCardModule } from '@angular/material/card'; +import { RouterModule } from '@angular/router'; import { Subject, takeUntil } from 'rxjs'; @Component({ host: { class: 'page' }, + imports: [GfPremiumIndicatorComponent, MatCardModule, RouterModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], selector: 'gf-saas-page', styleUrls: ['./saas-page.scss'], - templateUrl: './saas-page.html', - standalone: false + templateUrl: './saas-page.html' }) -export class SaasPageComponent implements OnDestroy { +export class GfSaasPageComponent implements OnDestroy { public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${publicRoutes.pricing.path}`; public routerLinkAccount = internalRoutes.account.routerLink; public routerLinkAccountMembership = diff --git a/apps/client/src/app/pages/faq/saas/saas-page.module.ts b/apps/client/src/app/pages/faq/saas/saas-page.module.ts deleted file mode 100644 index 81cd2b524..000000000 --- a/apps/client/src/app/pages/faq/saas/saas-page.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; - -import { CommonModule } from '@angular/common'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { MatCardModule } from '@angular/material/card'; - -import { SaasPageRoutingModule } from './saas-page-routing.module'; -import { SaasPageComponent } from './saas-page.component'; - -@NgModule({ - declarations: [SaasPageComponent], - imports: [ - CommonModule, - GfPremiumIndicatorComponent, - MatCardModule, - SaasPageRoutingModule - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class SaasPageModule {} diff --git a/apps/client/src/app/pages/faq/saas/saas-page.routes.ts b/apps/client/src/app/pages/faq/saas/saas-page.routes.ts new file mode 100644 index 000000000..dcb574c38 --- /dev/null +++ b/apps/client/src/app/pages/faq/saas/saas-page.routes.ts @@ -0,0 +1,15 @@ +import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; +import { publicRoutes } from '@ghostfolio/common/routes/routes'; + +import { Routes } from '@angular/router'; + +import { GfSaasPageComponent } from './saas-page.component'; + +export const routes: Routes = [ + { + canActivate: [AuthGuard], + component: GfSaasPageComponent, + path: '', + title: `${publicRoutes.faq.subRoutes.saas.title} - ${publicRoutes.faq.title}` + } +]; diff --git a/apps/client/src/app/pages/faq/self-hosting/self-hosting-page-routing.module.ts b/apps/client/src/app/pages/faq/self-hosting/self-hosting-page-routing.module.ts deleted file mode 100644 index 60e4616af..000000000 --- a/apps/client/src/app/pages/faq/self-hosting/self-hosting-page-routing.module.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; -import { publicRoutes } from '@ghostfolio/common/routes/routes'; - -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -import { SelfHostingPageComponent } from './self-hosting-page.component'; - -const routes: Routes = [ - { - canActivate: [AuthGuard], - component: SelfHostingPageComponent, - path: '', - title: `${publicRoutes.faq.subRoutes.selfHosting.title} - ${publicRoutes.faq.title}` - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class SelfHostingPageRoutingModule {} diff --git a/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts b/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts index 3e6e25655..ed1d74395 100644 --- a/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts +++ b/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts @@ -1,16 +1,20 @@ import { publicRoutes } from '@ghostfolio/common/routes/routes'; +import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; -import { Component, OnDestroy } from '@angular/core'; +import { CUSTOM_ELEMENTS_SCHEMA, Component, OnDestroy } from '@angular/core'; +import { MatCardModule } from '@angular/material/card'; +import { RouterModule } from '@angular/router'; import { Subject } from 'rxjs'; @Component({ host: { class: 'page' }, + imports: [GfPremiumIndicatorComponent, MatCardModule, RouterModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], selector: 'gf-self-hosting-page', styleUrls: ['./self-hosting-page.scss'], - templateUrl: './self-hosting-page.html', - standalone: false + templateUrl: './self-hosting-page.html' }) -export class SelfHostingPageComponent implements OnDestroy { +export class GfSelfHostingPageComponent implements OnDestroy { public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${publicRoutes.pricing.path}`; private unsubscribeSubject = new Subject(); diff --git a/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.module.ts b/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.module.ts deleted file mode 100644 index 931f24aa6..000000000 --- a/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; - -import { CommonModule } from '@angular/common'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { MatCardModule } from '@angular/material/card'; - -import { SelfHostingPageRoutingModule } from './self-hosting-page-routing.module'; -import { SelfHostingPageComponent } from './self-hosting-page.component'; - -@NgModule({ - declarations: [SelfHostingPageComponent], - imports: [ - CommonModule, - GfPremiumIndicatorComponent, - MatCardModule, - SelfHostingPageRoutingModule - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class SelfHostingPageModule {} diff --git a/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.routes.ts b/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.routes.ts new file mode 100644 index 000000000..d08cdb312 --- /dev/null +++ b/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.routes.ts @@ -0,0 +1,15 @@ +import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; +import { publicRoutes } from '@ghostfolio/common/routes/routes'; + +import { Routes } from '@angular/router'; + +import { GfSelfHostingPageComponent } from './self-hosting-page.component'; + +export const routes: Routes = [ + { + canActivate: [AuthGuard], + component: GfSelfHostingPageComponent, + path: '', + title: `${publicRoutes.faq.subRoutes.selfHosting.title} - ${publicRoutes.faq.title}` + } +];