|
|
@ -20,7 +20,7 @@ import { translate } from '@ghostfolio/ui/i18n'; |
|
|
|
import { AssetClass, AssetSubClass, Tag, Type } from '@prisma/client'; |
|
|
|
import { isUUID } from 'class-validator'; |
|
|
|
import { EMPTY, Observable, Subject, lastValueFrom, of } from 'rxjs'; |
|
|
|
import { catchError, map, startWith, takeUntil } from 'rxjs/operators'; |
|
|
|
import { catchError, delay, map, startWith, takeUntil } from 'rxjs/operators'; |
|
|
|
|
|
|
|
import { CreateOrUpdateActivityDialogParams } from './interfaces/interfaces'; |
|
|
|
|
|
|
@ -139,7 +139,12 @@ export class CreateOrUpdateActivityDialog implements OnDestroy { |
|
|
|
}); |
|
|
|
|
|
|
|
this.activityForm.valueChanges |
|
|
|
.pipe(takeUntil(this.unsubscribeSubject)) |
|
|
|
.pipe( |
|
|
|
// Slightly delay until the more specific form control value changes have
|
|
|
|
// completed
|
|
|
|
delay(300), |
|
|
|
takeUntil(this.unsubscribeSubject) |
|
|
|
) |
|
|
|
.subscribe(async () => { |
|
|
|
let exchangeRateOfFee = 1; |
|
|
|
let exchangeRateOfUnitPrice = 1; |
|
|
@ -234,6 +239,23 @@ export class CreateOrUpdateActivityDialog implements OnDestroy { |
|
|
|
this.changeDetectorRef.markForCheck(); |
|
|
|
}); |
|
|
|
|
|
|
|
this.activityForm.controls['accountId'].valueChanges.subscribe( |
|
|
|
(accountId) => { |
|
|
|
const type = this.activityForm.controls['type'].value; |
|
|
|
|
|
|
|
if (type === 'FEE' || type === 'ITEM' || type === 'LIABILITY') { |
|
|
|
const currency = |
|
|
|
this.data.accounts.find(({ id }) => { |
|
|
|
return id === accountId; |
|
|
|
})?.currency ?? this.data.user.settings.baseCurrency; |
|
|
|
|
|
|
|
this.activityForm.controls['currency'].setValue(currency); |
|
|
|
this.activityForm.controls['currencyOfFee'].setValue(currency); |
|
|
|
this.activityForm.controls['currencyOfUnitPrice'].setValue(currency); |
|
|
|
} |
|
|
|
} |
|
|
|
); |
|
|
|
|
|
|
|
this.activityForm.controls['searchSymbol'].valueChanges.subscribe(() => { |
|
|
|
if (this.activityForm.controls['searchSymbol'].invalid) { |
|
|
|
this.data.activity.SymbolProfile = null; |
|
|
@ -269,19 +291,21 @@ export class CreateOrUpdateActivityDialog implements OnDestroy { |
|
|
|
Validators.required |
|
|
|
); |
|
|
|
this.activityForm.controls['accountId'].updateValueAndValidity(); |
|
|
|
this.activityForm.controls['currency'].setValue( |
|
|
|
this.data.user.settings.baseCurrency |
|
|
|
); |
|
|
|
this.activityForm.controls['currencyOfFee'].setValue( |
|
|
|
this.data.user.settings.baseCurrency |
|
|
|
); |
|
|
|
this.activityForm.controls['currencyOfUnitPrice'].setValue( |
|
|
|
this.data.user.settings.baseCurrency |
|
|
|
); |
|
|
|
|
|
|
|
const currency = |
|
|
|
this.data.accounts.find(({ id }) => { |
|
|
|
return id === this.activityForm.controls['accountId'].value; |
|
|
|
})?.currency ?? this.data.user.settings.baseCurrency; |
|
|
|
|
|
|
|
this.activityForm.controls['currency'].setValue(currency); |
|
|
|
this.activityForm.controls['currencyOfFee'].setValue(currency); |
|
|
|
this.activityForm.controls['currencyOfUnitPrice'].setValue(currency); |
|
|
|
|
|
|
|
this.activityForm.controls['dataSource'].removeValidators( |
|
|
|
Validators.required |
|
|
|
); |
|
|
|
this.activityForm.controls['dataSource'].updateValueAndValidity(); |
|
|
|
this.activityForm.controls['feeInCustomCurrency'].reset(); |
|
|
|
this.activityForm.controls['name'].setValidators(Validators.required); |
|
|
|
this.activityForm.controls['name'].updateValueAndValidity(); |
|
|
|
this.activityForm.controls['quantity'].setValue(1); |
|
|
@ -296,23 +320,25 @@ export class CreateOrUpdateActivityDialog implements OnDestroy { |
|
|
|
Validators.required |
|
|
|
); |
|
|
|
this.activityForm.controls['accountId'].updateValueAndValidity(); |
|
|
|
this.activityForm.controls['currency'].setValue( |
|
|
|
this.data.user.settings.baseCurrency |
|
|
|
); |
|
|
|
this.activityForm.controls['currencyOfFee'].setValue( |
|
|
|
this.data.user.settings.baseCurrency |
|
|
|
); |
|
|
|
this.activityForm.controls['currencyOfUnitPrice'].setValue( |
|
|
|
this.data.user.settings.baseCurrency |
|
|
|
); |
|
|
|
|
|
|
|
const currency = |
|
|
|
this.data.accounts.find(({ id }) => { |
|
|
|
return id === this.activityForm.controls['accountId'].value; |
|
|
|
})?.currency ?? this.data.user.settings.baseCurrency; |
|
|
|
|
|
|
|
this.activityForm.controls['currency'].setValue(currency); |
|
|
|
this.activityForm.controls['currencyOfFee'].setValue(currency); |
|
|
|
this.activityForm.controls['currencyOfUnitPrice'].setValue(currency); |
|
|
|
|
|
|
|
this.activityForm.controls['dataSource'].removeValidators( |
|
|
|
Validators.required |
|
|
|
); |
|
|
|
this.activityForm.controls['dataSource'].updateValueAndValidity(); |
|
|
|
|
|
|
|
if ( |
|
|
|
type === 'FEE' && |
|
|
|
this.activityForm.controls['feeInCustomCurrency'].value === 0 |
|
|
|
(type === 'FEE' && |
|
|
|
this.activityForm.controls['feeInCustomCurrency'].value === 0) || |
|
|
|
type === 'LIABILITY' |
|
|
|
) { |
|
|
|
this.activityForm.controls['feeInCustomCurrency'].reset(); |
|
|
|
} |
|
|
|