From 9cc9678302a3d0cec0ec5d07005c98275d534289 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 10 Aug 2026 08:24:22 +0200 Subject: [PATCH] Reuse currency selector --- .../user-account-settings.component.ts | 27 +++++++++++++++++++ .../user-account-settings.html | 18 ++++--------- .../currency-selector.component.ts | 8 ++++++ 3 files changed, 40 insertions(+), 13 deletions(-) diff --git a/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts b/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts index 18ce8e07c..2743fe50c 100644 --- a/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts +++ b/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -14,6 +14,7 @@ import { downloadAsFile } from '@ghostfolio/common/helper'; import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; +import { GfCurrencySelectorComponent } from '@ghostfolio/ui/currency-selector'; import { NotificationService } from '@ghostfolio/ui/notifications'; import { DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; @@ -31,6 +32,7 @@ import { import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { NonNullableFormBuilder, + FormBuilder, FormsModule, ReactiveFormsModule, Validators @@ -59,6 +61,7 @@ import { catchError } from 'rxjs/operators'; changeDetection: ChangeDetectionStrategy.OnPush, imports: [ FormsModule, + GfCurrencySelectorComponent, GfValueComponent, IonIcon, MatButtonModule, @@ -78,6 +81,9 @@ import { catchError } from 'rxjs/operators'; export class GfUserAccountSettingsComponent implements OnInit { protected readonly appearancePlaceholder = $localize`Auto`; protected readonly baseCurrency: string; + protected readonly baseCurrencyForm = inject(FormBuilder).group({ + baseCurrency: [''] + }); protected closeUserAccountMailHref: string; protected readonly currencies: string[] = []; protected readonly deleteOwnUserForm = inject(NonNullableFormBuilder).group({ @@ -182,6 +188,17 @@ export class GfUserAccountSettingsComponent implements OnInit { permissions.updateViewMode ); + this.baseCurrencyForm.setValue( + { baseCurrency: this.user.settings.baseCurrency ?? null }, + { emitEvent: false } + ); + + if (this.hasPermissionToUpdateUserSettings) { + this.baseCurrencyForm.enable({ emitEvent: false }); + } else { + this.baseCurrencyForm.disable({ emitEvent: false }); + } + if (this.user.settings.locale) { this.locales.push(this.user.settings.locale); } @@ -194,6 +211,16 @@ export class GfUserAccountSettingsComponent implements OnInit { } }); + this.baseCurrencyForm.controls.baseCurrency.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe((value) => { + // The currency selector emits null while the user is typing and only + // emits a currency once an option has been selected + if (value && value !== this.user?.settings.baseCurrency) { + this.onChangeUserSetting('baseCurrency', value); + } + }); + addIcons({ eyeOffOutline, eyeOutline }); } diff --git a/apps/client/src/app/components/user-account-settings/user-account-settings.html b/apps/client/src/app/components/user-account-settings/user-account-settings.html index cb39360f7..9a5b702f5 100644 --- a/apps/client/src/app/components/user-account-settings/user-account-settings.html +++ b/apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -8,20 +8,12 @@