From 11cd4828021626a52550d3d7cf6e55d3bbbc9d39 Mon Sep 17 00:00:00 2001 From: Thomas <4159106+dtslvr@users.noreply.github.com> Date: Sat, 7 Oct 2023 14:26:29 +0200 Subject: [PATCH] Refactoring --- .../src/app/account/transfer-balance.dto.ts | 12 ++++ .../app/account/transfer-cash-balance.dto.ts | 15 ---- .../accounts-table.component.html | 11 +++ .../accounts-table.component.ts | 5 ++ .../pages/accounts/accounts-page.component.ts | 27 ++++++-- .../src/app/pages/accounts/accounts-page.html | 10 +-- .../pages/accounts/accounts-page.module.ts | 6 +- .../transfer-balance/interfaces/interfaces.ts | 5 ++ .../transfer-balance-dialog.component.ts | 69 +++++++++++++++++++ .../transfer-balance-dialog.html} | 29 ++++---- .../transfer-balance-dialog.module.ts} | 30 ++++---- .../transfer-balance-dialog.scss} | 0 .../interfaces/interfaces.ts | 5 -- .../transfer-cash-balance-dialog.component.ts | 69 ------------------- 14 files changed, 159 insertions(+), 134 deletions(-) create mode 100644 apps/api/src/app/account/transfer-balance.dto.ts delete mode 100644 apps/api/src/app/account/transfer-cash-balance.dto.ts create mode 100644 apps/client/src/app/pages/accounts/transfer-balance/interfaces/interfaces.ts create mode 100644 apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.component.ts rename apps/client/src/app/pages/accounts/{transfer-cash-balance/transfer-cash-balance-dialog.html => transfer-balance/transfer-balance-dialog.html} (66%) rename apps/client/src/app/pages/accounts/{transfer-cash-balance/transfer-cash-balance-dialog.module.ts => transfer-balance/transfer-balance-dialog.module.ts} (54%) rename apps/client/src/app/pages/accounts/{transfer-cash-balance/transfer-cash-balance-dialog.scss => transfer-balance/transfer-balance-dialog.scss} (100%) delete mode 100644 apps/client/src/app/pages/accounts/transfer-cash-balance/interfaces/interfaces.ts delete mode 100644 apps/client/src/app/pages/accounts/transfer-cash-balance/transfer-cash-balance-dialog.component.ts diff --git a/apps/api/src/app/account/transfer-balance.dto.ts b/apps/api/src/app/account/transfer-balance.dto.ts new file mode 100644 index 000000000..fb602033e --- /dev/null +++ b/apps/api/src/app/account/transfer-balance.dto.ts @@ -0,0 +1,12 @@ +import { IsNumber, IsString } from 'class-validator'; + +export class TransferBalanceDto { + @IsString() + accountIdFrom: string; + + @IsString() + accountIdTo: string; + + @IsNumber() + balance: number; +} diff --git a/apps/api/src/app/account/transfer-cash-balance.dto.ts b/apps/api/src/app/account/transfer-cash-balance.dto.ts deleted file mode 100644 index 7fe08ecec..000000000 --- a/apps/api/src/app/account/transfer-cash-balance.dto.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { - IsNumber, - IsString, -} from 'class-validator'; - -export class TransferCashBalanceDto { - @IsString() - accountIdFrom: string; - - @IsString() - accountIdTo: string; - - @IsNumber() - balance: number; -} diff --git a/apps/client/src/app/components/accounts-table/accounts-table.component.html b/apps/client/src/app/components/accounts-table/accounts-table.component.html index d3ece8977..664694735 100644 --- a/apps/client/src/app/components/accounts-table/accounts-table.component.html +++ b/apps/client/src/app/components/accounts-table/accounts-table.component.html @@ -1,3 +1,14 @@ +
+ +
+
(); @Output() accountToUpdate = new EventEmitter(); + @Output() transferBalance = new EventEmitter(); @ViewChild(MatSort) sort: MatSort; @@ -97,6 +98,10 @@ export class AccountsTableComponent implements OnChanges, OnDestroy, OnInit { alert(aComment); } + public onTransferBalance() { + this.transferBalance.emit(); + } + public onUpdateAccount(aAccount: AccountModel) { this.accountToUpdate.emit(aAccount); } diff --git a/apps/client/src/app/pages/accounts/accounts-page.component.ts b/apps/client/src/app/pages/accounts/accounts-page.component.ts index 7471b6244..18d5d1e2a 100644 --- a/apps/client/src/app/pages/accounts/accounts-page.component.ts +++ b/apps/client/src/app/pages/accounts/accounts-page.component.ts @@ -2,6 +2,7 @@ import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; import { ActivatedRoute, Router } from '@angular/router'; import { CreateAccountDto } from '@ghostfolio/api/app/account/create-account.dto'; +import { TransferBalanceDto } from '@ghostfolio/api/app/account/transfer-balance.dto'; import { UpdateAccountDto } from '@ghostfolio/api/app/account/update-account.dto'; import { AccountDetailDialog } from '@ghostfolio/client/components/account-detail-dialog/account-detail-dialog.component'; import { AccountDetailDialogParams } from '@ghostfolio/client/components/account-detail-dialog/interfaces/interfaces'; @@ -16,7 +17,7 @@ import { Subject, Subscription } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { CreateOrUpdateAccountDialog } from './create-or-update-account-dialog/create-or-update-account-dialog.component'; -import { TransferCashBalanceDialog } from './transfer-cash-balance/transfer-cash-balance-dialog.component'; +import { TransferBalanceDialog } from './transfer-balance/transfer-balance-dialog.component'; @Component({ host: { class: 'page' }, @@ -68,9 +69,8 @@ export class AccountsPageComponent implements OnDestroy, OnInit { } else { this.router.navigate(['.'], { relativeTo: this.route }); } - } - else if (params['transferBalanceDialog']) { - this.openTransferCashBalanceDialog(); + } else if (params['transferBalanceDialog']) { + this.openTransferBalanceDialog(); } }); } @@ -148,6 +148,12 @@ export class AccountsPageComponent implements OnDestroy, OnInit { }); } + public onTransferBalance() { + this.router.navigate([], { + queryParams: { transferBalanceDialog: true } + }); + } + public onUpdateAccount(aAccount: AccountModel) { this.router.navigate([], { queryParams: { accountId: aAccount.id, editDialog: true } @@ -272,8 +278,8 @@ export class AccountsPageComponent implements OnDestroy, OnInit { }); } - private openTransferCashBalanceDialog(): void { - const dialogRef = this.dialog.open(TransferCashBalanceDialog, { + private openTransferBalanceDialog(): void { + const dialogRef = this.dialog.open(TransferBalanceDialog, { data: { accounts: this.accounts }, @@ -285,6 +291,15 @@ export class AccountsPageComponent implements OnDestroy, OnInit { .afterClosed() .pipe(takeUntil(this.unsubscribeSubject)) .subscribe((data: any) => { + if (data) { + const { accountIdFrom, accountIdTo, balance }: TransferBalanceDto = + data?.account; + + console.log( + `Transfer cash balance of ${balance} from account ${accountIdFrom} to account ${accountIdTo}` + ); + } + this.router.navigate(['.'], { relativeTo: this.route }); }); } diff --git a/apps/client/src/app/pages/accounts/accounts-page.html b/apps/client/src/app/pages/accounts/accounts-page.html index 9d3cc6c66..b456baef6 100644 --- a/apps/client/src/app/pages/accounts/accounts-page.html +++ b/apps/client/src/app/pages/accounts/accounts-page.html @@ -14,6 +14,7 @@ [transactionCount]="transactionCount" (accountDeleted)="onDeleteAccount($event)" (accountToUpdate)="onUpdateAccount($event)" + (transferBalance)="onTransferBalance()" > @@ -32,14 +33,5 @@ > - - - diff --git a/apps/client/src/app/pages/accounts/accounts-page.module.ts b/apps/client/src/app/pages/accounts/accounts-page.module.ts index 028c016a5..7de50983c 100644 --- a/apps/client/src/app/pages/accounts/accounts-page.module.ts +++ b/apps/client/src/app/pages/accounts/accounts-page.module.ts @@ -8,7 +8,7 @@ import { GfAccountsTableModule } from '@ghostfolio/client/components/accounts-ta import { AccountsPageRoutingModule } from './accounts-page-routing.module'; import { AccountsPageComponent } from './accounts-page.component'; import { GfCreateOrUpdateAccountDialogModule } from './create-or-update-account-dialog/create-or-update-account-dialog.module'; -import { GfTransferCashBalanceDialogModule } from './transfer-cash-balance/transfer-cash-balance-dialog.module'; +import { GfTransferBalanceDialogModule } from './transfer-balance/transfer-balance-dialog.module'; @NgModule({ declarations: [AccountsPageComponent], @@ -18,10 +18,10 @@ import { GfTransferCashBalanceDialogModule } from './transfer-cash-balance/trans GfAccountDetailDialogModule, GfAccountsTableModule, GfCreateOrUpdateAccountDialogModule, - GfTransferCashBalanceDialogModule, + GfTransferBalanceDialogModule, MatButtonModule, RouterModule ], schemas: [CUSTOM_ELEMENTS_SCHEMA] }) -export class AccountsPageModule { } +export class AccountsPageModule {} diff --git a/apps/client/src/app/pages/accounts/transfer-balance/interfaces/interfaces.ts b/apps/client/src/app/pages/accounts/transfer-balance/interfaces/interfaces.ts new file mode 100644 index 000000000..3a0b921fd --- /dev/null +++ b/apps/client/src/app/pages/accounts/transfer-balance/interfaces/interfaces.ts @@ -0,0 +1,5 @@ +import { Account } from '@prisma/client'; + +export interface TransferBalanceDialogParams { + accounts: Account[]; +} diff --git a/apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.component.ts b/apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.component.ts new file mode 100644 index 000000000..695df571d --- /dev/null +++ b/apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.component.ts @@ -0,0 +1,69 @@ +import { + ChangeDetectionStrategy, + Component, + Inject, + OnDestroy +} from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { TransferBalanceDto } from '@ghostfolio/api/app/account/transfer-balance.dto'; +import { Account as AccountModel } from '@prisma/client'; +import { Subject } from 'rxjs'; + +import { TransferBalanceDialogParams } from './interfaces/interfaces'; + +@Component({ + host: { class: 'h-100' }, + selector: 'gf-transfer-balance-dialog', + changeDetection: ChangeDetectionStrategy.OnPush, + styleUrls: ['./transfer-balance-dialog.scss'], + templateUrl: 'transfer-balance-dialog.html' +}) +export class TransferBalanceDialog implements OnDestroy { + public accounts: AccountModel[] = []; + public currency: string; + public transferBalanceForm: FormGroup; + + private unsubscribeSubject = new Subject(); + + public constructor( + @Inject(MAT_DIALOG_DATA) public data: TransferBalanceDialogParams, + public dialogRef: MatDialogRef, + private formBuilder: FormBuilder + ) {} + + ngOnInit() { + this.accounts = this.data.accounts; + + this.transferBalanceForm = this.formBuilder.group({ + balance: [0, Validators.required], + fromAccount: ['', Validators.required], + toAccount: ['', Validators.required] + }); + + this.transferBalanceForm.get('fromAccount').valueChanges.subscribe((id) => { + this.currency = this.accounts.find((account) => { + return account.id === id; + }).currency; + }); + } + + public onCancel() { + this.dialogRef.close(); + } + + public onSubmit() { + const account: TransferBalanceDto = { + accountIdFrom: this.transferBalanceForm.controls['fromAccount'].value, + accountIdTo: this.transferBalanceForm.controls['toAccount'].value, + balance: this.transferBalanceForm.controls['balance'].value + }; + + this.dialogRef.close({ account }); + } + + public ngOnDestroy() { + this.unsubscribeSubject.next(); + this.unsubscribeSubject.complete(); + } +} diff --git a/apps/client/src/app/pages/accounts/transfer-cash-balance/transfer-cash-balance-dialog.html b/apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html similarity index 66% rename from apps/client/src/app/pages/accounts/transfer-cash-balance/transfer-cash-balance-dialog.html rename to apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html index 8fe83a197..9cce7b87a 100644 --- a/apps/client/src/app/pages/accounts/transfer-cash-balance/transfer-cash-balance-dialog.html +++ b/apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.html @@ -1,18 +1,11 @@

Transfer Cash Balance

-
- - Value - - {{ currency }} - -
From @@ -22,7 +15,7 @@ > -
+
To @@ -33,14 +26,26 @@
+
+ + Value + + {{ currency }} + +
- + diff --git a/apps/client/src/app/pages/accounts/transfer-cash-balance/transfer-cash-balance-dialog.module.ts b/apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.module.ts similarity index 54% rename from apps/client/src/app/pages/accounts/transfer-cash-balance/transfer-cash-balance-dialog.module.ts rename to apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.module.ts index 99e84afa2..5a56b5810 100644 --- a/apps/client/src/app/pages/accounts/transfer-cash-balance/transfer-cash-balance-dialog.module.ts +++ b/apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.module.ts @@ -1,24 +1,24 @@ +import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MatButtonModule } from '@angular/material/button'; import { MatDialogModule } from '@angular/material/dialog'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; import { MatSelectModule } from '@angular/material/select'; -import { TransferCashBalanceDialog } from './transfer-cash-balance-dialog.component'; -import { ReactiveFormsModule } from '@angular/forms'; -import { CommonModule } from '@angular/common'; -import { MatButtonModule } from '@angular/material/button'; +import { TransferBalanceDialog } from './transfer-balance-dialog.component'; @NgModule({ - declarations: [TransferCashBalanceDialog], - imports: [ - CommonModule, - MatButtonModule, - MatDialogModule, - MatFormFieldModule, - MatInputModule, - MatSelectModule, - ReactiveFormsModule - ] + declarations: [TransferBalanceDialog], + imports: [ + CommonModule, + MatButtonModule, + MatDialogModule, + MatFormFieldModule, + MatInputModule, + MatSelectModule, + ReactiveFormsModule + ] }) -export class GfTransferCashBalanceDialogModule { } +export class GfTransferBalanceDialogModule {} diff --git a/apps/client/src/app/pages/accounts/transfer-cash-balance/transfer-cash-balance-dialog.scss b/apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.scss similarity index 100% rename from apps/client/src/app/pages/accounts/transfer-cash-balance/transfer-cash-balance-dialog.scss rename to apps/client/src/app/pages/accounts/transfer-balance/transfer-balance-dialog.scss diff --git a/apps/client/src/app/pages/accounts/transfer-cash-balance/interfaces/interfaces.ts b/apps/client/src/app/pages/accounts/transfer-cash-balance/interfaces/interfaces.ts deleted file mode 100644 index b3e2649c4..000000000 --- a/apps/client/src/app/pages/accounts/transfer-cash-balance/interfaces/interfaces.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Account } from '@prisma/client'; - -export interface TransferCashBalanceDialogParams { - accounts: Account[]; -} diff --git a/apps/client/src/app/pages/accounts/transfer-cash-balance/transfer-cash-balance-dialog.component.ts b/apps/client/src/app/pages/accounts/transfer-cash-balance/transfer-cash-balance-dialog.component.ts deleted file mode 100644 index 0b36ef5cf..000000000 --- a/apps/client/src/app/pages/accounts/transfer-cash-balance/transfer-cash-balance-dialog.component.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { - ChangeDetectionStrategy, - Component, - Inject, - OnDestroy -} from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; -import { TransferCashBalanceDto } from '@ghostfolio/api/app/account/transfer-cash-balance.dto'; -import { Subject } from 'rxjs'; -import { Account as AccountModel } from '@prisma/client'; -import { TransferCashBalanceDialogParams } from './interfaces/interfaces'; - -@Component({ - host: { class: 'h-100' }, - selector: 'gf-transfer-cash-balance-dialog', - changeDetection: ChangeDetectionStrategy.OnPush, - styleUrls: ['./transfer-cash-balance-dialog.scss'], - templateUrl: 'transfer-cash-balance-dialog.html' -}) -export class TransferCashBalanceDialog implements OnDestroy { - public accounts: AccountModel[] = []; - public currency = ''; - public transferCashBalanceForm: FormGroup; - - private unsubscribeSubject = new Subject(); - - public constructor( - @Inject(MAT_DIALOG_DATA) public data: TransferCashBalanceDialogParams, - public dialogRef: MatDialogRef, - private formBuilder: FormBuilder - ) { } - - ngOnInit() { - - this.accounts = this.data.accounts; - - this.transferCashBalanceForm = this.formBuilder.group({ - balance: [0, Validators.required], - fromAccount: ['', Validators.required], - toAccount: ['', Validators.required], - }); - - this.transferCashBalanceForm.get('fromAccount').valueChanges.subscribe((id) => { - this.currency = this.accounts.find((account) => account.id === id).currency; - }) - } - - public onCancel() { - this.dialogRef.close(); - } - - public onSubmit() { - const account: TransferCashBalanceDto = { - balance: this.transferCashBalanceForm.controls['balance'].value, - accountIdFrom: this.transferCashBalanceForm.controls['fromAccount'].value, - accountIdTo: this.transferCashBalanceForm.controls['toAccount'].value, - }; - - console.log(`Transfer cash balance of ${account.balance} from account ${account.accountIdFrom} to account ${account.accountIdTo}`) - - this.dialogRef.close({ account }); - } - - public ngOnDestroy() { - this.unsubscribeSubject.next(); - this.unsubscribeSubject.complete(); - } -}