Merge branch 'main' of github.com:ghostfolio/ghostfolio
All checks were successful
Docker image CD / build_and_push (push) Successful in 21m42s

This commit is contained in:
sudacode 2025-05-09 12:00:45 -07:00
commit 12ebce03af
29 changed files with 114 additions and 164 deletions

View File

@ -13,10 +13,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed ### Changed
- Renamed `Order` to `activities` in the `User` database schema
- Improved the language localization for Catalan (`ca`) - Improved the language localization for Catalan (`ca`)
- Improved the language localization for Italian (`it`) - Improved the language localization for Italian (`it`)
- Upgraded `nestjs` from version `10.4.15` to `11.0.12` - Upgraded `nestjs` from version `10.4.15` to `11.0.12`
### Fixed
- Fixed an issue in the watchlist endpoint (`POST`) related to the `HasPermissionGuard`
## 2.161.0 - 2025-05-06 ## 2.161.0 - 2025-05-06
### Added ### Added

View File

@ -821,7 +821,7 @@ export class AdminService {
where, where,
select: { select: {
_count: { _count: {
select: { Account: true, Order: true } select: { Account: true, activities: true }
}, },
Analytics: { Analytics: {
select: { select: {
@ -869,10 +869,10 @@ export class AdminService {
role, role,
subscription, subscription,
accountCount: _count.Account || 0, accountCount: _count.Account || 0,
activityCount: _count.activities || 0,
country: Analytics?.country, country: Analytics?.country,
dailyApiRequests: Analytics?.dataProviderGhostfolioDailyRequests || 0, dailyApiRequests: Analytics?.dataProviderGhostfolioDailyRequests || 0,
lastActivity: Analytics?.updatedAt, lastActivity: Analytics?.updatedAt
transactionCount: _count.Order || 0
}; };
} }
); );

View File

@ -39,7 +39,7 @@ export class WatchlistController {
@Post() @Post()
@HasPermission(permissions.createWatchlistItem) @HasPermission(permissions.createWatchlistItem)
@UseGuards(AuthGuard('jwt')) @UseGuards(AuthGuard('jwt'), HasPermissionGuard)
@UseInterceptors(TransformDataSourceInRequestInterceptor) @UseInterceptors(TransformDataSourceInRequestInterceptor)
public async createWatchlistItem(@Body() data: CreateWatchlistItemDto) { public async createWatchlistItem(@Body() data: CreateWatchlistItemDto) {
return this.watchlistService.createWatchlistItem({ return this.watchlistService.createWatchlistItem({

View File

@ -1,23 +0,0 @@
import { PortfolioItem, Position } from '@ghostfolio/common/interfaces';
import { Order } from '../order';
export interface PortfolioInterface {
get(aDate?: Date): PortfolioItem[];
getFees(): number;
getPositions(aDate: Date): {
[symbol: string]: Position;
};
getSymbols(aDate?: Date): string[];
getTotalBuy(): number;
getTotalSell(): number;
getOrders(): Order[];
getValue(aDate?: Date): number;
}

View File

@ -257,20 +257,20 @@
<div class="h5" i18n>Sectors</div> <div class="h5" i18n>Sectors</div>
<gf-portfolio-proportion-chart <gf-portfolio-proportion-chart
[colorScheme]="data.colorScheme" [colorScheme]="data.colorScheme"
[data]="sectors"
[isInPercent]="true" [isInPercent]="true"
[keys]="['name']" [keys]="['name']"
[maxItems]="10" [maxItems]="10"
[positions]="sectors"
/> />
</div> </div>
<div class="col-md-6 mb-3"> <div class="col-md-6 mb-3">
<div class="h5" i18n>Countries</div> <div class="h5" i18n>Countries</div>
<gf-portfolio-proportion-chart <gf-portfolio-proportion-chart
[colorScheme]="data.colorScheme" [colorScheme]="data.colorScheme"
[data]="countries"
[isInPercent]="true" [isInPercent]="true"
[keys]="['name']" [keys]="['name']"
[maxItems]="10" [maxItems]="10"
[positions]="countries"
/> />
</div> </div>
} }

View File

@ -142,7 +142,7 @@
<gf-value <gf-value
class="d-inline-block justify-content-end" class="d-inline-block justify-content-end"
[locale]="user?.settings?.locale" [locale]="user?.settings?.locale"
[value]="element.transactionCount" [value]="element.activityCount"
/> />
</td> </td>
</ng-container> </ng-container>

View File

@ -259,11 +259,11 @@
<gf-portfolio-proportion-chart <gf-portfolio-proportion-chart
[baseCurrency]="data.baseCurrency" [baseCurrency]="data.baseCurrency"
[colorScheme]="data.colorScheme" [colorScheme]="data.colorScheme"
[data]="sectors"
[isInPercent]="true" [isInPercent]="true"
[keys]="['name']" [keys]="['name']"
[locale]="data.locale" [locale]="data.locale"
[maxItems]="10" [maxItems]="10"
[positions]="sectors"
/> />
</div> </div>
<div class="col-md-6 mb-3"> <div class="col-md-6 mb-3">
@ -271,11 +271,11 @@
<gf-portfolio-proportion-chart <gf-portfolio-proportion-chart
[baseCurrency]="data.baseCurrency" [baseCurrency]="data.baseCurrency"
[colorScheme]="data.colorScheme" [colorScheme]="data.colorScheme"
[data]="countries"
[isInPercent]="true" [isInPercent]="true"
[keys]="['name']" [keys]="['name']"
[locale]="data.locale" [locale]="data.locale"
[maxItems]="10" [maxItems]="10"
[positions]="countries"
/> />
</div> </div>
} }

View File

@ -48,10 +48,10 @@
<gf-portfolio-proportion-chart <gf-portfolio-proportion-chart
[baseCurrency]="user?.settings?.baseCurrency" [baseCurrency]="user?.settings?.baseCurrency"
[colorScheme]="user?.settings?.colorScheme" [colorScheme]="user?.settings?.colorScheme"
[data]="platforms"
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView" [isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
[keys]="['id']" [keys]="['id']"
[locale]="user?.settings?.locale" [locale]="user?.settings?.locale"
[positions]="platforms"
/> />
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>
@ -70,10 +70,10 @@
<gf-portfolio-proportion-chart <gf-portfolio-proportion-chart
[baseCurrency]="user?.settings?.baseCurrency" [baseCurrency]="user?.settings?.baseCurrency"
[colorScheme]="user?.settings?.colorScheme" [colorScheme]="user?.settings?.colorScheme"
[data]="positions"
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView" [isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
[keys]="['currency']" [keys]="['currency']"
[locale]="user?.settings?.locale" [locale]="user?.settings?.locale"
[positions]="positions"
/> />
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>
@ -92,10 +92,10 @@
<gf-portfolio-proportion-chart <gf-portfolio-proportion-chart
[baseCurrency]="user?.settings?.baseCurrency" [baseCurrency]="user?.settings?.baseCurrency"
[colorScheme]="user?.settings?.colorScheme" [colorScheme]="user?.settings?.colorScheme"
[data]="positions"
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView" [isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
[keys]="['assetClassLabel', 'assetSubClassLabel']" [keys]="['assetClassLabel', 'assetSubClassLabel']"
[locale]="user?.settings?.locale" [locale]="user?.settings?.locale"
[positions]="positions"
/> />
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>
@ -113,10 +113,10 @@
cursor="pointer" cursor="pointer"
[baseCurrency]="user?.settings?.baseCurrency" [baseCurrency]="user?.settings?.baseCurrency"
[colorScheme]="user?.settings?.colorScheme" [colorScheme]="user?.settings?.colorScheme"
[data]="symbols"
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView" [isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
[keys]="['symbol']" [keys]="['symbol']"
[locale]="user?.settings?.locale" [locale]="user?.settings?.locale"
[positions]="symbols"
[showLabels]="deviceType !== 'mobile'" [showLabels]="deviceType !== 'mobile'"
(proportionChartClicked)="onSymbolChartClicked($event)" (proportionChartClicked)="onSymbolChartClicked($event)"
/> />
@ -137,11 +137,11 @@
<gf-portfolio-proportion-chart <gf-portfolio-proportion-chart
[baseCurrency]="user?.settings?.baseCurrency" [baseCurrency]="user?.settings?.baseCurrency"
[colorScheme]="user?.settings?.colorScheme" [colorScheme]="user?.settings?.colorScheme"
[data]="sectors"
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView" [isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
[keys]="['name']" [keys]="['name']"
[locale]="user?.settings?.locale" [locale]="user?.settings?.locale"
[maxItems]="10" [maxItems]="10"
[positions]="sectors"
/> />
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>
@ -160,10 +160,10 @@
<gf-portfolio-proportion-chart <gf-portfolio-proportion-chart
[baseCurrency]="user?.settings?.baseCurrency" [baseCurrency]="user?.settings?.baseCurrency"
[colorScheme]="user?.settings?.colorScheme" [colorScheme]="user?.settings?.colorScheme"
[data]="continents"
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView" [isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
[keys]="['name']" [keys]="['name']"
[locale]="user?.settings?.locale" [locale]="user?.settings?.locale"
[positions]="continents"
/> />
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>
@ -182,9 +182,9 @@
<gf-portfolio-proportion-chart <gf-portfolio-proportion-chart
[baseCurrency]="user?.settings?.baseCurrency" [baseCurrency]="user?.settings?.baseCurrency"
[colorScheme]="user?.settings?.colorScheme" [colorScheme]="user?.settings?.colorScheme"
[data]="marketsAdvanced"
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView" [isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
[locale]="user?.settings?.locale" [locale]="user?.settings?.locale"
[positions]="marketsAdvanced"
/> />
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>
@ -271,11 +271,11 @@
<gf-portfolio-proportion-chart <gf-portfolio-proportion-chart
[baseCurrency]="user?.settings?.baseCurrency" [baseCurrency]="user?.settings?.baseCurrency"
[colorScheme]="user?.settings?.colorScheme" [colorScheme]="user?.settings?.colorScheme"
[data]="countries"
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView" [isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
[keys]="['name']" [keys]="['name']"
[locale]="user?.settings?.locale" [locale]="user?.settings?.locale"
[maxItems]="10" [maxItems]="10"
[positions]="countries"
/> />
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>
@ -290,10 +290,10 @@
cursor="pointer" cursor="pointer"
[baseCurrency]="user?.settings?.baseCurrency" [baseCurrency]="user?.settings?.baseCurrency"
[colorScheme]="user?.settings?.colorScheme" [colorScheme]="user?.settings?.colorScheme"
[data]="accounts"
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView" [isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
[keys]="['id']" [keys]="['id']"
[locale]="user?.settings?.locale" [locale]="user?.settings?.locale"
[positions]="accounts"
(proportionChartClicked)="onAccountChartClicked($event)" (proportionChartClicked)="onAccountChartClicked($event)"
/> />
</mat-card-content> </mat-card-content>
@ -313,10 +313,10 @@
<gf-portfolio-proportion-chart <gf-portfolio-proportion-chart
[baseCurrency]="user?.settings?.baseCurrency" [baseCurrency]="user?.settings?.baseCurrency"
[colorScheme]="user?.settings?.colorScheme" [colorScheme]="user?.settings?.colorScheme"
[data]="positions"
[isInPercent]="hasImpersonationId || user.settings.isRestrictedView" [isInPercent]="hasImpersonationId || user.settings.isRestrictedView"
[keys]="['etfProvider']" [keys]="['etfProvider']"
[locale]="user?.settings?.locale" [locale]="user?.settings?.locale"
[positions]="positions"
/> />
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>

View File

@ -72,9 +72,9 @@
<mat-card-content> <mat-card-content>
<gf-portfolio-proportion-chart <gf-portfolio-proportion-chart
class="mx-auto" class="mx-auto"
[data]="symbols"
[isInPercent]="true" [isInPercent]="true"
[keys]="['symbol']" [keys]="['symbol']"
[positions]="symbols"
[showLabels]="deviceType !== 'mobile'" [showLabels]="deviceType !== 'mobile'"
/> />
</mat-card-content> </mat-card-content>
@ -90,10 +90,10 @@
</mat-card-header> </mat-card-header>
<mat-card-content> <mat-card-content>
<gf-portfolio-proportion-chart <gf-portfolio-proportion-chart
[data]="positions"
[isInPercent]="true" [isInPercent]="true"
[keys]="['currency']" [keys]="['currency']"
[maxItems]="10" [maxItems]="10"
[positions]="positions"
/> />
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>
@ -107,10 +107,10 @@
</mat-card-header> </mat-card-header>
<mat-card-content> <mat-card-content>
<gf-portfolio-proportion-chart <gf-portfolio-proportion-chart
[data]="sectors"
[isInPercent]="true" [isInPercent]="true"
[keys]="['name']" [keys]="['name']"
[maxItems]="10" [maxItems]="10"
[positions]="sectors"
/> />
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>
@ -126,9 +126,9 @@
</mat-card-header> </mat-card-header>
<mat-card-content> <mat-card-content>
<gf-portfolio-proportion-chart <gf-portfolio-proportion-chart
[data]="continents"
[isInPercent]="true" [isInPercent]="true"
[keys]="['name']" [keys]="['name']"
[positions]="continents"
/> />
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>
@ -198,10 +198,10 @@
<div class="row"> <div class="row">
<div class="col-lg"> <div class="col-lg">
<gf-holdings-table <gf-holdings-table
[data]="holdings"
[deviceType]="deviceType" [deviceType]="deviceType"
[hasPermissionToOpenDetails]="false" [hasPermissionToOpenDetails]="false"
[hasPermissionToShowValues]="false" [hasPermissionToShowValues]="false"
[holdings]="holdings"
[pageSize]="7" [pageSize]="7"
/> />
</div> </div>

View File

@ -6383,7 +6383,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">402</context> <context context-type="linenumber">400</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6333857424161463201" datatype="html"> <trans-unit id="6333857424161463201" datatype="html">
@ -6691,11 +6691,11 @@
<target state="new">No data available</target> <target state="new">No data available</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">404</context> <context context-type="linenumber">402</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">417</context> <context context-type="linenumber">415</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="f0c5f6f270e70cbe063b5368fcf48f9afc1abd9b" datatype="html"> <trans-unit id="f0c5f6f270e70cbe063b5368fcf48f9afc1abd9b" datatype="html">

View File

@ -3106,7 +3106,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">402</context> <context context-type="linenumber">400</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4893616715766810081" datatype="html"> <trans-unit id="4893616715766810081" datatype="html">
@ -3114,11 +3114,11 @@
<target state="translated">Keine Daten verfügbar</target> <target state="translated">Keine Daten verfügbar</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">404</context> <context context-type="linenumber">402</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">417</context> <context context-type="linenumber">415</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1228771048078164312" datatype="html"> <trans-unit id="1228771048078164312" datatype="html">

View File

@ -3091,7 +3091,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">402</context> <context context-type="linenumber">400</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4893616715766810081" datatype="html"> <trans-unit id="4893616715766810081" datatype="html">
@ -3099,11 +3099,11 @@
<target state="translated">Sin datos disponibles</target> <target state="translated">Sin datos disponibles</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">404</context> <context context-type="linenumber">402</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">417</context> <context context-type="linenumber">415</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1228771048078164312" datatype="html"> <trans-unit id="1228771048078164312" datatype="html">

View File

@ -3162,7 +3162,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">402</context> <context context-type="linenumber">400</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8106025670158480144" datatype="html"> <trans-unit id="8106025670158480144" datatype="html">
@ -3338,11 +3338,11 @@
<target state="translated">Pas de données disponibles</target> <target state="translated">Pas de données disponibles</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">404</context> <context context-type="linenumber">402</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">417</context> <context context-type="linenumber">415</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="0f845001c88b82c18535e6d44f5597061f506e42" datatype="html"> <trans-unit id="0f845001c88b82c18535e6d44f5597061f506e42" datatype="html">

View File

@ -3091,7 +3091,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">402</context> <context context-type="linenumber">400</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4893616715766810081" datatype="html"> <trans-unit id="4893616715766810081" datatype="html">
@ -3099,11 +3099,11 @@
<target state="translated">Nessun dato disponibile</target> <target state="translated">Nessun dato disponibile</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">404</context> <context context-type="linenumber">402</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">417</context> <context context-type="linenumber">415</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1228771048078164312" datatype="html"> <trans-unit id="1228771048078164312" datatype="html">

View File

@ -3090,7 +3090,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">402</context> <context context-type="linenumber">400</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="4893616715766810081" datatype="html"> <trans-unit id="4893616715766810081" datatype="html">
@ -3098,11 +3098,11 @@
<target state="translated">Geen gegevens beschikbaar</target> <target state="translated">Geen gegevens beschikbaar</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">404</context> <context context-type="linenumber">402</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">417</context> <context context-type="linenumber">415</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1228771048078164312" datatype="html"> <trans-unit id="1228771048078164312" datatype="html">

View File

@ -5791,7 +5791,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">402</context> <context context-type="linenumber">400</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6333857424161463201" datatype="html"> <trans-unit id="6333857424161463201" datatype="html">
@ -6091,11 +6091,11 @@
<target state="translated">Brak danych</target> <target state="translated">Brak danych</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">404</context> <context context-type="linenumber">402</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">417</context> <context context-type="linenumber">415</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="d762c43328624b5dd81f3c6a3023203ae9a7553f" datatype="html"> <trans-unit id="d762c43328624b5dd81f3c6a3023203ae9a7553f" datatype="html">

View File

@ -3002,7 +3002,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">402</context> <context context-type="linenumber">400</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="8106025670158480144" datatype="html"> <trans-unit id="8106025670158480144" datatype="html">
@ -3178,11 +3178,11 @@
<target state="translated">Sem dados disponíveis</target> <target state="translated">Sem dados disponíveis</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">404</context> <context context-type="linenumber">402</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">417</context> <context context-type="linenumber">415</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="064d88bead9e71bd849ecaefd8b38cca8f195a88" datatype="html"> <trans-unit id="064d88bead9e71bd849ecaefd8b38cca8f195a88" datatype="html">

View File

@ -5479,7 +5479,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">402</context> <context context-type="linenumber">400</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6333857424161463201" datatype="html"> <trans-unit id="6333857424161463201" datatype="html">
@ -5727,11 +5727,11 @@
<target state="translated">Veri mevcut değil</target> <target state="translated">Veri mevcut değil</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">404</context> <context context-type="linenumber">402</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">417</context> <context context-type="linenumber">415</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="1c0638816928ae45284e60504936ca985960df5c" datatype="html"> <trans-unit id="1c0638816928ae45284e60504936ca985960df5c" datatype="html">

View File

@ -7045,7 +7045,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">402</context> <context context-type="linenumber">400</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6973601224334878334" datatype="html"> <trans-unit id="6973601224334878334" datatype="html">
@ -7533,11 +7533,11 @@
<target state="translated">Дані недоступні</target> <target state="translated">Дані недоступні</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">404</context> <context context-type="linenumber">402</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">417</context> <context context-type="linenumber">415</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="b225488f8b209e9704760dc9f5d99845a5d07bf6" datatype="html"> <trans-unit id="b225488f8b209e9704760dc9f5d99845a5d07bf6" datatype="html">

View File

@ -5360,7 +5360,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">402</context> <context context-type="linenumber">400</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6333857424161463201" datatype="html"> <trans-unit id="6333857424161463201" datatype="html">
@ -5623,11 +5623,11 @@
<source>No data available</source> <source>No data available</source>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">404</context> <context context-type="linenumber">402</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">417</context> <context context-type="linenumber">415</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="62c28ddba8fedb2ae7b0fff9a641778b59791aa2" datatype="html"> <trans-unit id="62c28ddba8fedb2ae7b0fff9a641778b59791aa2" datatype="html">

View File

@ -5848,7 +5848,7 @@
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">402</context> <context context-type="linenumber">400</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="6333857424161463201" datatype="html"> <trans-unit id="6333857424161463201" datatype="html">
@ -6148,11 +6148,11 @@
<target state="translated">无可用数据</target> <target state="translated">无可用数据</target>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">404</context> <context context-type="linenumber">402</context>
</context-group> </context-group>
<context-group purpose="location"> <context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context> <context context-type="sourcefile">libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts</context>
<context context-type="linenumber">417</context> <context context-type="linenumber">415</context>
</context-group> </context-group>
</trans-unit> </trans-unit>
<trans-unit id="62c28ddba8fedb2ae7b0fff9a641778b59791aa2" datatype="html"> <trans-unit id="62c28ddba8fedb2ae7b0fff9a641778b59791aa2" datatype="html">

View File

@ -4,6 +4,7 @@ export interface AdminUsers {
count: number; count: number;
users: { users: {
accountCount: number; accountCount: number;
activityCount: number;
country: string; country: string;
createdAt: Date; createdAt: Date;
dailyApiRequests: number; dailyApiRequests: number;
@ -11,6 +12,5 @@ export interface AdminUsers {
id: string; id: string;
lastActivity: Date; lastActivity: Date;
role: Role; role: Role;
transactionCount: number;
}[]; }[];
} }

View File

@ -29,8 +29,6 @@ import type { PortfolioChart } from './portfolio-chart.interface';
import type { PortfolioDetails } from './portfolio-details.interface'; import type { PortfolioDetails } from './portfolio-details.interface';
import type { PortfolioDividends } from './portfolio-dividends.interface'; import type { PortfolioDividends } from './portfolio-dividends.interface';
import type { PortfolioInvestments } from './portfolio-investments.interface'; import type { PortfolioInvestments } from './portfolio-investments.interface';
import type { PortfolioItem } from './portfolio-item.interface';
import type { PortfolioOverview } from './portfolio-overview.interface';
import type { PortfolioPerformance } from './portfolio-performance.interface'; import type { PortfolioPerformance } from './portfolio-performance.interface';
import type { PortfolioPosition } from './portfolio-position.interface'; import type { PortfolioPosition } from './portfolio-position.interface';
import type { PortfolioReportRule } from './portfolio-report-rule.interface'; import type { PortfolioReportRule } from './portfolio-report-rule.interface';
@ -116,8 +114,6 @@ export {
PortfolioHoldingResponse, PortfolioHoldingResponse,
PortfolioHoldingsResponse, PortfolioHoldingsResponse,
PortfolioInvestments, PortfolioInvestments,
PortfolioItem,
PortfolioOverview,
PortfolioPerformance, PortfolioPerformance,
PortfolioPerformanceResponse, PortfolioPerformanceResponse,
PortfolioPosition, PortfolioPosition,

View File

@ -1,9 +0,0 @@
import { Position } from '@ghostfolio/common/interfaces';
export interface PortfolioItem {
date: string;
grossPerformancePercent: number;
investment: number;
positions: { [symbol: string]: Position };
value: number;
}

View File

@ -1,8 +0,0 @@
export interface PortfolioOverview {
cash: number;
committedFunds: number;
fees: number;
ordersCount: number;
totalBuy: number;
totalSell: number;
}

View File

@ -25,15 +25,15 @@ type Story = StoryObj<GfPortfolioProportionChartComponent>;
export const Simple: Story = { export const Simple: Story = {
args: { args: {
baseCurrency: 'USD', baseCurrency: 'USD',
keys: ['name'], data: {
locale: 'en-US',
positions: {
Africa: { name: 'Africa', value: 983.22461479889288 }, Africa: { name: 'Africa', value: 983.22461479889288 },
Asia: { name: 'Asia', value: 12074.754633964973 }, Asia: { name: 'Asia', value: 12074.754633964973 },
Europe: { name: 'Europe', value: 34432.837085290535 }, Europe: { name: 'Europe', value: 34432.837085290535 },
'North America': { name: 'North America', value: 26539.89987780503 }, 'North America': { name: 'North America', value: 26539.89987780503 },
Oceania: { name: 'Oceania', value: 1402.220605072031 }, Oceania: { name: 'Oceania', value: 1402.220605072031 },
'South America': { name: 'South America', value: 4938.25202180719859 } 'South America': { name: 'South America', value: 4938.25202180719859 }
} },
keys: ['name'],
locale: 'en-US'
} }
}; };

View File

@ -60,18 +60,18 @@ export class GfPortfolioProportionChartComponent
@Input() baseCurrency: string; @Input() baseCurrency: string;
@Input() colorScheme: ColorScheme; @Input() colorScheme: ColorScheme;
@Input() cursor: string; @Input() cursor: string;
@Input() isInPercent = false; @Input() data: {
@Input() keys: string[] = [];
@Input() locale = getLocale();
@Input() maxItems?: number;
@Input() showLabels = false;
@Input() positions: {
[symbol: string]: Pick<PortfolioPosition, 'type'> & { [symbol: string]: Pick<PortfolioPosition, 'type'> & {
dataSource?: DataSource; dataSource?: DataSource;
name: string; name: string;
value: number; value: number;
}; };
} = {}; } = {};
@Input() isInPercent = false;
@Input() keys: string[] = [];
@Input() locale = getLocale();
@Input() maxItems?: number;
@Input() showLabels = false;
@Output() proportionChartClicked = new EventEmitter<AssetProfileIdentifier>(); @Output() proportionChartClicked = new EventEmitter<AssetProfileIdentifier>();
@ -91,13 +91,13 @@ export class GfPortfolioProportionChartComponent
} }
public ngAfterViewInit() { public ngAfterViewInit() {
if (this.positions) { if (this.data) {
this.initialize(); this.initialize();
} }
} }
public ngOnChanges() { public ngOnChanges() {
if (this.positions) { if (this.data) {
this.initialize(); this.initialize();
} }
} }
@ -122,47 +122,45 @@ export class GfPortfolioProportionChartComponent
}; };
if (this.keys.length > 0) { if (this.keys.length > 0) {
Object.keys(this.positions).forEach((symbol) => { Object.keys(this.data).forEach((symbol) => {
if (this.positions[symbol][this.keys[0]]?.toUpperCase()) { if (this.data[symbol][this.keys[0]]?.toUpperCase()) {
if (chartData[this.positions[symbol][this.keys[0]].toUpperCase()]) { if (chartData[this.data[symbol][this.keys[0]].toUpperCase()]) {
chartData[ chartData[this.data[symbol][this.keys[0]].toUpperCase()].value =
this.positions[symbol][this.keys[0]].toUpperCase() chartData[
].value = chartData[ this.data[symbol][this.keys[0]].toUpperCase()
this.positions[symbol][this.keys[0]].toUpperCase() ].value.plus(this.data[symbol].value || 0);
].value.plus(this.positions[symbol].value || 0);
if ( if (
chartData[this.positions[symbol][this.keys[0]].toUpperCase()] chartData[this.data[symbol][this.keys[0]].toUpperCase()]
.subCategory[this.positions[symbol][this.keys[1]]] .subCategory[this.data[symbol][this.keys[1]]]
) { ) {
chartData[ chartData[
this.positions[symbol][this.keys[0]].toUpperCase() this.data[symbol][this.keys[0]].toUpperCase()
].subCategory[this.positions[symbol][this.keys[1]]].value = ].subCategory[this.data[symbol][this.keys[1]]].value = chartData[
chartData[ this.data[symbol][this.keys[0]].toUpperCase()
this.positions[symbol][this.keys[0]].toUpperCase() ].subCategory[this.data[symbol][this.keys[1]]].value.plus(
].subCategory[this.positions[symbol][this.keys[1]]].value.plus( this.data[symbol].value || 0
this.positions[symbol].value || 0 );
);
} else { } else {
chartData[ chartData[
this.positions[symbol][this.keys[0]].toUpperCase() this.data[symbol][this.keys[0]].toUpperCase()
].subCategory[ ].subCategory[this.data[symbol][this.keys[1]] ?? UNKNOWN_KEY] = {
this.positions[symbol][this.keys[1]] ?? UNKNOWN_KEY value: new Big(this.data[symbol].value || 0)
] = { value: new Big(this.positions[symbol].value || 0) }; };
} }
} else { } else {
chartData[this.positions[symbol][this.keys[0]].toUpperCase()] = { chartData[this.data[symbol][this.keys[0]].toUpperCase()] = {
name: this.positions[symbol][this.keys[0]], name: this.data[symbol][this.keys[0]],
subCategory: {}, subCategory: {},
value: new Big(this.positions[symbol].value || 0) value: new Big(this.data[symbol].value || 0)
}; };
if (this.positions[symbol][this.keys[1]]) { if (this.data[symbol][this.keys[1]]) {
chartData[ chartData[
this.positions[symbol][this.keys[0]].toUpperCase() this.data[symbol][this.keys[0]].toUpperCase()
].subCategory = { ].subCategory = {
[this.positions[symbol][this.keys[1]]]: { [this.data[symbol][this.keys[1]]]: {
value: new Big(this.positions[symbol].value || 0) value: new Big(this.data[symbol].value || 0)
} }
}; };
} }
@ -170,24 +168,24 @@ export class GfPortfolioProportionChartComponent
} else { } else {
if (chartData[UNKNOWN_KEY]) { if (chartData[UNKNOWN_KEY]) {
chartData[UNKNOWN_KEY].value = chartData[UNKNOWN_KEY].value.plus( chartData[UNKNOWN_KEY].value = chartData[UNKNOWN_KEY].value.plus(
this.positions[symbol].value || 0 this.data[symbol].value || 0
); );
} else { } else {
chartData[UNKNOWN_KEY] = { chartData[UNKNOWN_KEY] = {
name: this.positions[symbol].name, name: this.data[symbol].name,
subCategory: this.keys[1] subCategory: this.keys[1]
? { [this.keys[1]]: { value: new Big(0) } } ? { [this.keys[1]]: { value: new Big(0) } }
: undefined, : undefined,
value: new Big(this.positions[symbol].value || 0) value: new Big(this.data[symbol].value || 0)
}; };
} }
} }
}); });
} else { } else {
Object.keys(this.positions).forEach((symbol) => { Object.keys(this.data).forEach((symbol) => {
chartData[symbol] = { chartData[symbol] = {
name: this.positions[symbol].name, name: this.data[symbol].name,
value: new Big(this.positions[symbol].value || 0) value: new Big(this.data[symbol].value || 0)
}; };
}); });
} }
@ -321,7 +319,7 @@ export class GfPortfolioProportionChartComponent
const dataIndex = activeElements[0].index; const dataIndex = activeElements[0].index;
const symbol: string = event.chart.data.labels[dataIndex]; const symbol: string = event.chart.data.labels[dataIndex];
const dataSource = this.positions[symbol]?.dataSource; const dataSource = this.data[symbol]?.dataSource;
this.proportionChartClicked.emit({ dataSource, symbol }); this.proportionChartClicked.emit({ dataSource, symbol });
} catch {} } catch {}
@ -404,7 +402,7 @@ export class GfPortfolioProportionChartComponent
symbol = $localize`No data available`; symbol = $localize`No data available`;
} }
const name = translate(this.positions[symbol as string]?.name); const name = translate(this.data[symbol as string]?.name);
let sum = 0; let sum = 0;
for (const item of context.dataset.data) { for (const item of context.dataset.data) {

View File

@ -2,8 +2,7 @@ import { GfSymbolModule } from '@ghostfolio/client/pipes/symbol/symbol.module';
import { getLocale } from '@ghostfolio/common/helper'; import { getLocale } from '@ghostfolio/common/helper';
import { import {
AssetProfileIdentifier, AssetProfileIdentifier,
HoldingWithParents, HoldingWithParents
PortfolioPosition
} from '@ghostfolio/common/interfaces'; } from '@ghostfolio/common/interfaces';
import { GfValueComponent } from '@ghostfolio/ui/value'; import { GfValueComponent } from '@ghostfolio/ui/value';
@ -29,7 +28,6 @@ import {
import { MatButtonModule } from '@angular/material/button'; import { MatButtonModule } from '@angular/material/button';
import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator'; import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';
import { MatTableDataSource, MatTableModule } from '@angular/material/table'; import { MatTableDataSource, MatTableModule } from '@angular/material/table';
import { DataSource } from '@prisma/client';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { Subject } from 'rxjs'; import { Subject } from 'rxjs';
@ -64,13 +62,6 @@ export class GfTopHoldingsComponent implements OnChanges, OnDestroy {
@Input() locale = getLocale(); @Input() locale = getLocale();
@Input() pageSize = Number.MAX_SAFE_INTEGER; @Input() pageSize = Number.MAX_SAFE_INTEGER;
@Input() topHoldings: HoldingWithParents[]; @Input() topHoldings: HoldingWithParents[];
@Input() positions: {
[symbol: string]: Pick<PortfolioPosition, 'type'> & {
dataSource?: DataSource;
name: string;
value: number;
};
} = {};
@Output() holdingClicked = new EventEmitter<AssetProfileIdentifier>(); @Output() holdingClicked = new EventEmitter<AssetProfileIdentifier>();

View File

@ -245,6 +245,7 @@ model Tag {
model User { model User {
accessToken String? accessToken String?
activities Order[]
authChallenge String? authChallenge String?
createdAt DateTime @default(now()) createdAt DateTime @default(now())
id String @id @default(uuid()) id String @id @default(uuid())
@ -260,7 +261,6 @@ model User {
Analytics Analytics? Analytics Analytics?
ApiKey ApiKey[] ApiKey ApiKey[]
AuthDevice AuthDevice[] AuthDevice AuthDevice[]
Order Order[]
Settings Settings? Settings Settings?
SymbolProfile SymbolProfile[] SymbolProfile SymbolProfile[]
Tag Tag[] Tag Tag[]