mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
321 lines
9.4 KiB
321 lines
9.4 KiB
<div class="container p-0">
|
|
<div class="flex-nowrap px-3 py-1 row">
|
|
<div class="flex-grow-1 text-truncate" i18n>Time in Market</div>
|
|
<div class="justify-content-end">
|
|
<gf-value class="justify-content-end" [value]="timeInMarket" />
|
|
</div>
|
|
</div>
|
|
<div
|
|
class="flex-nowrap px-3 py-1 row"
|
|
[hidden]="summary?.activityCount === null"
|
|
>
|
|
<div class="d-flex flex-grow-1 ml-3 text-truncate">
|
|
{{ summary?.activityCount }}
|
|
<ng-container i18n>{summary?.activityCount, plural,
|
|
=1 {activity}
|
|
other {activities}
|
|
}</ng-container>
|
|
<span
|
|
class="align-items-center d-flex ml-1"
|
|
matTooltipPosition="above"
|
|
[matTooltip]="buyAndSellActivitiesTooltip"
|
|
>
|
|
<ion-icon name="information-circle-outline" />
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col"><hr /></div>
|
|
</div>
|
|
<div class="flex-nowrap px-3 py-1 row">
|
|
<div class="flex-grow-1 text-truncate" i18n>Buy</div>
|
|
<div class="justify-content-end">
|
|
<gf-value
|
|
class="justify-content-end"
|
|
[isCurrency]="true"
|
|
[locale]="locale"
|
|
[unit]="baseCurrency"
|
|
[value]="isLoading ? undefined : summary?.totalBuy"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="flex-nowrap px-3 py-1 row">
|
|
<div class="flex-grow-1 text-truncate" i18n>Sell</div>
|
|
<div class="justify-content-end">
|
|
<gf-value
|
|
class="justify-content-end"
|
|
[isCurrency]="true"
|
|
[locale]="locale"
|
|
[unit]="baseCurrency"
|
|
[value]="isLoading ? undefined : summary?.totalSell"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col"><hr /></div>
|
|
</div>
|
|
<div class="flex-nowrap px-3 py-1 row">
|
|
<div class="flex-grow-1 text-truncate" i18n>Investment</div>
|
|
<div class="justify-content-end">
|
|
<gf-value
|
|
class="justify-content-end"
|
|
[isCurrency]="true"
|
|
[locale]="locale"
|
|
[unit]="baseCurrency"
|
|
[value]="isLoading ? undefined : summary?.committedFunds"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="flex-nowrap px-3 py-1 row">
|
|
<div class="flex-grow-1 text-truncate" i18n>Absolute Gross Performance</div>
|
|
<div class="justify-content-end">
|
|
<gf-value
|
|
class="justify-content-end"
|
|
[isCurrency]="true"
|
|
[locale]="locale"
|
|
[unit]="baseCurrency"
|
|
[value]="
|
|
isLoading ? undefined : summary?.grossPerformanceWithCurrencyEffect
|
|
"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="flex-nowrap px-3 py-1 row">
|
|
<div class="flex-grow-1 text-truncate" i18n>Fees</div>
|
|
<div class="d-flex justify-content-end">
|
|
@if (summary?.fees || summary?.fees === 0) {
|
|
<span class="mr-1">-</span>
|
|
}
|
|
<gf-value
|
|
class="justify-content-end"
|
|
[isCurrency]="true"
|
|
[locale]="locale"
|
|
[unit]="baseCurrency"
|
|
[value]="isLoading ? undefined : summary?.fees"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col"><hr /></div>
|
|
</div>
|
|
<div class="flex-nowrap px-3 py-1 row">
|
|
<div class="flex-grow-1 text-truncate" i18n>Absolute Net Performance</div>
|
|
<div class="justify-content-end">
|
|
<gf-value
|
|
class="justify-content-end"
|
|
[isCurrency]="true"
|
|
[locale]="locale"
|
|
[unit]="baseCurrency"
|
|
[value]="
|
|
isLoading ? undefined : summary?.netPerformanceWithCurrencyEffect
|
|
"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="flex-nowrap px-3 py-1 row">
|
|
<div class="flex-grow-1 text-truncate ml-3">
|
|
<ng-container i18n>Net Performance</ng-container>
|
|
<abbr
|
|
class="initialism ml-2 text-muted"
|
|
title="Return on Average Investment"
|
|
>(ROAI)</abbr
|
|
>
|
|
</div>
|
|
<div class="flex-column flex-wrap justify-content-end">
|
|
<gf-value
|
|
class="justify-content-end"
|
|
position="end"
|
|
[colorizeSign]="true"
|
|
[isPercent]="true"
|
|
[locale]="locale"
|
|
[value]="
|
|
isLoading
|
|
? undefined
|
|
: summary?.netPerformancePercentageWithCurrencyEffect
|
|
"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col"><hr /></div>
|
|
</div>
|
|
<div class="flex-nowrap px-3 py-1 row">
|
|
<div class="flex-grow-1 text-truncate" i18n>Total Assets</div>
|
|
<div class="flex-column flex-wrap justify-content-end">
|
|
<gf-value
|
|
class="justify-content-end"
|
|
position="end"
|
|
[isCurrency]="true"
|
|
[locale]="locale"
|
|
[unit]="baseCurrency"
|
|
[value]="isLoading ? undefined : summary?.currentValueInBaseCurrency"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="flex-nowrap px-3 py-1 row">
|
|
<div class="flex-grow-1 text-truncate" i18n>Emergency Fund</div>
|
|
<div
|
|
class="align-items-center d-flex justify-content-end"
|
|
[ngClass]="{
|
|
'cursor-pointer':
|
|
hasPermissionToUpdateUserSettings &&
|
|
user?.subscription?.type !== 'Basic'
|
|
}"
|
|
(click)="
|
|
hasPermissionToUpdateUserSettings &&
|
|
user?.subscription?.type !== 'Basic' &&
|
|
onEditEmergencyFund()
|
|
"
|
|
>
|
|
@if (
|
|
hasPermissionToUpdateUserSettings &&
|
|
user?.subscription?.type !== 'Basic' &&
|
|
!isLoading
|
|
) {
|
|
<ion-icon
|
|
class="mr-1 text-muted"
|
|
name="ellipsis-horizontal-circle-outline"
|
|
/>
|
|
}
|
|
<gf-value
|
|
class="justify-content-end"
|
|
[isCurrency]="true"
|
|
[locale]="locale"
|
|
[unit]="baseCurrency"
|
|
[value]="isLoading ? undefined : summary?.emergencyFund?.total"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="flex-nowrap px-3 py-1 row">
|
|
<div class="flex-grow-1 ml-3 text-truncate" i18n>Cash</div>
|
|
<div class="flex-column flex-wrap justify-content-end">
|
|
<gf-value
|
|
class="justify-content-end"
|
|
position="end"
|
|
[isCurrency]="true"
|
|
[locale]="locale"
|
|
[unit]="baseCurrency"
|
|
[value]="isLoading ? undefined : summary?.emergencyFund?.cash"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="flex-nowrap px-3 py-1 row">
|
|
<div class="flex-grow-1 ml-3 text-truncate" i18n>Assets</div>
|
|
<div class="flex-column flex-wrap justify-content-end">
|
|
<gf-value
|
|
class="justify-content-end"
|
|
position="end"
|
|
[isCurrency]="true"
|
|
[locale]="locale"
|
|
[unit]="baseCurrency"
|
|
[value]="isLoading ? undefined : summary?.emergencyFund?.assets"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="flex-nowrap px-3 py-1 row">
|
|
<div class="flex-grow-1 text-truncate" i18n>Buying Power</div>
|
|
<div class="justify-content-end">
|
|
<gf-value
|
|
class="justify-content-end"
|
|
[isCurrency]="true"
|
|
[locale]="locale"
|
|
[unit]="baseCurrency"
|
|
[value]="isLoading ? undefined : summary?.cash"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="flex-nowrap px-3 py-1 row">
|
|
<div class="flex-grow-1 text-truncate" i18n>Excluded from Analysis</div>
|
|
<div class="justify-content-end">
|
|
<gf-value
|
|
class="justify-content-end"
|
|
[isCurrency]="true"
|
|
[locale]="locale"
|
|
[unit]="baseCurrency"
|
|
[value]="isLoading ? undefined : summary?.excludedAccountsAndActivities"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col"><hr /></div>
|
|
</div>
|
|
<div class="flex-nowrap px-3 py-1 row">
|
|
<div class="flex-grow-1 text-truncate" i18n>Liabilities</div>
|
|
<div class="d-flex justify-content-end">
|
|
@if (
|
|
summary?.liabilitiesInBaseCurrency ||
|
|
summary?.liabilitiesInBaseCurrency === 0
|
|
) {
|
|
<span class="mr-1">-</span>
|
|
}
|
|
<gf-value
|
|
class="justify-content-end"
|
|
[isCurrency]="true"
|
|
[locale]="locale"
|
|
[unit]="baseCurrency"
|
|
[value]="isLoading ? undefined : summary?.liabilitiesInBaseCurrency"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col"><hr /></div>
|
|
</div>
|
|
<div class="flex-nowrap px-3 py-1 row">
|
|
<div class="flex-grow-1 font-weight-bold text-truncate" i18n>Net Worth</div>
|
|
<div class="justify-content-end">
|
|
<gf-value
|
|
class="justify-content-end"
|
|
[isCurrency]="true"
|
|
[locale]="locale"
|
|
[unit]="baseCurrency"
|
|
[value]="isLoading ? undefined : summary?.totalValueInBaseCurrency"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="flex-nowrap px-3 py-1 row">
|
|
<div class="flex-grow-1 ml-3 text-truncate" i18n>
|
|
Annualized Performance
|
|
</div>
|
|
<div class="flex-column flex-wrap justify-content-end">
|
|
<gf-value
|
|
class="justify-content-end"
|
|
position="end"
|
|
[colorizeSign]="true"
|
|
[isPercent]="true"
|
|
[locale]="locale"
|
|
[value]="
|
|
isLoading
|
|
? undefined
|
|
: summary?.annualizedPerformancePercentWithCurrencyEffect
|
|
"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col"><hr /></div>
|
|
</div>
|
|
<div class="flex-nowrap px-3 py-1 row">
|
|
<div class="flex-grow-1 text-truncate" i18n>Interest</div>
|
|
<div class="justify-content-end">
|
|
<gf-value
|
|
class="justify-content-end"
|
|
[isCurrency]="true"
|
|
[locale]="locale"
|
|
[unit]="baseCurrency"
|
|
[value]="isLoading ? undefined : summary?.interestInBaseCurrency"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="flex-nowrap px-3 py-1 row">
|
|
<div class="flex-grow-1 text-truncate" i18n>Dividend</div>
|
|
<div class="justify-content-end">
|
|
<gf-value
|
|
class="justify-content-end"
|
|
[isCurrency]="true"
|
|
[locale]="locale"
|
|
[unit]="baseCurrency"
|
|
[value]="isLoading ? undefined : summary?.dividendInBaseCurrency"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|