Browse Source

Refactoring

pull/3230/head
Thomas Kaul 1 year ago
parent
commit
9cd48c5d4e
  1. 24
      apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts
  2. 24
      apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts
  3. 30
      apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html
  4. 19
      apps/client/src/app/util/form.util.ts

24
apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts

@ -103,7 +103,7 @@ export class CreateOrUpdateAccountDialog implements OnDestroy {
this.dialogRef.close();
}
public onSubmit() {
public async onSubmit() {
const account: CreateAccountDto | UpdateAccountDto = {
balance: this.accountForm.controls['balance'].value,
comment: this.accountForm.controls['comment'].value,
@ -116,19 +116,21 @@ export class CreateOrUpdateAccountDialog implements OnDestroy {
if (this.data.account.id) {
(account as UpdateAccountDto).id = this.data.account.id;
validateObjectForForm(account, UpdateAccountDto, this.accountForm).then(
() => {
this.dialogRef.close({ account });
}
);
await validateObjectForForm({
classDto: UpdateAccountDto,
form: this.accountForm,
object: account
});
} else {
delete (account as CreateAccountDto).id;
validateObjectForForm(account, CreateAccountDto, this.accountForm).then(
() => {
this.dialogRef.close({ account });
}
);
await validateObjectForForm({
classDto: CreateAccountDto,
form: this.accountForm,
object: account
});
}
this.dialogRef.close({ account });
}
public ngOnDestroy() {

24
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts

@ -452,7 +452,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
);
}
public onSubmit() {
public async onSubmit() {
const activity: CreateOrderDto | UpdateOrderDto = {
accountId: this.activityForm.controls['accountId'].value,
assetClass: this.activityForm.controls['assetClass'].value,
@ -477,20 +477,22 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
if (this.data.activity.id) {
(activity as UpdateOrderDto).id = this.data.activity.id;
validateObjectForForm(activity, UpdateOrderDto, this.activityForm).then(
() => {
this.dialogRef.close({ activity });
}
);
await validateObjectForForm({
classDto: UpdateOrderDto,
form: this.activityForm,
object: activity as UpdateOrderDto
});
} else {
(activity as CreateOrderDto).updateAccountBalance =
this.activityForm.controls['updateAccountBalance'].value;
validateObjectForForm(activity, CreateOrderDto, this.activityForm).then(
() => {
this.dialogRef.close({ activity });
}
);
await validateObjectForForm({
classDto: CreateOrderDto,
form: this.activityForm,
object: activity
});
}
this.dialogRef.close({ activity });
}
public ngOnDestroy() {

30
apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html

@ -153,11 +153,6 @@
<mat-form-field appearance="outline" class="w-100">
<mat-label i18n>Data Source</mat-label>
<input formControlName="dataSource" matInput />
<mat-error
*ngIf="activityForm.controls['dataSource'].errors?.validationError"
>
{{ activityForm.controls['dataSource'].errors?.validationError }}
</mat-error>
</mat-form-field>
</div>
<div class="mb-3">
@ -227,6 +222,20 @@
</mat-option>
</mat-select>
</div>
<mat-error
*ngIf="
activityForm.controls['unitPriceInCustomCurrency'].hasError(
'invalid'
)
"
><ng-container i18n
>Oops! Could not get the historical exchange rate
from</ng-container
>
{{
activityForm.controls['date']?.value | date: defaultDateFormat
}}</mat-error
>
</mat-form-field>
<button
*ngIf="
@ -283,6 +292,17 @@
>
{{ activityForm.controls['currencyOfUnitPrice'].value }}
</div>
<mat-error
*ngIf="
activityForm.controls['feeInCustomCurrency'].hasError('invalid')
"
><ng-container i18n
>Oops! Could not get the historical exchange rate from</ng-container
>
{{
activityForm.controls['date']?.value | date: defaultDateFormat
}}</mat-error
>
</mat-form-field>
</div>
<div class="d-none">

19
apps/client/src/app/util/form.util.ts

@ -2,18 +2,25 @@ import { FormGroup } from '@angular/forms';
import { plainToInstance } from 'class-transformer';
import { validate } from 'class-validator';
export async function validateObjectForForm<T>(
object: T,
classDto: { new (): T },
form: FormGroup
): Promise<void> {
export async function validateObjectForForm<T>({
classDto,
form,
object
}: {
classDto: { new (): T };
form: FormGroup;
object: T;
}): Promise<void> {
const objectInstance = plainToInstance(classDto, object);
const errors = await validate(objectInstance as object);
if (errors.length === 0) return Promise.resolve();
if (errors.length === 0) {
return Promise.resolve();
}
for (const error of errors) {
const formControl = form.get(error.property);
if (formControl) {
formControl.setErrors({
validationError: Object.values(error.constraints)[0]

Loading…
Cancel
Save