Refactor form controls to form getter (#3325)

pull/3324/head
Thomas Kaul 3 weeks ago committed by GitHub
parent 37871fbabc
commit 990028316e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -265,22 +265,22 @@ export class AssetProfileDialog implements OnDestroy, OnInit {
let symbolMapping = {}; let symbolMapping = {};
try { try {
countries = JSON.parse(this.assetProfileForm.controls['countries'].value); countries = JSON.parse(this.assetProfileForm.get('countries').value);
} catch {} } catch {}
try { try {
scraperConfiguration = JSON.parse( scraperConfiguration = JSON.parse(
this.assetProfileForm.controls['scraperConfiguration'].value this.assetProfileForm.get('scraperConfiguration').value
); );
} catch {} } catch {}
try { try {
sectors = JSON.parse(this.assetProfileForm.controls['sectors'].value); sectors = JSON.parse(this.assetProfileForm.get('sectors').value);
} catch {} } catch {}
try { try {
symbolMapping = JSON.parse( symbolMapping = JSON.parse(
this.assetProfileForm.controls['symbolMapping'].value this.assetProfileForm.get('symbolMapping').value
); );
} catch {} } catch {}
@ -289,14 +289,14 @@ export class AssetProfileDialog implements OnDestroy, OnInit {
scraperConfiguration, scraperConfiguration,
sectors, sectors,
symbolMapping, symbolMapping,
assetClass: this.assetProfileForm.controls['assetClass'].value, assetClass: this.assetProfileForm.get('assetClass').value,
assetSubClass: this.assetProfileForm.controls['assetSubClass'].value, assetSubClass: this.assetProfileForm.get('assetSubClass').value,
comment: this.assetProfileForm.controls['comment'].value ?? null, comment: this.assetProfileForm.get('comment').value ?? null,
currency: (<Currency>( currency: (<Currency>(
(<unknown>this.assetProfileForm.controls['currency'].value) (<unknown>this.assetProfileForm.get('currency').value)
))?.value, ))?.value,
name: this.assetProfileForm.controls['name'].value, name: this.assetProfileForm.get('name').value,
url: this.assetProfileForm.controls['url'].value url: this.assetProfileForm.get('url').value
}; };
this.adminService this.adminService
@ -314,8 +314,8 @@ export class AssetProfileDialog implements OnDestroy, OnInit {
this.adminService this.adminService
.testMarketData({ .testMarketData({
dataSource: this.data.dataSource, dataSource: this.data.dataSource,
scraperConfiguration: scraperConfiguration: this.assetProfileForm.get('scraperConfiguration')
this.assetProfileForm.controls['scraperConfiguration'].value, .value,
symbol: this.data.symbol symbol: this.data.symbol
}) })
.pipe( .pipe(
@ -331,9 +331,8 @@ export class AssetProfileDialog implements OnDestroy, OnInit {
' ' + ' ' +
price + price +
' ' + ' ' +
(<Currency>( (<Currency>(<unknown>this.assetProfileForm.get('currency').value))
(<unknown>this.assetProfileForm.controls['currency'].value) ?.value
))?.value
); );
}); });
} }

@ -302,7 +302,7 @@
mat-flat-button mat-flat-button
type="button" type="button"
[disabled]=" [disabled]="
assetProfileForm.controls['scraperConfiguration'].value === '{}' assetProfileForm.get('scraperConfiguration').value === '{}'
" "
(click)="onTestMarketData()" (click)="onTestMarketData()"
> >
@ -338,11 +338,11 @@
<mat-form-field appearance="outline" class="w-100 without-hint"> <mat-form-field appearance="outline" class="w-100 without-hint">
<mat-label i18n>Url</mat-label> <mat-label i18n>Url</mat-label>
<input formControlName="url" matInput type="text" /> <input formControlName="url" matInput type="text" />
@if (assetProfileForm.controls['url'].value) { @if (assetProfileForm.get('url').value) {
<gf-asset-profile-icon <gf-asset-profile-icon
class="mr-3" class="mr-3"
matSuffix matSuffix
[url]="assetProfileForm.controls['url'].value" [url]="assetProfileForm.get('url').value"
/> />
} }
</mat-form-field> </mat-form-field>

@ -59,14 +59,12 @@ export class CreateAssetProfileDialog implements OnInit, OnDestroy {
this.mode === 'auto' this.mode === 'auto'
? this.dialogRef.close({ ? this.dialogRef.close({
dataSource: dataSource:
this.createAssetProfileForm.controls['searchSymbol'].value this.createAssetProfileForm.get('searchSymbol').value.dataSource,
.dataSource, symbol: this.createAssetProfileForm.get('searchSymbol').value.symbol
symbol:
this.createAssetProfileForm.controls['searchSymbol'].value.symbol
}) })
: this.dialogRef.close({ : this.dialogRef.close({
dataSource: 'MANUAL', dataSource: 'MANUAL',
symbol: this.createAssetProfileForm.controls['addSymbol'].value symbol: this.createAssetProfileForm.get('addSymbol').value
}); });
} }

@ -67,9 +67,9 @@ export class CreateOrUpdateAccessDialog implements OnDestroy {
public onSubmit() { public onSubmit() {
const access: CreateAccessDto = { const access: CreateAccessDto = {
alias: this.accessForm.controls['alias'].value, alias: this.accessForm.get('alias').value,
granteeUserId: this.accessForm.controls['userId'].value, granteeUserId: this.accessForm.get('userId').value,
permissions: [this.accessForm.controls['permissions'].value] permissions: [this.accessForm.get('permissions').value]
}; };
this.dataService this.dataService

@ -27,7 +27,7 @@
</mat-form-field> </mat-form-field>
</div> </div>
@if (accessForm.controls['type'].value === 'PRIVATE') { @if (accessForm.get('type').value === 'PRIVATE') {
<div> <div>
<mat-form-field appearance="outline" class="w-100"> <mat-form-field appearance="outline" class="w-100">
<mat-label i18n>Permission</mat-label> <mat-label i18n>Permission</mat-label>

@ -82,7 +82,7 @@ export class CreateOrUpdateAccountDialog implements OnDestroy {
} }
public autoCompleteCheck() { public autoCompleteCheck() {
const inputValue = this.accountForm.controls['platformId'].value; const inputValue = this.accountForm.get('platformId').value;
if (typeof inputValue === 'string') { if (typeof inputValue === 'string') {
const matchingEntry = this.platforms.find(({ name }) => { const matchingEntry = this.platforms.find(({ name }) => {
@ -90,7 +90,7 @@ export class CreateOrUpdateAccountDialog implements OnDestroy {
}); });
if (matchingEntry) { if (matchingEntry) {
this.accountForm.controls['platformId'].setValue(matchingEntry); this.accountForm.get('platformId').setValue(matchingEntry);
} }
} }
} }
@ -105,13 +105,13 @@ export class CreateOrUpdateAccountDialog implements OnDestroy {
public async onSubmit() { public async onSubmit() {
const account: CreateAccountDto | UpdateAccountDto = { const account: CreateAccountDto | UpdateAccountDto = {
balance: this.accountForm.controls['balance'].value, balance: this.accountForm.get('balance').value,
comment: this.accountForm.controls['comment'].value, comment: this.accountForm.get('comment').value,
currency: this.accountForm.controls['currency'].value?.value, currency: this.accountForm.get('currency').value?.value,
id: this.accountForm.controls['accountId'].value, id: this.accountForm.get('accountId').value,
isExcluded: this.accountForm.controls['isExcluded'].value, isExcluded: this.accountForm.get('isExcluded').value,
name: this.accountForm.controls['name'].value, name: this.accountForm.get('name').value,
platformId: this.accountForm.controls['platformId'].value?.id ?? null platformId: this.accountForm.get('platformId').value?.id ?? null
}; };
try { try {

@ -39,7 +39,7 @@
(keydown.enter)="$event.stopPropagation()" (keydown.enter)="$event.stopPropagation()"
/> />
<span class="ml-2" matTextSuffix>{{ <span class="ml-2" matTextSuffix>{{
accountForm.controls['currency']?.value?.value accountForm.get('currency')?.value?.value
}}</span> }}</span>
</mat-form-field> </mat-form-field>
</div> </div>

@ -66,9 +66,9 @@ export class TransferBalanceDialog implements OnDestroy {
public onSubmit() { public onSubmit() {
const account: TransferBalanceDto = { const account: TransferBalanceDto = {
accountIdFrom: this.transferBalanceForm.controls['fromAccount'].value, accountIdFrom: this.transferBalanceForm.get('fromAccount').value,
accountIdTo: this.transferBalanceForm.controls['toAccount'].value, accountIdTo: this.transferBalanceForm.get('toAccount').value,
balance: this.transferBalanceForm.controls['balance'].value balance: this.transferBalanceForm.get('balance').value
}; };
this.dialogRef.close({ account }); this.dialogRef.close({ account });

@ -148,13 +148,14 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
.subscribe(async () => { .subscribe(async () => {
let exchangeRateOfUnitPrice = 1; let exchangeRateOfUnitPrice = 1;
this.activityForm.controls['feeInCustomCurrency'].setErrors(null); this.activityForm.get('feeInCustomCurrency').setErrors(null);
this.activityForm.controls['unitPriceInCustomCurrency'].setErrors(null); this.activityForm.get('unitPriceInCustomCurrency').setErrors(null);
const currency = this.activityForm.controls['currency'].value; const currency = this.activityForm.get('currency').value;
const currencyOfUnitPrice = const currencyOfUnitPrice = this.activityForm.get(
this.activityForm.controls['currencyOfUnitPrice'].value; 'currencyOfUnitPrice'
const date = this.activityForm.controls['date'].value; ).value;
const date = this.activityForm.get('date').value;
if ( if (
currency && currency &&
@ -174,104 +175,97 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
exchangeRateOfUnitPrice = marketPrice; exchangeRateOfUnitPrice = marketPrice;
} catch { } catch {
this.activityForm.controls['unitPriceInCustomCurrency'].setErrors({ this.activityForm.get('unitPriceInCustomCurrency').setErrors({
invalid: true invalid: true
}); });
} }
} }
const feeInCustomCurrency = const feeInCustomCurrency =
this.activityForm.controls['feeInCustomCurrency'].value * this.activityForm.get('feeInCustomCurrency').value *
exchangeRateOfUnitPrice; exchangeRateOfUnitPrice;
const unitPriceInCustomCurrency = const unitPriceInCustomCurrency =
this.activityForm.controls['unitPriceInCustomCurrency'].value * this.activityForm.get('unitPriceInCustomCurrency').value *
exchangeRateOfUnitPrice; exchangeRateOfUnitPrice;
this.activityForm.controls['fee'].setValue(feeInCustomCurrency, { this.activityForm.get('fee').setValue(feeInCustomCurrency, {
emitEvent: false emitEvent: false
}); });
this.activityForm.controls['unitPrice'].setValue( this.activityForm.get('unitPrice').setValue(unitPriceInCustomCurrency, {
unitPriceInCustomCurrency, emitEvent: false
{ });
emitEvent: false
}
);
if ( if (
this.activityForm.controls['type'].value === 'BUY' || this.activityForm.get('type').value === 'BUY' ||
this.activityForm.controls['type'].value === 'FEE' || this.activityForm.get('type').value === 'FEE' ||
this.activityForm.controls['type'].value === 'ITEM' this.activityForm.get('type').value === 'ITEM'
) { ) {
this.total = this.total =
this.activityForm.controls['quantity'].value * this.activityForm.get('quantity').value *
this.activityForm.controls['unitPrice'].value + this.activityForm.get('unitPrice').value +
this.activityForm.controls['fee'].value ?? 0; this.activityForm.get('fee').value ?? 0;
} else { } else {
this.total = this.total =
this.activityForm.controls['quantity'].value * this.activityForm.get('quantity').value *
this.activityForm.controls['unitPrice'].value - this.activityForm.get('unitPrice').value -
this.activityForm.controls['fee'].value ?? 0; this.activityForm.get('fee').value ?? 0;
} }
this.changeDetectorRef.markForCheck(); this.changeDetectorRef.markForCheck();
}); });
this.activityForm.controls['accountId'].valueChanges.subscribe( this.activityForm.get('accountId').valueChanges.subscribe((accountId) => {
(accountId) => { const type = this.activityForm.get('type').value;
const type = this.activityForm.controls['type'].value;
if ( if (
type === 'FEE' || type === 'FEE' ||
type === 'INTEREST' || type === 'INTEREST' ||
type === 'ITEM' || type === 'ITEM' ||
type === 'LIABILITY' type === 'LIABILITY'
) { ) {
const currency = const currency =
this.data.accounts.find(({ id }) => { this.data.accounts.find(({ id }) => {
return id === accountId; return id === accountId;
})?.currency ?? this.data.user.settings.baseCurrency; })?.currency ?? this.data.user.settings.baseCurrency;
this.activityForm.controls['currency'].setValue(currency); this.activityForm.get('currency').setValue(currency);
this.activityForm.controls['currencyOfUnitPrice'].setValue(currency); this.activityForm.get('currencyOfUnitPrice').setValue(currency);
if (['FEE', 'INTEREST'].includes(type)) { if (['FEE', 'INTEREST'].includes(type)) {
if (this.activityForm.controls['accountId'].value) { if (this.activityForm.get('accountId').value) {
this.activityForm.controls['updateAccountBalance'].enable(); this.activityForm.get('updateAccountBalance').enable();
} else { } else {
this.activityForm.controls['updateAccountBalance'].disable(); this.activityForm.get('updateAccountBalance').disable();
this.activityForm.controls['updateAccountBalance'].setValue( this.activityForm.get('updateAccountBalance').setValue(false);
false
);
}
} }
} }
} }
); });
this.activityForm.controls['date'].valueChanges.subscribe(() => { this.activityForm.get('date').valueChanges.subscribe(() => {
if (isToday(this.activityForm.controls['date'].value)) { if (isToday(this.activityForm.get('date').value)) {
this.activityForm.controls['updateAccountBalance'].enable(); this.activityForm.get('updateAccountBalance').enable();
} else { } else {
this.activityForm.controls['updateAccountBalance'].disable(); this.activityForm.get('updateAccountBalance').disable();
this.activityForm.controls['updateAccountBalance'].setValue(false); this.activityForm.get('updateAccountBalance').setValue(false);
} }
this.changeDetectorRef.markForCheck(); this.changeDetectorRef.markForCheck();
}); });
this.activityForm.controls['searchSymbol'].valueChanges.subscribe(() => { this.activityForm.get('searchSymbol').valueChanges.subscribe(() => {
if (this.activityForm.controls['searchSymbol'].invalid) { if (this.activityForm.get('searchSymbol').invalid) {
this.data.activity.SymbolProfile = null; this.data.activity.SymbolProfile = null;
} else if ( } else if (
['BUY', 'DIVIDEND', 'SELL'].includes( ['BUY', 'DIVIDEND', 'SELL'].includes(
this.activityForm.controls['type'].value this.activityForm.get('type').value
) )
) { ) {
this.activityForm.controls['dataSource'].setValue( this.activityForm
this.activityForm.controls['searchSymbol'].value.dataSource .get('dataSource')
); .setValue(this.activityForm.get('searchSymbol').value.dataSource);
this.updateSymbol(); this.updateSymbol();
} }
@ -282,130 +276,127 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
this.filteredTagsObservable = this.activityForm.controls[ this.filteredTagsObservable = this.activityForm.controls[
'tags' 'tags'
].valueChanges.pipe( ].valueChanges.pipe(
startWith(this.activityForm.controls['tags'].value), startWith(this.activityForm.get('tags').value),
map((aTags: Tag[] | null) => { map((aTags: Tag[] | null) => {
return aTags ? this.filterTags(aTags) : this.tags.slice(); return aTags ? this.filterTags(aTags) : this.tags.slice();
}) })
); );
this.activityForm.controls['type'].valueChanges this.activityForm
.pipe(takeUntil(this.unsubscribeSubject)) .get('type')
.valueChanges.pipe(takeUntil(this.unsubscribeSubject))
.subscribe((type: Type) => { .subscribe((type: Type) => {
if (type === 'ITEM') { if (type === 'ITEM') {
this.activityForm.controls['accountId'].removeValidators( this.activityForm
Validators.required .get('accountId')
); .removeValidators(Validators.required);
this.activityForm.controls['accountId'].updateValueAndValidity(); this.activityForm.get('accountId').updateValueAndValidity();
const currency = const currency =
this.data.accounts.find(({ id }) => { this.data.accounts.find(({ id }) => {
return id === this.activityForm.controls['accountId'].value; return id === this.activityForm.get('accountId').value;
})?.currency ?? this.data.user.settings.baseCurrency; })?.currency ?? this.data.user.settings.baseCurrency;
this.activityForm.controls['currency'].setValue(currency); this.activityForm.get('currency').setValue(currency);
this.activityForm.controls['currencyOfUnitPrice'].setValue(currency); this.activityForm.get('currencyOfUnitPrice').setValue(currency);
this.activityForm.controls['dataSource'].removeValidators( this.activityForm
Validators.required .get('dataSource')
); .removeValidators(Validators.required);
this.activityForm.controls['dataSource'].updateValueAndValidity(); this.activityForm.get('dataSource').updateValueAndValidity();
this.activityForm.controls['feeInCustomCurrency'].reset(); this.activityForm.get('feeInCustomCurrency').reset();
this.activityForm.controls['name'].setValidators(Validators.required); this.activityForm.get('name').setValidators(Validators.required);
this.activityForm.controls['name'].updateValueAndValidity(); this.activityForm.get('name').updateValueAndValidity();
this.activityForm.controls['quantity'].setValue(1); this.activityForm.get('quantity').setValue(1);
this.activityForm.controls['searchSymbol'].removeValidators( this.activityForm
Validators.required .get('searchSymbol')
); .removeValidators(Validators.required);
this.activityForm.controls['searchSymbol'].updateValueAndValidity(); this.activityForm.get('searchSymbol').updateValueAndValidity();
this.activityForm.controls['updateAccountBalance'].disable(); this.activityForm.get('updateAccountBalance').disable();
this.activityForm.controls['updateAccountBalance'].setValue(false); this.activityForm.get('updateAccountBalance').setValue(false);
} else if ( } else if (
type === 'FEE' || type === 'FEE' ||
type === 'INTEREST' || type === 'INTEREST' ||
type === 'LIABILITY' type === 'LIABILITY'
) { ) {
this.activityForm.controls['accountId'].removeValidators( this.activityForm
Validators.required .get('accountId')
); .removeValidators(Validators.required);
this.activityForm.controls['accountId'].updateValueAndValidity(); this.activityForm.get('accountId').updateValueAndValidity();
const currency = const currency =
this.data.accounts.find(({ id }) => { this.data.accounts.find(({ id }) => {
return id === this.activityForm.controls['accountId'].value; return id === this.activityForm.get('accountId').value;
})?.currency ?? this.data.user.settings.baseCurrency; })?.currency ?? this.data.user.settings.baseCurrency;
this.activityForm.controls['currency'].setValue(currency); this.activityForm.get('currency').setValue(currency);
this.activityForm.controls['currencyOfUnitPrice'].setValue(currency); this.activityForm.get('currencyOfUnitPrice').setValue(currency);
this.activityForm.controls['dataSource'].removeValidators( this.activityForm
Validators.required .get('dataSource')
); .removeValidators(Validators.required);
this.activityForm.controls['dataSource'].updateValueAndValidity(); this.activityForm.get('dataSource').updateValueAndValidity();
if ( if (
(type === 'FEE' && (type === 'FEE' &&
this.activityForm.controls['feeInCustomCurrency'].value === 0) || this.activityForm.get('feeInCustomCurrency').value === 0) ||
type === 'INTEREST' || type === 'INTEREST' ||
type === 'LIABILITY' type === 'LIABILITY'
) { ) {
this.activityForm.controls['feeInCustomCurrency'].reset(); this.activityForm.get('feeInCustomCurrency').reset();
} }
this.activityForm.controls['name'].setValidators(Validators.required); this.activityForm.get('name').setValidators(Validators.required);
this.activityForm.controls['name'].updateValueAndValidity(); this.activityForm.get('name').updateValueAndValidity();
if (type === 'FEE') { if (type === 'FEE') {
this.activityForm.controls['quantity'].setValue(0); this.activityForm.get('quantity').setValue(0);
} else if (type === 'INTEREST' || type === 'LIABILITY') { } else if (type === 'INTEREST' || type === 'LIABILITY') {
this.activityForm.controls['quantity'].setValue(1); this.activityForm.get('quantity').setValue(1);
} }
this.activityForm.controls['searchSymbol'].removeValidators( this.activityForm
Validators.required .get('searchSymbol')
); .removeValidators(Validators.required);
this.activityForm.controls['searchSymbol'].updateValueAndValidity(); this.activityForm.get('searchSymbol').updateValueAndValidity();
if (type === 'FEE') { if (type === 'FEE') {
this.activityForm.controls['unitPriceInCustomCurrency'].setValue(0); this.activityForm.get('unitPriceInCustomCurrency').setValue(0);
} }
if ( if (
['FEE', 'INTEREST'].includes(type) && ['FEE', 'INTEREST'].includes(type) &&
this.activityForm.controls['accountId'].value this.activityForm.get('accountId').value
) { ) {
this.activityForm.controls['updateAccountBalance'].enable(); this.activityForm.get('updateAccountBalance').enable();
} else { } else {
this.activityForm.controls['updateAccountBalance'].disable(); this.activityForm.get('updateAccountBalance').disable();
this.activityForm.controls['updateAccountBalance'].setValue(false); this.activityForm.get('updateAccountBalance').setValue(false);
} }
} else { } else {
this.activityForm.controls['accountId'].setValidators( this.activityForm.get('accountId').setValidators(Validators.required);
Validators.required this.activityForm.get('accountId').updateValueAndValidity();
); this.activityForm
this.activityForm.controls['accountId'].updateValueAndValidity(); .get('dataSource')
this.activityForm.controls['dataSource'].setValidators( .setValidators(Validators.required);
Validators.required this.activityForm.get('dataSource').updateValueAndValidity();
); this.activityForm.get('name').removeValidators(Validators.required);
this.activityForm.controls['dataSource'].updateValueAndValidity(); this.activityForm.get('name').updateValueAndValidity();
this.activityForm.controls['name'].removeValidators( this.activityForm
Validators.required .get('searchSymbol')
); .setValidators(Validators.required);
this.activityForm.controls['name'].updateValueAndValidity(); this.activityForm.get('searchSymbol').updateValueAndValidity();
this.activityForm.controls['searchSymbol'].setValidators( this.activityForm.get('updateAccountBalance').enable();
Validators.required
);
this.activityForm.controls['searchSymbol'].updateValueAndValidity();
this.activityForm.controls['updateAccountBalance'].enable();
} }
this.changeDetectorRef.markForCheck(); this.changeDetectorRef.markForCheck();
}); });
this.activityForm.controls['type'].setValue(this.data.activity?.type); this.activityForm.get('type').setValue(this.data.activity?.type);
if (this.data.activity?.id) { if (this.data.activity?.id) {
this.activityForm.controls['searchSymbol'].disable(); this.activityForm.get('searchSymbol').disable();
this.activityForm.controls['type'].disable(); this.activityForm.get('type').disable();
} }
if (this.data.activity?.SymbolProfile?.symbol) { if (this.data.activity?.SymbolProfile?.symbol) {
@ -425,14 +416,14 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
public applyCurrentMarketPrice() { public applyCurrentMarketPrice() {
this.activityForm.patchValue({ this.activityForm.patchValue({
currencyOfUnitPrice: this.activityForm.controls['currency'].value, currencyOfUnitPrice: this.activityForm.get('currency').value,
unitPriceInCustomCurrency: this.currentMarketPrice unitPriceInCustomCurrency: this.currentMarketPrice
}); });
} }
public onAddTag(event: MatAutocompleteSelectedEvent) { public onAddTag(event: MatAutocompleteSelectedEvent) {
this.activityForm.controls['tags'].setValue([ this.activityForm.get('tags').setValue([
...(this.activityForm.controls['tags'].value ?? []), ...(this.activityForm.get('tags').value ?? []),
this.tags.find(({ id }) => { this.tags.find(({ id }) => {
return id === event.option.value; return id === event.option.value;
}) })
@ -445,8 +436,8 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
} }
public onRemoveTag(aTag: Tag) { public onRemoveTag(aTag: Tag) {
this.activityForm.controls['tags'].setValue( this.activityForm.get('tags').setValue(
this.activityForm.controls['tags'].value.filter(({ id }) => { this.activityForm.get('tags').value.filter(({ id }) => {
return id !== aTag.id; return id !== aTag.id;
}) })
); );
@ -454,25 +445,24 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
public async onSubmit() { public async onSubmit() {
const activity: CreateOrderDto | UpdateOrderDto = { const activity: CreateOrderDto | UpdateOrderDto = {
accountId: this.activityForm.controls['accountId'].value, accountId: this.activityForm.get('accountId').value,
assetClass: this.activityForm.controls['assetClass'].value, assetClass: this.activityForm.get('assetClass').value,
assetSubClass: this.activityForm.controls['assetSubClass'].value, assetSubClass: this.activityForm.get('assetSubClass').value,
comment: this.activityForm.controls['comment'].value, comment: this.activityForm.get('comment').value,
currency: this.activityForm.controls['currency'].value, currency: this.activityForm.get('currency').value,
customCurrency: this.activityForm.controls['currencyOfUnitPrice'].value, customCurrency: this.activityForm.get('currencyOfUnitPrice').value,
date: this.activityForm.controls['date'].value, date: this.activityForm.get('date').value,
dataSource: this.activityForm.controls['dataSource'].value, dataSource: this.activityForm.get('dataSource').value,
fee: this.activityForm.controls['fee'].value, fee: this.activityForm.get('fee').value,
quantity: this.activityForm.controls['quantity'].value, quantity: this.activityForm.get('quantity').value,
symbol: symbol:
this.activityForm.controls['searchSymbol'].value?.symbol === this.activityForm.get('searchSymbol').value?.symbol === undefined ||
undefined || isUUID(this.activityForm.get('searchSymbol').value?.symbol)
isUUID(this.activityForm.controls['searchSymbol'].value?.symbol) ? this.activityForm.get('name').value
? this.activityForm.controls['name'].value : this.activityForm.get('searchSymbol').value.symbol,
: this.activityForm.controls['searchSymbol'].value.symbol, tags: this.activityForm.get('tags').value,
tags: this.activityForm.controls['tags'].value, type: this.activityForm.get('type').value,
type: this.activityForm.controls['type'].value, unitPrice: this.activityForm.get('unitPrice').value
unitPrice: this.activityForm.controls['unitPrice'].value
}; };
try { try {
@ -487,7 +477,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
}); });
} else { } else {
(activity as CreateOrderDto).updateAccountBalance = (activity as CreateOrderDto).updateAccountBalance =
this.activityForm.controls['updateAccountBalance'].value; this.activityForm.get('updateAccountBalance').value;
await validateObjectForForm({ await validateObjectForForm({
classDto: CreateOrderDto, classDto: CreateOrderDto,
@ -524,8 +514,8 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
this.dataService this.dataService
.fetchSymbolItem({ .fetchSymbolItem({
dataSource: this.activityForm.controls['dataSource'].value, dataSource: this.activityForm.get('dataSource').value,
symbol: this.activityForm.controls['searchSymbol'].value.symbol symbol: this.activityForm.get('searchSymbol').value.symbol
}) })
.pipe( .pipe(
catchError(() => { catchError(() => {
@ -540,9 +530,9 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
takeUntil(this.unsubscribeSubject) takeUntil(this.unsubscribeSubject)
) )
.subscribe(({ currency, dataSource, marketPrice }) => { .subscribe(({ currency, dataSource, marketPrice }) => {
this.activityForm.controls['currency'].setValue(currency); this.activityForm.get('currency').setValue(currency);
this.activityForm.controls['currencyOfUnitPrice'].setValue(currency); this.activityForm.get('currencyOfUnitPrice').setValue(currency);
this.activityForm.controls['dataSource'].setValue(dataSource); this.activityForm.get('dataSource').setValue(dataSource);
this.currentMarketPrice = marketPrice; this.currentMarketPrice = marketPrice;

@ -12,7 +12,7 @@
<mat-label i18n>Type</mat-label> <mat-label i18n>Type</mat-label>
<mat-select formControlName="type"> <mat-select formControlName="type">
<mat-select-trigger>{{ <mat-select-trigger>{{
typesTranslationMap[activityForm.controls['type'].value] typesTranslationMap[activityForm.get('type').value]
}}</mat-select-trigger> }}</mat-select-trigger>
<mat-option value="BUY"> <mat-option value="BUY">
<span <span
@ -83,9 +83,7 @@
<mat-select formControlName="accountId"> <mat-select formControlName="accountId">
<mat-option <mat-option
*ngIf=" *ngIf="
!activityForm.controls['accountId'].hasValidator( !activityForm.get('accountId').hasValidator(Validators.required)
Validators.required
)
" "
[value]="null" [value]="null"
/> />
@ -113,9 +111,9 @@
<div <div
class="mb-3" class="mb-3"
[ngClass]="{ [ngClass]="{
'd-none': !activityForm.controls['searchSymbol'].hasValidator( 'd-none': !activityForm
Validators.required .get('searchSymbol')
) .hasValidator(Validators.required)
}" }"
> >
<mat-form-field appearance="outline" class="w-100"> <mat-form-field appearance="outline" class="w-100">
@ -129,9 +127,7 @@
<div <div
class="mb-3" class="mb-3"
[ngClass]="{ [ngClass]="{
'd-none': !activityForm.controls['name'].hasValidator( 'd-none': !activityForm.get('name').hasValidator(Validators.required)
Validators.required
)
}" }"
> >
<mat-form-field appearance="outline" class="w-100"> <mat-form-field appearance="outline" class="w-100">
@ -173,10 +169,10 @@
class="mb-3" class="mb-3"
[ngClass]="{ [ngClass]="{
'd-none': 'd-none':
activityForm.controls['type']?.value === 'FEE' || activityForm.get('type')?.value === 'FEE' ||
activityForm.controls['type']?.value === 'INTEREST' || activityForm.get('type')?.value === 'INTEREST' ||
activityForm.controls['type']?.value === 'ITEM' || activityForm.get('type')?.value === 'ITEM' ||
activityForm.controls['type']?.value === 'LIABILITY' activityForm.get('type')?.value === 'LIABILITY'
}" }"
> >
<mat-form-field appearance="outline" class="w-100"> <mat-form-field appearance="outline" class="w-100">
@ -186,12 +182,12 @@
</div> </div>
<div <div
class="mb-3" class="mb-3"
[ngClass]="{ 'd-none': activityForm.controls['type']?.value === 'FEE' }" [ngClass]="{ 'd-none': activityForm.get('type')?.value === 'FEE' }"
> >
<div class="align-items-start d-flex"> <div class="align-items-start d-flex">
<mat-form-field appearance="outline" class="w-100"> <mat-form-field appearance="outline" class="w-100">
<mat-label <mat-label
><ng-container [ngSwitch]="activityForm.controls['type']?.value"> ><ng-container [ngSwitch]="activityForm.get('type')?.value">
<ng-container *ngSwitchCase="'DIVIDEND'" i18n <ng-container *ngSwitchCase="'DIVIDEND'" i18n
>Dividend</ng-container >Dividend</ng-container
> >
@ -211,7 +207,7 @@
<div <div
class="ml-2" class="ml-2"
matTextSuffix matTextSuffix
[ngClass]="{ 'd-none': !activityForm.controls['currency']?.value }" [ngClass]="{ 'd-none': !activityForm.get('currency')?.value }"
> >
<mat-select formControlName="currencyOfUnitPrice"> <mat-select formControlName="currencyOfUnitPrice">
<mat-option <mat-option
@ -224,16 +220,14 @@
</div> </div>
<mat-error <mat-error
*ngIf=" *ngIf="
activityForm.controls['unitPriceInCustomCurrency'].hasError( activityForm.get('unitPriceInCustomCurrency').hasError('invalid')
'invalid'
)
" "
><ng-container i18n ><ng-container i18n
>Oops! Could not get the historical exchange rate >Oops! Could not get the historical exchange rate
from</ng-container from</ng-container
> >
{{ {{
activityForm.controls['date']?.value | date: defaultDateFormat activityForm.get('date')?.value | date: defaultDateFormat
}}</mat-error }}</mat-error
> >
</mat-form-field> </mat-form-field>
@ -241,7 +235,7 @@
*ngIf=" *ngIf="
currentMarketPrice && currentMarketPrice &&
(data.activity.type === 'BUY' || data.activity.type === 'SELL') && (data.activity.type === 'BUY' || data.activity.type === 'SELL') &&
isToday(activityForm.controls['date']?.value) isToday(activityForm.get('date')?.value)
" "
class="ml-2 mt-1 no-min-width" class="ml-2 mt-1 no-min-width"
mat-button mat-button
@ -256,7 +250,7 @@
<div class="d-none"> <div class="d-none">
<mat-form-field appearance="outline" class="w-100"> <mat-form-field appearance="outline" class="w-100">
<mat-label <mat-label
><ng-container [ngSwitch]="activityForm.controls['type']?.value"> ><ng-container [ngSwitch]="activityForm.get('type')?.value">
<ng-container *ngSwitchCase="'DIVIDEND'" i18n <ng-container *ngSwitchCase="'DIVIDEND'" i18n
>Dividend</ng-container >Dividend</ng-container
> >
@ -269,7 +263,7 @@
</mat-label> </mat-label>
<input formControlName="unitPrice" matInput type="number" /> <input formControlName="unitPrice" matInput type="number" />
<span class="ml-2" matTextSuffix>{{ <span class="ml-2" matTextSuffix>{{
activityForm.controls['currency'].value activityForm.get('currency').value
}}</span> }}</span>
</mat-form-field> </mat-form-field>
</div> </div>
@ -277,9 +271,9 @@
class="mb-3" class="mb-3"
[ngClass]="{ [ngClass]="{
'd-none': 'd-none':
activityForm.controls['type']?.value === 'INTEREST' || activityForm.get('type')?.value === 'INTEREST' ||
activityForm.controls['type']?.value === 'ITEM' || activityForm.get('type')?.value === 'ITEM' ||
activityForm.controls['type']?.value === 'LIABILITY' activityForm.get('type')?.value === 'LIABILITY'
}" }"
> >
<mat-form-field appearance="outline" class="w-100"> <mat-form-field appearance="outline" class="w-100">
@ -288,19 +282,17 @@
<div <div
class="ml-2" class="ml-2"
matTextSuffix matTextSuffix
[ngClass]="{ 'd-none': !activityForm.controls['currency']?.value }" [ngClass]="{ 'd-none': !activityForm.get('currency')?.value }"
> >
{{ activityForm.controls['currencyOfUnitPrice'].value }} {{ activityForm.get('currencyOfUnitPrice').value }}
</div> </div>
<mat-error <mat-error
*ngIf=" *ngIf="activityForm.get('feeInCustomCurrency').hasError('invalid')"
activityForm.controls['feeInCustomCurrency'].hasError('invalid')
"
><ng-container i18n ><ng-container i18n
>Oops! Could not get the historical exchange rate from</ng-container >Oops! Could not get the historical exchange rate from</ng-container
> >
{{ {{
activityForm.controls['date']?.value | date: defaultDateFormat activityForm.get('date')?.value | date: defaultDateFormat
}}</mat-error }}</mat-error
> >
</mat-form-field> </mat-form-field>
@ -310,7 +302,7 @@
<mat-label i18n>Fee</mat-label> <mat-label i18n>Fee</mat-label>
<input formControlName="fee" matInput type="number" /> <input formControlName="fee" matInput type="number" />
<span class="ml-2" matTextSuffix>{{ <span class="ml-2" matTextSuffix>{{
activityForm.controls['currency'].value activityForm.get('currency').value
}}</span> }}</span>
</mat-form-field> </mat-form-field>
</div> </div>
@ -328,7 +320,7 @@
</div> </div>
<div <div
class="mb-3" class="mb-3"
[ngClass]="{ 'd-none': activityForm.controls['type']?.value !== 'ITEM' }" [ngClass]="{ 'd-none': activityForm.get('type')?.value !== 'ITEM' }"
> >
<mat-form-field appearance="outline" class="w-100"> <mat-form-field appearance="outline" class="w-100">
<mat-label i18n>Asset Class</mat-label> <mat-label i18n>Asset Class</mat-label>
@ -344,7 +336,7 @@
</div> </div>
<div <div
class="mb-3" class="mb-3"
[ngClass]="{ 'd-none': activityForm.controls['type']?.value !== 'ITEM' }" [ngClass]="{ 'd-none': activityForm.get('type')?.value !== 'ITEM' }"
> >
<mat-form-field appearance="outline" class="w-100"> <mat-form-field appearance="outline" class="w-100">
<mat-label i18n>Asset Sub Class</mat-label> <mat-label i18n>Asset Sub Class</mat-label>
@ -363,7 +355,7 @@
<mat-label i18n>Tags</mat-label> <mat-label i18n>Tags</mat-label>
<mat-chip-grid #tagsChipList> <mat-chip-grid #tagsChipList>
<mat-chip-row <mat-chip-row
*ngFor="let tag of activityForm.controls['tags']?.value" *ngFor="let tag of activityForm.get('tags')?.value"
matChipRemove matChipRemove
[removable]="true" [removable]="true"
(removed)="onRemoveTag(tag)" (removed)="onRemoveTag(tag)"
@ -399,8 +391,7 @@
[isCurrency]="true" [isCurrency]="true"
[locale]="data.user?.settings?.locale" [locale]="data.user?.settings?.locale"
[unit]=" [unit]="
activityForm.controls['currency']?.value ?? activityForm.get('currency')?.value ?? data.user?.settings?.baseCurrency
data.user?.settings?.baseCurrency
" "
[value]="total" [value]="total"
/> />

@ -85,7 +85,7 @@ export class ImportActivitiesDialog implements OnDestroy {
this.dialogTitle = $localize`Import Dividends`; this.dialogTitle = $localize`Import Dividends`;
this.mode = 'DIVIDEND'; this.mode = 'DIVIDEND';
this.uniqueAssetForm.controls['uniqueAsset'].disable(); this.uniqueAssetForm.get('uniqueAsset').disable();
this.dataService this.dataService
.fetchPositions({ .fetchPositions({
@ -102,7 +102,7 @@ export class ImportActivitiesDialog implements OnDestroy {
this.holdings = sortBy(positions, ({ name }) => { this.holdings = sortBy(positions, ({ name }) => {
return name.toLowerCase(); return name.toLowerCase();
}); });
this.uniqueAssetForm.controls['uniqueAsset'].enable(); this.uniqueAssetForm.get('uniqueAsset').enable();
this.isLoading = false; this.isLoading = false;
@ -167,10 +167,10 @@ export class ImportActivitiesDialog implements OnDestroy {
} }
public onLoadDividends(aStepper: MatStepper) { public onLoadDividends(aStepper: MatStepper) {
this.uniqueAssetForm.controls['uniqueAsset'].disable(); this.uniqueAssetForm.get('uniqueAsset').disable();
const { dataSource, symbol } = const { dataSource, symbol } =
this.uniqueAssetForm.controls['uniqueAsset'].value; this.uniqueAssetForm.get('uniqueAsset').value;
this.dataService this.dataService
.fetchDividendsImport({ .fetchDividendsImport({
@ -193,7 +193,7 @@ export class ImportActivitiesDialog implements OnDestroy {
this.details = []; this.details = [];
this.errorMessages = []; this.errorMessages = [];
this.importStep = ImportStep.SELECT_ACTIVITIES; this.importStep = ImportStep.SELECT_ACTIVITIES;
this.uniqueAssetForm.controls['uniqueAsset'].enable(); this.uniqueAssetForm.get('uniqueAsset').enable();
aStepper.reset(); aStepper.reset();
} }

@ -33,7 +33,7 @@
<mat-label i18n>Holding</mat-label> <mat-label i18n>Holding</mat-label>
<mat-select formControlName="uniqueAsset"> <mat-select formControlName="uniqueAsset">
<mat-select-trigger>{{ <mat-select-trigger>{{
uniqueAssetForm.controls['uniqueAsset']?.value?.name uniqueAssetForm.get('uniqueAsset')?.value?.name
}}</mat-select-trigger> }}</mat-select-trigger>
<mat-option <mat-option
*ngFor="let holding of holdings" *ngFor="let holding of holdings"

@ -31,10 +31,7 @@
<mat-form-field appearance="outline" class="w-100"> <mat-form-field appearance="outline" class="w-100">
<mat-label i18n>Retirement Date</mat-label> <mat-label i18n>Retirement Date</mat-label>
<div> <div>
{{ {{ calculatorForm.get('retirementDate').value | date: 'MMMM YYYY' }}
calculatorForm.controls['retirementDate'].value
| date: 'MMMM YYYY'
}}
</div> </div>
<input <input
class="d-none" class="d-none"

Loading…
Cancel
Save