Compare commits

...

2 Commits

Author SHA1 Message Date
Thomas Kaul 3e8e3af937
Feature/upgrade ionicons to version 8.0.13 (#5399) 5 days ago
Thomas Kaul 2ee3d24116
Task/refactor landing page to standalone (#5400) 5 days ago
  1. 3
      CHANGELOG.md
  2. 4
      apps/client/src/app/app-routing.module.ts
  3. 16
      apps/client/src/app/pages/landing/landing-page-routing.module.ts
  4. 37
      apps/client/src/app/pages/landing/landing-page.component.ts
  5. 30
      apps/client/src/app/pages/landing/landing-page.module.ts
  6. 15
      apps/client/src/app/pages/landing/landing-page.routes.ts
  7. 79
      package-lock.json
  8. 4
      package.json

3
CHANGELOG.md

@ -11,8 +11,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Refactored the dialog footer component to standalone - Refactored the dialog footer component to standalone
- Refactored the dialog header component to standalone - Refactored the dialog header component to standalone
- Refactored the landing page to standalone
- Refactored the register page to standalone - Refactored the register page to standalone
- Migrated the login with access token dialog from `ngModel` to form control - Migrated the login with access token dialog from `ngModel` to form control
- Upgraded `@ionic/angular` from version `8.6.3` to `8.7.3`
- Upgraded `ionicons` from version `8.0.10` to `8.0.13`
- Upgraded `prisma` from version `6.12.0` to `6.14.0` - Upgraded `prisma` from version `6.12.0` to `6.14.0`
## 2.193.0 - 2025-08-22 ## 2.193.0 - 2025-08-22

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

@ -130,9 +130,7 @@ const routes: Routes = [
{ {
path: publicRoutes.start.path, path: publicRoutes.start.path,
loadChildren: () => loadChildren: () =>
import('./pages/landing/landing-page.module').then( import('./pages/landing/landing-page.routes').then((m) => m.routes)
(m) => m.LandingPageModule
)
}, },
{ {
loadComponent: () => loadComponent: () =>

16
apps/client/src/app/pages/landing/landing-page-routing.module.ts

@ -1,16 +0,0 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { LandingPageComponent } from './landing-page.component';
const routes: Routes = [
{ path: '', component: LandingPageComponent, canActivate: [AuthGuard] }
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class LandingPageRoutingModule {}

37
apps/client/src/app/pages/landing/landing-page.component.ts

@ -1,21 +1,46 @@
import { GfWorldMapChartModule } from '@ghostfolio/client/components/world-map-chart/world-map-chart.module';
import { DataService } from '@ghostfolio/client/services/data.service'; import { DataService } from '@ghostfolio/client/services/data.service';
import { Statistics } from '@ghostfolio/common/interfaces'; import { Statistics } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { publicRoutes } from '@ghostfolio/common/routes/routes'; import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { GfCarouselComponent } from '@ghostfolio/ui/carousel';
import { GfLogoComponent } from '@ghostfolio/ui/logo';
import { GfValueComponent } from '@ghostfolio/ui/value';
import { CommonModule } from '@angular/common';
import { Component, OnDestroy, OnInit } from '@angular/core'; import { Component, OnDestroy, OnInit } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { MatCardModule } from '@angular/material/card';
import { RouterModule } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone';
import { format } from 'date-fns'; import { format } from 'date-fns';
import { addIcons } from 'ionicons';
import {
cloudDownloadOutline,
peopleOutline,
starOutline
} from 'ionicons/icons';
import { DeviceDetectorService } from 'ngx-device-detector'; import { DeviceDetectorService } from 'ngx-device-detector';
import { Subject } from 'rxjs'; import { Subject } from 'rxjs';
@Component({ @Component({
host: { class: 'page' }, host: { class: 'page' },
imports: [
CommonModule,
GfCarouselComponent,
GfLogoComponent,
GfValueComponent,
GfWorldMapChartModule,
IonIcon,
MatButtonModule,
MatCardModule,
RouterModule
],
selector: 'gf-landing-page', selector: 'gf-landing-page',
styleUrls: ['./landing-page.scss'], styleUrls: ['./landing-page.scss'],
templateUrl: './landing-page.html', templateUrl: './landing-page.html'
standalone: false
}) })
export class LandingPageComponent implements OnDestroy, OnInit { export class GfLandingPageComponent implements OnDestroy, OnInit {
public countriesOfSubscribersMap: { public countriesOfSubscribersMap: {
[code: string]: { value: number }; [code: string]: { value: number };
} = {}; } = {};
@ -118,6 +143,12 @@ export class LandingPageComponent implements OnDestroy, OnInit {
); );
this.statistics = statistics; this.statistics = statistics;
addIcons({
cloudDownloadOutline,
peopleOutline,
starOutline
});
} }
public ngOnInit() { public ngOnInit() {

30
apps/client/src/app/pages/landing/landing-page.module.ts

@ -1,30 +0,0 @@
import { GfWorldMapChartModule } from '@ghostfolio/client/components/world-map-chart/world-map-chart.module';
import { GfCarouselComponent } from '@ghostfolio/ui/carousel';
import { GfLogoComponent } from '@ghostfolio/ui/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 { MatCardModule } from '@angular/material/card';
import { RouterModule } from '@angular/router';
import { LandingPageRoutingModule } from './landing-page-routing.module';
import { LandingPageComponent } from './landing-page.component';
@NgModule({
declarations: [LandingPageComponent],
imports: [
CommonModule,
GfCarouselComponent,
GfLogoComponent,
GfValueComponent,
GfWorldMapChartModule,
LandingPageRoutingModule,
MatButtonModule,
MatCardModule,
RouterModule
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class LandingPageModule {}

15
apps/client/src/app/pages/landing/landing-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 { GfLandingPageComponent } from './landing-page.component';
export const routes: Routes = [
{
canActivate: [AuthGuard],
component: GfLandingPageComponent,
path: '',
title: publicRoutes.register.title
}
];

79
package-lock.json

@ -30,7 +30,7 @@
"@dfinity/principal": "0.15.7", "@dfinity/principal": "0.15.7",
"@dinero.js/currencies": "2.0.0-alpha.8", "@dinero.js/currencies": "2.0.0-alpha.8",
"@internationalized/number": "3.6.3", "@internationalized/number": "3.6.3",
"@ionic/angular": "8.6.3", "@ionic/angular": "8.7.3",
"@keyv/redis": "4.4.0", "@keyv/redis": "4.4.0",
"@nestjs/bull": "11.0.2", "@nestjs/bull": "11.0.2",
"@nestjs/cache-manager": "3.0.1", "@nestjs/cache-manager": "3.0.1",
@ -71,7 +71,7 @@
"google-spreadsheet": "3.2.0", "google-spreadsheet": "3.2.0",
"helmet": "7.0.0", "helmet": "7.0.0",
"http-status-codes": "2.3.0", "http-status-codes": "2.3.0",
"ionicons": "8.0.10", "ionicons": "8.0.13",
"jsonpath": "1.1.1", "jsonpath": "1.1.1",
"lodash": "4.17.21", "lodash": "4.17.21",
"marked": "15.0.4", "marked": "15.0.4",
@ -4701,13 +4701,13 @@
} }
}, },
"node_modules/@ionic/angular": { "node_modules/@ionic/angular": {
"version": "8.6.3", "version": "8.7.3",
"resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-8.6.3.tgz", "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-8.7.3.tgz",
"integrity": "sha512-Uw8eAcvqVw8mtGqX8kvUGNywSXjXZ3gdERuWC4hUSc63bS1Q+yo/319JLu+yENxOObtAu2dS5FYiqUZ07T8Brg==", "integrity": "sha512-Fd2bsluwsi88d8AEvSVANn3a7xZ7NEmlvgVTLnuF9VTI0TgdkLQptgEolty00axnQdjCaxSXxgFJd/m0gVpKIg==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@ionic/core": "8.6.3", "@ionic/core": "8.7.3",
"ionicons": "^7.0.0", "ionicons": "^8.0.13",
"jsonc-parser": "^3.0.0", "jsonc-parser": "^3.0.0",
"tslib": "^2.3.0" "tslib": "^2.3.0"
}, },
@ -4719,35 +4719,17 @@
"zone.js": ">=0.13.0" "zone.js": ">=0.13.0"
} }
}, },
"node_modules/@ionic/angular/node_modules/ionicons": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.4.0.tgz",
"integrity": "sha512-ZK94MMqgzMCPPMhmk8Ouu6goyVHFIlw/ACP6oe3FrikcI0N7CX0xcwVaEbUc0G/v3W0shI93vo+9ve/KpvcNhQ==",
"license": "MIT",
"dependencies": {
"@stencil/core": "^4.0.3"
}
},
"node_modules/@ionic/core": { "node_modules/@ionic/core": {
"version": "8.6.3", "version": "8.7.3",
"resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.6.3.tgz", "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.3.tgz",
"integrity": "sha512-N/mkw+sPecLEoO1lrnKDS0uZgl6PWSyFprCkkqoK1nHlfBkgFiHm5M9rvWlnGaFC/5xrhNGHdUtYHDFM+F8gRw==", "integrity": "sha512-KdyMxpMDQj+uqpztpK6yvN/T96hqcDiGXQ4T+aAZ+LW3wV3+0it6/rbh9C1B/wCl4Isnm4IRltPabgEfNJ50nw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@stencil/core": "4.33.1", "@stencil/core": "4.36.2",
"ionicons": "^7.2.2", "ionicons": "^8.0.13",
"tslib": "^2.1.0" "tslib": "^2.1.0"
} }
}, },
"node_modules/@ionic/core/node_modules/ionicons": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.4.0.tgz",
"integrity": "sha512-ZK94MMqgzMCPPMhmk8Ouu6goyVHFIlw/ACP6oe3FrikcI0N7CX0xcwVaEbUc0G/v3W0shI93vo+9ve/KpvcNhQ==",
"license": "MIT",
"dependencies": {
"@stencil/core": "^4.0.3"
}
},
"node_modules/@ioredis/commands": { "node_modules/@ioredis/commands": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.3.0.tgz", "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.3.0.tgz",
@ -11433,9 +11415,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@stencil/core": { "node_modules/@stencil/core": {
"version": "4.33.1", "version": "4.36.2",
"resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.33.1.tgz", "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.2.tgz",
"integrity": "sha512-12k9xhAJBkpg598it+NRmaYIdEe6TSnsL/v6/KRXDcUyTK11VYwZQej2eHnMWtqot+znJ+GNTqb5YbiXi+5Low==", "integrity": "sha512-PRFSpxNzX9Oi0Wfh02asztN9Sgev/MacfZwmd+VVyE6ZxW+a/kEpAYZhzGAmE+/aKVOGYuug7R9SulanYGxiDQ==",
"license": "MIT", "license": "MIT",
"bin": { "bin": {
"stencil": "bin/stencil" "stencil": "bin/stencil"
@ -23739,12 +23721,35 @@
} }
}, },
"node_modules/ionicons": { "node_modules/ionicons": {
"version": "8.0.10", "version": "8.0.13",
"resolved": "https://registry.npmjs.org/ionicons/-/ionicons-8.0.10.tgz", "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-8.0.13.tgz",
"integrity": "sha512-w+6VmjcRwlAtryXzM+BOlIHKyJYlrfbIIYWW4cU0BM8OECoTn/KF8ecOE5j4401z5/FcmHf/yXol1xinKuPM8g==", "integrity": "sha512-2QQVyG2P4wszne79jemMjWYLp0DBbDhr4/yFroPCxvPP1wtMxgdIV3l5n+XZ5E9mgoXU79w7yTWpm2XzJsISxQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@stencil/core": "^4.30.0" "@stencil/core": "^4.35.3"
}
},
"node_modules/ionicons/node_modules/@stencil/core": {
"version": "4.36.3",
"resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.3.tgz",
"integrity": "sha512-C9DOaAjm+hSYRuVoUuYWG/lrYT8+4DG0AL0m1Ea9+G5v2Y6ApVpNJLbXvFlRZIdDMGecH86s6v0Gp39uockLxg==",
"license": "MIT",
"bin": {
"stencil": "bin/stencil"
},
"engines": {
"node": ">=16.0.0",
"npm": ">=7.10.0"
},
"optionalDependencies": {
"@rollup/rollup-darwin-arm64": "4.34.9",
"@rollup/rollup-darwin-x64": "4.34.9",
"@rollup/rollup-linux-arm64-gnu": "4.34.9",
"@rollup/rollup-linux-arm64-musl": "4.34.9",
"@rollup/rollup-linux-x64-gnu": "4.34.9",
"@rollup/rollup-linux-x64-musl": "4.34.9",
"@rollup/rollup-win32-arm64-msvc": "4.34.9",
"@rollup/rollup-win32-x64-msvc": "4.34.9"
} }
}, },
"node_modules/ioredis": { "node_modules/ioredis": {

4
package.json

@ -76,7 +76,7 @@
"@dfinity/principal": "0.15.7", "@dfinity/principal": "0.15.7",
"@dinero.js/currencies": "2.0.0-alpha.8", "@dinero.js/currencies": "2.0.0-alpha.8",
"@internationalized/number": "3.6.3", "@internationalized/number": "3.6.3",
"@ionic/angular": "8.6.3", "@ionic/angular": "8.7.3",
"@keyv/redis": "4.4.0", "@keyv/redis": "4.4.0",
"@nestjs/bull": "11.0.2", "@nestjs/bull": "11.0.2",
"@nestjs/cache-manager": "3.0.1", "@nestjs/cache-manager": "3.0.1",
@ -117,7 +117,7 @@
"google-spreadsheet": "3.2.0", "google-spreadsheet": "3.2.0",
"helmet": "7.0.0", "helmet": "7.0.0",
"http-status-codes": "2.3.0", "http-status-codes": "2.3.0",
"ionicons": "8.0.10", "ionicons": "8.0.13",
"jsonpath": "1.1.1", "jsonpath": "1.1.1",
"lodash": "4.17.21", "lodash": "4.17.21",
"marked": "15.0.4", "marked": "15.0.4",

Loading…
Cancel
Save