Browse Source

Improve usability by collapsing breakdowns

pull/7536/head
Thomas Kaul 4 weeks ago
parent
commit
31d4c0019b
  1. 34
      apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html
  2. 17
      apps/client/src/app/components/portfolio-summary/portfolio-summary.component.scss
  3. 25
      apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts

34
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html

@ -164,7 +164,20 @@
</div>
</div>
<div class="flex-nowrap px-3 py-1 row">
<div class="align-items-center d-flex flex-grow-1 indent-1">
<div
class="align-items-center d-flex flex-grow-1 indent-1"
[class.cursor-pointer]="hasHoldingsBreakdown"
(click)="onToggleHoldings()"
>
@if (hasHoldingsBreakdown) {
<span class="caret-container">
<ion-icon
class="caret text-muted"
name="caret-forward-outline"
[class.caret-expanded]="isHoldingsExpanded"
/>
</span>
}
<ng-container i18n>Holdings</ng-container>
@if (
!hasImpersonationId &&
@ -192,7 +205,7 @@
/>
</div>
</div>
@if (isLoading || summary?.emergencyFund?.assets > 0) {
@if (hasHoldingsBreakdown && isHoldingsExpanded) {
<div class="flex-nowrap px-3 py-1 row">
<div class="flex-grow-1 indent-2 text-truncate" i18n>Investments</div>
<div class="flex-column flex-wrap justify-content-end">
@ -223,7 +236,20 @@
</div>
}
<div class="flex-nowrap px-3 py-1 row">
<div class="align-items-center d-flex flex-grow-1 indent-1">
<div
class="align-items-center d-flex flex-grow-1 indent-1"
[class.cursor-pointer]="hasCashBreakdown"
(click)="onToggleCash()"
>
@if (hasCashBreakdown) {
<span class="caret-container">
<ion-icon
class="caret text-muted"
name="caret-forward-outline"
[class.caret-expanded]="isCashExpanded"
/>
</span>
}
<ng-container i18n>Cash</ng-container>
@if (
!hasImpersonationId &&
@ -251,7 +277,7 @@
/>
</div>
</div>
@if (isLoading || summary?.emergencyFund?.cash > 0) {
@if (hasCashBreakdown && isCashExpanded) {
<div class="flex-nowrap px-3 py-1 row">
<div class="flex-grow-1 indent-2 text-truncate" i18n>Buying Power</div>
<div class="flex-column flex-wrap justify-content-end">

17
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.scss

@ -1,6 +1,23 @@
:host {
display: block;
.caret-container {
align-items: center;
display: inline-flex;
justify-content: center;
margin-left: -1rem;
width: 1rem;
.caret {
font-size: 0.7rem;
transition: transform 150ms ease-in-out;
&.caret-expanded {
transform: rotate(90deg);
}
}
}
.indent-1 {
margin-left: 1rem;
}

25
apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts

@ -18,6 +18,7 @@ import { IonIcon } from '@ionic/angular/standalone';
import { formatDistanceToNow } from 'date-fns';
import { addIcons } from 'ionicons';
import {
caretForwardOutline,
ellipsisHorizontalCircleOutline,
informationCircleOutline
} from 'ionicons/icons';
@ -47,13 +48,19 @@ export class GfPortfolioSummaryComponent implements OnChanges {
'BUY_AND_SELL_ACTIVITIES_TOOLTIP'
);
protected isCashExpanded = false;
protected isHoldingsExpanded = false;
protected precision = 2;
protected timeInMarket: string | undefined;
private readonly notificationService = inject(NotificationService);
public constructor() {
addIcons({ ellipsisHorizontalCircleOutline, informationCircleOutline });
addIcons({
caretForwardOutline,
ellipsisHorizontalCircleOutline,
informationCircleOutline
});
}
protected get cashPercentage() {
@ -77,6 +84,14 @@ export class GfPortfolioSummaryComponent implements OnChanges {
: 0;
}
protected get hasCashBreakdown() {
return this.isLoading || this.summary?.emergencyFund?.cash > 0;
}
protected get hasHoldingsBreakdown() {
return this.isLoading || this.summary?.emergencyFund?.assets > 0;
}
protected get holdingsInBaseCurrency() {
if (
!isNumber(this.summary?.totalAssetsInBaseCurrency) ||
@ -145,4 +160,12 @@ export class GfPortfolioSummaryComponent implements OnChanges {
title: $localize`Please set the amount of your emergency fund.`
});
}
protected onToggleCash() {
this.isCashExpanded = !this.isCashExpanded;
}
protected onToggleHoldings() {
this.isHoldingsExpanded = !this.isHoldingsExpanded;
}
}

Loading…
Cancel
Save