From f1f66663ee3e8c7fdcc9667f0e8a496c8ddcf7f4 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 5 Jul 2026 10:34:01 +0200 Subject: [PATCH 1/2] Task/setup categories and platforms for personal finance tools (#7237) Setup categories and platforms --- libs/common/src/lib/interfaces/index.ts | 2 +- .../interfaces/{product.ts => product.interface.ts} | 4 ++++ libs/common/src/lib/types/index.ts | 4 ++++ libs/common/src/lib/types/product-category.type.ts | 12 ++++++++++++ libs/common/src/lib/types/product-platform.type.ts | 7 +++++++ 5 files changed, 28 insertions(+), 1 deletion(-) rename libs/common/src/lib/interfaces/{product.ts => product.interface.ts} (72%) create mode 100644 libs/common/src/lib/types/product-category.type.ts create mode 100644 libs/common/src/lib/types/product-platform.type.ts diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index 393810edd..deec60ab7 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -35,7 +35,7 @@ import type { PortfolioPerformance } from './portfolio-performance.interface'; import type { PortfolioPosition } from './portfolio-position.interface'; import type { PortfolioReportRule } from './portfolio-report-rule.interface'; import type { PortfolioSummary } from './portfolio-summary.interface'; -import type { Product } from './product'; +import type { Product } from './product.interface'; import type { ReferralPartner } from './referral-partner.interface'; import type { AccessTokenResponse } from './responses/access-token-response.interface'; import type { AccountBalancesResponse } from './responses/account-balances-response.interface'; diff --git a/libs/common/src/lib/interfaces/product.ts b/libs/common/src/lib/interfaces/product.interface.ts similarity index 72% rename from libs/common/src/lib/interfaces/product.ts rename to libs/common/src/lib/interfaces/product.interface.ts index 6cd88fbe8..b11c7ecad 100644 --- a/libs/common/src/lib/interfaces/product.ts +++ b/libs/common/src/lib/interfaces/product.interface.ts @@ -1,5 +1,8 @@ +import { ProductCategory, ProductPlatform } from '@ghostfolio/common/types'; + export interface Product { alias?: string; + categories?: ProductCategory[]; founded?: number; hasFreePlan?: boolean; hasSelfHostingAbility?: boolean; @@ -10,6 +13,7 @@ export interface Product { name: string; note?: string; origin?: string; + platforms?: ProductPlatform[]; pricingPerYear?: string; regions?: string[]; slogan?: string; diff --git a/libs/common/src/lib/types/index.ts b/libs/common/src/lib/types/index.ts index b6e513a51..aefaf3e11 100644 --- a/libs/common/src/lib/types/index.ts +++ b/libs/common/src/lib/types/index.ts @@ -16,6 +16,8 @@ import type { MarketDataPreset } from './market-data-preset.type'; import type { MarketState } from './market-state.type'; import type { Market } from './market.type'; import type { OrderWithAccount } from './order-with-account.type'; +import type { ProductCategory } from './product-category.type'; +import type { ProductPlatform } from './product-platform.type'; import type { RequestWithUser } from './request-with-user.type'; import type { SectorName } from './sector-name.type'; import type { SubscriptionOfferKey } from './subscription-offer-key.type'; @@ -41,6 +43,8 @@ export type { MarketDataPreset, MarketState, OrderWithAccount, + ProductCategory, + ProductPlatform, RequestWithUser, SectorName, SubscriptionOfferKey, diff --git a/libs/common/src/lib/types/product-category.type.ts b/libs/common/src/lib/types/product-category.type.ts new file mode 100644 index 000000000..7fae17a72 --- /dev/null +++ b/libs/common/src/lib/types/product-category.type.ts @@ -0,0 +1,12 @@ +export type ProductCategory = + | 'BUDGETING' + | 'CRYPTOCURRENCY' + | 'DIVIDEND_TRACKING' + | 'ETF_TRACKING' + | 'FAMILY_OFFICE' + | 'FINANCIAL_PLANNING' + | 'INVESTMENT_RESEARCH' + | 'NET_WORTH_TRACKING' + | 'STOCK_TRACKING' + | 'TAX_REPORTING' + | 'WEALTH_MANAGEMENT'; diff --git a/libs/common/src/lib/types/product-platform.type.ts b/libs/common/src/lib/types/product-platform.type.ts new file mode 100644 index 000000000..01f647e49 --- /dev/null +++ b/libs/common/src/lib/types/product-platform.type.ts @@ -0,0 +1,7 @@ +export type ProductPlatform = + | 'ANDROID' + | 'IOS' + | 'LINUX' + | 'MACOS' + | 'WEB' + | 'WINDOWS'; From 5dad19023850bf90320d1852eb56a973139af606 Mon Sep 17 00:00:00 2001 From: David Requeno <108202767+DavidReque@users.noreply.github.com> Date: Sun, 5 Jul 2026 02:34:42 -0600 Subject: [PATCH 2/2] Task/set change detection strategy to OnPush in overview of admin control panel (#7236) * Set change detection strategy to OnPush * Update changelog --- CHANGELOG.md | 1 + .../app/components/admin-overview/admin-overview.component.ts | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f19c0cf1b..0ba5da4e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Set the change detection strategy to `OnPush` in the alert dialog component - Set the change detection strategy to `OnPush` in the confirmation dialog component - Set the change detection strategy to `OnPush` in the prompt dialog component +- Set the change detection strategy to `OnPush` in the overview of the admin control panel - Upgraded `stripe` from version `21.0.1` to `22.2.3` ### Fixed diff --git a/apps/client/src/app/components/admin-overview/admin-overview.component.ts b/apps/client/src/app/components/admin-overview/admin-overview.component.ts index 3b8fdc38c..b2c9b11a3 100644 --- a/apps/client/src/app/components/admin-overview/admin-overview.component.ts +++ b/apps/client/src/app/components/admin-overview/admin-overview.component.ts @@ -27,6 +27,7 @@ import { GfValueComponent } from '@ghostfolio/ui/value'; import { Clipboard, ClipboardModule } from '@angular/cdk/clipboard'; import { CommonModule } from '@angular/common'; import { + ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, @@ -64,6 +65,7 @@ import { import ms, { StringValue } from 'ms'; @Component({ + changeDetection: ChangeDetectionStrategy.OnPush, imports: [ ClipboardModule, CommonModule, @@ -140,6 +142,8 @@ export class GfAdminOverviewComponent implements OnInit { permissions.toggleReadOnlyMode ); } + + this.changeDetectorRef.markForCheck(); }); addIcons({