Browse Source

feat(client): resolve type errors in component

pull/6723/head
KenTandrian 1 month ago
parent
commit
700b806e9b
  1. 48
      apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts
  2. 10
      apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/interfaces/interfaces.ts

48
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.component.ts

@ -3,6 +3,7 @@ import {
ghostfolioPrefix, ghostfolioPrefix,
PROPERTY_CURRENCIES PROPERTY_CURRENCIES
} from '@ghostfolio/common/config'; } from '@ghostfolio/common/config';
import type { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
import { AdminService, DataService } from '@ghostfolio/ui/services'; import { AdminService, DataService } from '@ghostfolio/ui/services';
import { GfSymbolAutocompleteComponent } from '@ghostfolio/ui/symbol-autocomplete'; import { GfSymbolAutocompleteComponent } from '@ghostfolio/ui/symbol-autocomplete';
@ -18,7 +19,6 @@ import {
AbstractControl, AbstractControl,
FormBuilder, FormBuilder,
FormControl, FormControl,
FormGroup,
FormsModule, FormsModule,
ReactiveFormsModule, ReactiveFormsModule,
ValidationErrors, ValidationErrors,
@ -34,7 +34,10 @@ import { DataSource } from '@prisma/client';
import { isISO4217CurrencyCode } from 'class-validator'; import { isISO4217CurrencyCode } from 'class-validator';
import { switchMap } from 'rxjs'; import { switchMap } from 'rxjs';
import { CreateAssetProfileDialogMode } from './interfaces/interfaces'; import type {
CreateAssetProfileDialogMode,
CreateAssetProfileForm
} from './interfaces/interfaces';
@Component({ @Component({
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
@ -54,7 +57,7 @@ import { CreateAssetProfileDialogMode } from './interfaces/interfaces';
templateUrl: 'create-asset-profile-dialog.html' templateUrl: 'create-asset-profile-dialog.html'
}) })
export class GfCreateAssetProfileDialogComponent implements OnInit { export class GfCreateAssetProfileDialogComponent implements OnInit {
public createAssetProfileForm: FormGroup; public createAssetProfileForm: CreateAssetProfileForm;
public ghostfolioPrefix = `${ghostfolioPrefix}_`; public ghostfolioPrefix = `${ghostfolioPrefix}_`;
public mode: CreateAssetProfileDialogMode; public mode: CreateAssetProfileDialogMode;
@ -75,11 +78,13 @@ export class GfCreateAssetProfileDialogComponent implements OnInit {
this.createAssetProfileForm = this.formBuilder.group( this.createAssetProfileForm = this.formBuilder.group(
{ {
addCurrency: new FormControl(null, [ addCurrency: new FormControl<string | null>(null, [
this.iso4217CurrencyCodeValidator() this.iso4217CurrencyCodeValidator()
]), ]),
addSymbol: new FormControl(null, [Validators.required]), addSymbol: new FormControl<string | null>(null, [Validators.required]),
searchSymbol: new FormControl(null, [Validators.required]) searchSymbol: new FormControl<AssetProfileIdentifier | null>(null, [
Validators.required
])
}, },
{ {
validators: this.atLeastOneValid validators: this.atLeastOneValid
@ -104,12 +109,11 @@ export class GfCreateAssetProfileDialogComponent implements OnInit {
this.dialogRef.close({ this.dialogRef.close({
addAssetProfile: true, addAssetProfile: true,
dataSource: dataSource:
this.createAssetProfileForm.get('searchSymbol').value.dataSource, this.createAssetProfileForm.controls.searchSymbol.value?.dataSource,
symbol: this.createAssetProfileForm.get('searchSymbol').value.symbol symbol: this.createAssetProfileForm.controls.searchSymbol.value?.symbol
}); });
} else if (this.mode === 'currency') { } else if (this.mode === 'currency') {
const currency = this.createAssetProfileForm.get('addCurrency') const currency = this.createAssetProfileForm.controls.addCurrency.value;
.value as string;
const currencies = Array.from( const currencies = Array.from(
new Set([...this.customCurrencies, currency]) new Set([...this.customCurrencies, currency])
@ -139,14 +143,14 @@ export class GfCreateAssetProfileDialogComponent implements OnInit {
this.dialogRef.close({ this.dialogRef.close({
addAssetProfile: true, addAssetProfile: true,
dataSource: 'MANUAL', dataSource: 'MANUAL',
symbol: `${this.ghostfolioPrefix}${this.createAssetProfileForm.get('addSymbol').value}` symbol: `${this.ghostfolioPrefix}${this.createAssetProfileForm.controls.addSymbol.value}`
}); });
} }
} }
public get showCurrencyErrorMessage() { public get showCurrencyErrorMessage() {
const addCurrencyFormControl = const addCurrencyFormControl =
this.createAssetProfileForm.get('addCurrency'); this.createAssetProfileForm.controls.addCurrency;
if (addCurrencyFormControl.hasError('invalidCurrency')) { if (addCurrencyFormControl.hasError('invalidCurrency')) {
return true; return true;
@ -155,10 +159,10 @@ export class GfCreateAssetProfileDialogComponent implements OnInit {
return false; return false;
} }
private atLeastOneValid(control: AbstractControl): ValidationErrors { private atLeastOneValid(control: CreateAssetProfileForm): ValidationErrors {
const addCurrencyControl = control.get('addCurrency'); const addCurrencyControl = control.controls.addCurrency;
const addSymbolControl = control.get('addSymbol'); const addSymbolControl = control.controls.addSymbol;
const searchSymbolControl = control.get('searchSymbol'); const searchSymbolControl = control.controls.searchSymbol;
if ( if (
addCurrencyControl.valid && addCurrencyControl.valid &&
@ -170,11 +174,8 @@ export class GfCreateAssetProfileDialogComponent implements OnInit {
if ( if (
addCurrencyControl.valid || addCurrencyControl.valid ||
!addCurrencyControl ||
addSymbolControl.valid || addSymbolControl.valid ||
!addSymbolControl || searchSymbolControl.valid
searchSymbolControl.valid ||
!searchSymbolControl
) { ) {
return { atLeastOneValid: false }; return { atLeastOneValid: false };
} }
@ -189,11 +190,14 @@ export class GfCreateAssetProfileDialogComponent implements OnInit {
.subscribe(({ dataProviders, settings }) => { .subscribe(({ dataProviders, settings }) => {
this.customCurrencies = settings[PROPERTY_CURRENCIES] as string[]; this.customCurrencies = settings[PROPERTY_CURRENCIES] as string[];
const { dataSource } = dataProviders.find(({ useForExchangeRates }) => { const { dataSource } =
dataProviders.find(({ useForExchangeRates }) => {
return useForExchangeRates; return useForExchangeRates;
}); }) ?? {};
if (dataSource) {
this.dataSourceForExchangeRates = dataSource; this.dataSourceForExchangeRates = dataSource;
}
this.changeDetectorRef.markForCheck(); this.changeDetectorRef.markForCheck();
}); });

10
apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/interfaces/interfaces.ts

@ -1,6 +1,16 @@
import type { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
import type { FormControl, FormGroup } from '@angular/forms';
export interface CreateAssetProfileDialogParams { export interface CreateAssetProfileDialogParams {
deviceType: string; deviceType: string;
locale: string; locale: string;
} }
export type CreateAssetProfileDialogMode = 'auto' | 'currency' | 'manual'; export type CreateAssetProfileDialogMode = 'auto' | 'currency' | 'manual';
export type CreateAssetProfileForm = FormGroup<{
addCurrency: FormControl<string | null>;
addSymbol: FormControl<string | null>;
searchSymbol: FormControl<AssetProfileIdentifier | null>;
}>;

Loading…
Cancel
Save