Browse Source

Task/improve type safety of account detail dialog (#6731)

* feat(client): resolve type errors

* feat(client): migrate to inject function

* feat(client): tighten up encapsulation

* fix(client): remove unused activities
main
Kenrick Tandrian 16 hours ago
committed by GitHub
parent
commit
1f4427b0e7
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 97
      apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts

97
apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts

@ -12,7 +12,6 @@ import {
} from '@ghostfolio/common/interfaces'; } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { OrderWithAccount } from '@ghostfolio/common/types';
import { GfAccountBalancesComponent } from '@ghostfolio/ui/account-balances'; import { GfAccountBalancesComponent } from '@ghostfolio/ui/account-balances';
import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table'; import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table';
import { GfDialogFooterComponent } from '@ghostfolio/ui/dialog-footer'; import { GfDialogFooterComponent } from '@ghostfolio/ui/dialog-footer';
@ -27,7 +26,7 @@ import {
ChangeDetectorRef, ChangeDetectorRef,
Component, Component,
DestroyRef, DestroyRef,
Inject, inject,
OnInit OnInit
} from '@angular/core'; } from '@angular/core';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
@ -78,41 +77,42 @@ import { AccountDetailDialogParams } from './interfaces/interfaces';
templateUrl: 'account-detail-dialog.html' templateUrl: 'account-detail-dialog.html'
}) })
export class GfAccountDetailDialogComponent implements OnInit { export class GfAccountDetailDialogComponent implements OnInit {
public accountBalances: AccountBalancesResponse['balances']; protected accountBalances: AccountBalancesResponse['balances'];
public activities: OrderWithAccount[]; protected activitiesCount: number;
public activitiesCount: number; protected balance: number;
public balance: number; protected balancePrecision = 2;
public balancePrecision = 2; protected currency: string | null;
public currency: string; protected dataSource: MatTableDataSource<Activity>;
public dataSource: MatTableDataSource<Activity>; protected dividendInBaseCurrency: number;
public dividendInBaseCurrency: number; protected dividendInBaseCurrencyPrecision = 2;
public dividendInBaseCurrencyPrecision = 2; protected equity: number | null;
public equity: number; protected equityPrecision = 2;
public equityPrecision = 2; protected hasPermissionToDeleteAccountBalance: boolean;
public hasPermissionToDeleteAccountBalance: boolean; protected historicalDataItems: HistoricalDataItem[];
public historicalDataItems: HistoricalDataItem[]; protected holdings: PortfolioPosition[];
public holdings: PortfolioPosition[]; protected interestInBaseCurrency: number;
public interestInBaseCurrency: number; protected interestInBaseCurrencyPrecision = 2;
public interestInBaseCurrencyPrecision = 2; protected isLoadingActivities: boolean;
public isLoadingActivities: boolean; protected isLoadingChart: boolean;
public isLoadingChart: boolean; protected name: string | null;
public name: string; protected platformName: string;
public platformName: string; protected sortColumn = 'date';
public sortColumn = 'date'; protected sortDirection: SortDirection = 'desc';
public sortDirection: SortDirection = 'desc'; protected totalItems: number;
public totalItems: number; protected user: User;
public user: User; protected valueInBaseCurrency: number;
public valueInBaseCurrency: number;
protected readonly data = inject<AccountDetailDialogParams>(MAT_DIALOG_DATA);
public constructor(
private changeDetectorRef: ChangeDetectorRef, private readonly changeDetectorRef = inject(ChangeDetectorRef);
@Inject(MAT_DIALOG_DATA) public data: AccountDetailDialogParams, private readonly dataService = inject(DataService);
private dataService: DataService, private readonly destroyRef = inject(DestroyRef);
private destroyRef: DestroyRef, private readonly dialogRef =
public dialogRef: MatDialogRef<GfAccountDetailDialogComponent>, inject<MatDialogRef<GfAccountDetailDialogComponent>>(MatDialogRef);
private router: Router, private readonly router = inject(Router);
private userService: UserService private readonly userService = inject(UserService);
) {
public constructor() {
this.userService.stateChanged this.userService.stateChanged
.pipe(takeUntilDestroyed(this.destroyRef)) .pipe(takeUntilDestroyed(this.destroyRef))
.subscribe((state) => { .subscribe((state) => {
@ -135,7 +135,7 @@ export class GfAccountDetailDialogComponent implements OnInit {
this.initialize(); this.initialize();
} }
public onCloneActivity(aActivity: Activity) { protected onCloneActivity(aActivity: Activity) {
this.router.navigate( this.router.navigate(
internalRoutes.portfolio.subRoutes.activities.routerLink, internalRoutes.portfolio.subRoutes.activities.routerLink,
{ {
@ -146,11 +146,11 @@ export class GfAccountDetailDialogComponent implements OnInit {
this.dialogRef.close(); this.dialogRef.close();
} }
public onClose() { protected onClose() {
this.dialogRef.close(); this.dialogRef.close();
} }
public onAddAccountBalance(accountBalance: CreateAccountBalanceDto) { protected onAddAccountBalance(accountBalance: CreateAccountBalanceDto) {
this.dataService this.dataService
.postAccountBalance(accountBalance) .postAccountBalance(accountBalance)
.pipe(takeUntilDestroyed(this.destroyRef)) .pipe(takeUntilDestroyed(this.destroyRef))
@ -159,7 +159,7 @@ export class GfAccountDetailDialogComponent implements OnInit {
}); });
} }
public onDeleteAccountBalance(aId: string) { protected onDeleteAccountBalance(aId: string) {
this.dataService this.dataService
.deleteAccountBalance(aId) .deleteAccountBalance(aId)
.pipe(takeUntilDestroyed(this.destroyRef)) .pipe(takeUntilDestroyed(this.destroyRef))
@ -168,7 +168,7 @@ export class GfAccountDetailDialogComponent implements OnInit {
}); });
} }
public onExport() { protected onExport() {
const activityIds = this.dataSource.data.map(({ id }) => { const activityIds = this.dataSource.data.map(({ id }) => {
return id; return id;
}); });
@ -180,7 +180,7 @@ export class GfAccountDetailDialogComponent implements OnInit {
downloadAsFile({ downloadAsFile({
content: data, content: data,
fileName: `ghostfolio-export-${this.name fileName: `ghostfolio-export-${this.name
.replace(/\s+/g, '-') ?.replace(/\s+/g, '-')
.toLowerCase()}-${format( .toLowerCase()}-${format(
parseISO(data.meta.date), parseISO(data.meta.date),
'yyyyMMddHHmm' 'yyyyMMddHHmm'
@ -190,14 +190,14 @@ export class GfAccountDetailDialogComponent implements OnInit {
}); });
} }
public onSortChanged({ active, direction }: Sort) { protected onSortChanged({ active, direction }: Sort) {
this.sortColumn = active; this.sortColumn = active;
this.sortDirection = direction; this.sortDirection = direction;
this.fetchActivities(); this.fetchActivities();
} }
public onUpdateActivity(aActivity: Activity) { protected onUpdateActivity(aActivity: Activity) {
this.router.navigate( this.router.navigate(
internalRoutes.portfolio.subRoutes.activities.routerLink, internalRoutes.portfolio.subRoutes.activities.routerLink,
{ {
@ -208,7 +208,7 @@ export class GfAccountDetailDialogComponent implements OnInit {
this.dialogRef.close(); this.dialogRef.close();
} }
public showValuesInPercentage() { protected showValuesInPercentage() {
return ( return (
this.data.hasImpersonationId || this.user?.settings?.isRestrictedView this.data.hasImpersonationId || this.user?.settings?.isRestrictedView
); );
@ -330,7 +330,10 @@ export class GfAccountDetailDialogComponent implements OnInit {
next: ({ accountBalances, portfolioPerformance }) => { next: ({ accountBalances, portfolioPerformance }) => {
this.accountBalances = accountBalances.balances; this.accountBalances = accountBalances.balances;
if (portfolioPerformance.chart.length > 0) { if (
portfolioPerformance.chart &&
portfolioPerformance.chart.length > 0
) {
this.historicalDataItems = portfolioPerformance.chart.map( this.historicalDataItems = portfolioPerformance.chart.map(
({ date, netWorth, netWorthInPercentage }) => ({ ({ date, netWorth, netWorthInPercentage }) => ({
date, date,

Loading…
Cancel
Save