From 60dd100bb6f4f7756f3770c4b814eddc763b4fd4 Mon Sep 17 00:00:00 2001 From: Diego Noah Date: Sat, 19 Jul 2025 17:18:28 +0600 Subject: [PATCH 1/3] Feature/improve language localization for CA 20250718 (#5196) * Improve language localization for CA --- apps/client/src/locales/messages.ca.xlf | 32 ++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 7aae1d4ed..9aad9a7b0 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -5890,7 +5890,7 @@ Asset Sub Class - Asset Sub Class + Subclasse d’actiu libs/ui/src/lib/i18n.ts 7 @@ -5898,7 +5898,7 @@ Buy and sell - Buy and sell + Comprar i vendre libs/ui/src/lib/i18n.ts 8 @@ -5906,7 +5906,7 @@ Core - Core + Bàsic libs/ui/src/lib/i18n.ts 10 @@ -5914,7 +5914,7 @@ Switch to Ghostfolio Premium or Ghostfolio Open Source easily - Switch to Ghostfolio Premium or Ghostfolio Open Source easily + Canvia fàcilment a Ghostfolio Premium o Ghostfolio Open Source libs/ui/src/lib/i18n.ts 12 @@ -5922,7 +5922,7 @@ Switch to Ghostfolio Premium easily - Switch to Ghostfolio Premium easily + Canvia fàcilment a Ghostfolio Premium libs/ui/src/lib/i18n.ts 13 @@ -5930,7 +5930,7 @@ Switch to Ghostfolio Open Source or Ghostfolio Basic easily - Switch to Ghostfolio Open Source or Ghostfolio Basic easily + Canvia fàcilment a Ghostfolio Open Source o Ghostfolio Basic libs/ui/src/lib/i18n.ts 14 @@ -5938,7 +5938,7 @@ Emergency Fund - Emergency Fund + Fons d’emergència libs/ui/src/lib/i18n.ts 15 @@ -5946,7 +5946,7 @@ Grant - Grant + Subvenció libs/ui/src/lib/i18n.ts 17 @@ -5954,7 +5954,7 @@ Higher Risk - Higher Risk + Risc Alt libs/ui/src/lib/i18n.ts 18 @@ -5962,7 +5962,7 @@ This activity already exists. - This activity already exists. + Aquesta activitat ja existeix. libs/ui/src/lib/i18n.ts 19 @@ -5970,7 +5970,7 @@ Japan - Japan + Japó libs/ui/src/lib/i18n.ts 88 @@ -5978,7 +5978,7 @@ Lower Risk - Lower Risk + Risc Baix libs/ui/src/lib/i18n.ts 20 @@ -5986,7 +5986,7 @@ Month - Month + Mes libs/ui/src/lib/i18n.ts 21 @@ -5994,7 +5994,7 @@ Months - Months + Mesos libs/ui/src/lib/i18n.ts 22 @@ -6002,7 +6002,7 @@ Other - Other + Altres libs/ui/src/lib/i18n.ts 23 @@ -6014,7 +6014,7 @@ Preset - Preset + Predefinit libs/ui/src/lib/i18n.ts 25 From d8223f40e5ebe169fa13718ca87d2b1ba4b6a4ff Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Sat, 19 Jul 2025 18:20:39 +0700 Subject: [PATCH 2/3] Feature/migrate FAQ page components to standalone (#5200) * Migrate FAQ page components to standalone * Update changelog --- CHANGELOG.md | 1 + apps/client/src/app/app-routing.module.ts | 2 +- .../app/pages/faq/faq-page-routing.module.ts | 43 ------------------- .../src/app/pages/faq/faq-page.component.ts | 17 ++++++-- .../src/app/pages/faq/faq-page.module.ts | 21 --------- .../src/app/pages/faq/faq-page.routes.ts | 34 +++++++++++++++ .../faq-overview-page-routing.module.ts | 21 --------- .../overview/faq-overview-page.component.ts | 17 ++++++-- .../faq/overview/faq-overview-page.module.ts | 20 --------- .../faq/overview/faq-overview-page.routes.ts | 14 ++++++ .../faq/saas/saas-page-routing.module.ts | 22 ---------- .../app/pages/faq/saas/saas-page.component.ts | 17 ++++++-- .../app/pages/faq/saas/saas-page.module.ts | 20 --------- .../app/pages/faq/saas/saas-page.routes.ts | 15 +++++++ .../self-hosting-page-routing.module.ts | 22 ---------- .../self-hosting-page.component.ts | 12 ++++-- .../self-hosting/self-hosting-page.module.ts | 20 --------- .../self-hosting/self-hosting-page.routes.ts | 15 +++++++ 18 files changed, 127 insertions(+), 206 deletions(-) delete mode 100644 apps/client/src/app/pages/faq/faq-page-routing.module.ts delete mode 100644 apps/client/src/app/pages/faq/faq-page.module.ts create mode 100644 apps/client/src/app/pages/faq/faq-page.routes.ts delete mode 100644 apps/client/src/app/pages/faq/overview/faq-overview-page-routing.module.ts delete mode 100644 apps/client/src/app/pages/faq/overview/faq-overview-page.module.ts create mode 100644 apps/client/src/app/pages/faq/overview/faq-overview-page.routes.ts delete mode 100644 apps/client/src/app/pages/faq/saas/saas-page-routing.module.ts delete mode 100644 apps/client/src/app/pages/faq/saas/saas-page.module.ts create mode 100644 apps/client/src/app/pages/faq/saas/saas-page.routes.ts delete mode 100644 apps/client/src/app/pages/faq/self-hosting/self-hosting-page-routing.module.ts delete mode 100644 apps/client/src/app/pages/faq/self-hosting/self-hosting-page.module.ts create mode 100644 apps/client/src/app/pages/faq/self-hosting/self-hosting-page.routes.ts 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}` + } +]; From 98917868042a7215a9b728e9e864e84d42a4fef9 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 19 Jul 2025 13:21:38 +0200 Subject: [PATCH 3/3] Bugfix/fix horizontal ellipsis icon in accounts table component (#5198) * Fix icon and migrate to standalone * Update changelog --- CHANGELOG.md | 5 +++ .../accounts-table.component.ts | 36 ++++++++++++++----- .../accounts-table/accounts-table.module.ts | 33 ----------------- .../holding-detail-dialog.component.ts | 4 +-- .../pages/accounts/accounts-page.component.ts | 4 +-- 5 files changed, 36 insertions(+), 46 deletions(-) delete mode 100644 apps/client/src/app/components/accounts-table/accounts-table.module.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 0761db2bb..97c6d0082 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Localized the durations of the coupon system - Refactored the Frequently Asked Questions (FAQ) pages to standalone - Refactored the resources pages to standalone +- Refactored the accounts table component to standalone - Improved the language localization for Catalan (`ca`) - Improved the language localization for Dutch (`nl`) - Improved the language localization for German (`de`) @@ -26,6 +27,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the language localization for Portuguese (`pt`) - Improved the language localization for Spanish (`es`) +### Fixed + +- Fixed the horizontal ellipsis icon in the accounts table component + ## 2.182.0 - 2025-07-16 ### Added diff --git a/apps/client/src/app/components/accounts-table/accounts-table.component.ts b/apps/client/src/app/components/accounts-table/accounts-table.component.ts index f11c06271..3d38d6775 100644 --- a/apps/client/src/app/components/accounts-table/accounts-table.component.ts +++ b/apps/client/src/app/components/accounts-table/accounts-table.component.ts @@ -1,7 +1,10 @@ import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type'; import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { getLocale } from '@ghostfolio/common/helper'; +import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; +import { GfValueComponent } from '@ghostfolio/ui/value'; +import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, @@ -12,30 +15,45 @@ import { Output, ViewChild } from '@angular/core'; -import { MatSort } from '@angular/material/sort'; -import { MatTableDataSource } from '@angular/material/table'; -import { Router } from '@angular/router'; +import { MatButtonModule } from '@angular/material/button'; +import { MatMenuModule } from '@angular/material/menu'; +import { MatSort, MatSortModule } from '@angular/material/sort'; +import { MatTableDataSource, MatTableModule } from '@angular/material/table'; +import { Router, RouterModule } from '@angular/router'; +import { IonIcon } from '@ionic/angular/standalone'; import { Account as AccountModel } from '@prisma/client'; import { addIcons } from 'ionicons'; import { arrowRedoOutline, createOutline, documentTextOutline, - ellipsisHorizontalOutline, + ellipsisHorizontal, eyeOffOutline, trashOutline } from 'ionicons/icons'; import { get } from 'lodash'; +import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { Subject, Subscription } from 'rxjs'; @Component({ - selector: 'gf-accounts-table', changeDetection: ChangeDetectionStrategy.OnPush, - templateUrl: './accounts-table.component.html', + imports: [ + CommonModule, + GfEntityLogoComponent, + GfValueComponent, + IonIcon, + MatButtonModule, + MatMenuModule, + MatSortModule, + MatTableModule, + NgxSkeletonLoaderModule, + RouterModule + ], + selector: 'gf-accounts-table', styleUrls: ['./accounts-table.component.scss'], - standalone: false + templateUrl: './accounts-table.component.html' }) -export class AccountsTableComponent implements OnChanges, OnDestroy { +export class GfAccountsTableComponent implements OnChanges, OnDestroy { @Input() accounts: AccountModel[]; @Input() baseCurrency: string; @Input() deviceType: string; @@ -72,7 +90,7 @@ export class AccountsTableComponent implements OnChanges, OnDestroy { arrowRedoOutline, createOutline, documentTextOutline, - ellipsisHorizontalOutline, + ellipsisHorizontal, eyeOffOutline, trashOutline }); diff --git a/apps/client/src/app/components/accounts-table/accounts-table.module.ts b/apps/client/src/app/components/accounts-table/accounts-table.module.ts deleted file mode 100644 index f4658f990..000000000 --- a/apps/client/src/app/components/accounts-table/accounts-table.module.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; -import { GfValueComponent } from '@ghostfolio/ui/value'; - -import { CommonModule } from '@angular/common'; -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { MatMenuModule } from '@angular/material/menu'; -import { MatSortModule } from '@angular/material/sort'; -import { MatTableModule } from '@angular/material/table'; -import { RouterModule } from '@angular/router'; -import { IonIcon } from '@ionic/angular/standalone'; -import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; - -import { AccountsTableComponent } from './accounts-table.component'; - -@NgModule({ - declarations: [AccountsTableComponent], - exports: [AccountsTableComponent], - imports: [ - CommonModule, - GfEntityLogoComponent, - GfValueComponent, - IonIcon, - MatButtonModule, - MatMenuModule, - MatSortModule, - MatTableModule, - NgxSkeletonLoaderModule, - RouterModule - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class GfAccountsTableModule {} diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts index 69a2b734c..50065e3da 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts @@ -1,5 +1,5 @@ import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; -import { GfAccountsTableModule } from '@ghostfolio/client/components/accounts-table/accounts-table.module'; +import { GfAccountsTableComponent } from '@ghostfolio/client/components/accounts-table/accounts-table.component'; import { GfDialogFooterModule } from '@ghostfolio/client/components/dialog-footer/dialog-footer.module'; import { GfDialogHeaderModule } from '@ghostfolio/client/components/dialog-header/dialog-header.module'; import { DataService } from '@ghostfolio/client/services/data.service'; @@ -71,7 +71,7 @@ import { HoldingDetailDialogParams } from './interfaces/interfaces'; host: { class: 'd-flex flex-column h-100' }, imports: [ CommonModule, - GfAccountsTableModule, + GfAccountsTableComponent, GfActivitiesTableComponent, GfDataProviderCreditsComponent, GfDialogFooterModule, diff --git a/apps/client/src/app/pages/accounts/accounts-page.component.ts b/apps/client/src/app/pages/accounts/accounts-page.component.ts index 7d139bd5d..74ac21ec1 100644 --- a/apps/client/src/app/pages/accounts/accounts-page.component.ts +++ b/apps/client/src/app/pages/accounts/accounts-page.component.ts @@ -4,7 +4,7 @@ import { UpdateAccountDto } from '@ghostfolio/api/app/account/update-account.dto import { AccountDetailDialog } from '@ghostfolio/client/components/account-detail-dialog/account-detail-dialog.component'; import { GfAccountDetailDialogModule } from '@ghostfolio/client/components/account-detail-dialog/account-detail-dialog.module'; import { AccountDetailDialogParams } from '@ghostfolio/client/components/account-detail-dialog/interfaces/interfaces'; -import { GfAccountsTableModule } from '@ghostfolio/client/components/accounts-table/accounts-table.module'; +import { GfAccountsTableComponent } from '@ghostfolio/client/components/accounts-table/accounts-table.component'; import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { DataService } from '@ghostfolio/client/services/data.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; @@ -30,7 +30,7 @@ import { GfTransferBalanceDialogComponent } from './transfer-balance/transfer-ba host: { class: 'has-fab page' }, imports: [ GfAccountDetailDialogModule, - GfAccountsTableModule, + GfAccountsTableComponent, MatButtonModule, RouterModule ],