Browse Source

Merge branch 'main' into task/migrate-admin-users-component-to-onpush

pull/7266/head
Thomas Kaul 1 week ago
committed by GitHub
parent
commit
f45c4a94e7
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 1
      CHANGELOG.md
  2. 2
      apps/client/src/app/components/admin-settings/admin-settings.component.html
  3. 2
      apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
  4. 1
      apps/client/src/app/components/home-overview/home-overview.html
  5. 22
      apps/client/src/app/components/portfolio-performance/portfolio-performance.component.html
  6. 103
      apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts
  7. 2
      apps/client/src/app/components/user-account-membership/user-account-membership.component.ts
  8. 2
      apps/client/src/app/pages/faq/saas/saas-page.html
  9. 4
      apps/client/src/app/pages/pricing/pricing-page.html
  10. 114
      apps/client/src/locales/messages.nl.xlf
  11. 2
      prisma/schema.prisma

1
CHANGELOG.md

@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Set the change detection strategy to `OnPush` in the _FIRE_ page
- Set the change detection strategy to `OnPush` in the users section of the admin control panel
- Improved the language localization for Dutch (`nl`)
- Improved the language localization for French (`fr`)
- Improved the language localization for German (`de`)

2
apps/client/src/app/components/admin-settings/admin-settings.component.html

@ -21,7 +21,7 @@
<mat-card-actions class="pb-3 pt-0 px-3">
<a
class="special"
href="mailto:hi@ghostfol.io?Subject=Ghostfolio Premium Data Provider&body=Hello,%0D%0DI am interested in the Ghostfolio Premium data provider. Could you please give me access so I can try it for some time?%0D%0DKind regards"
href="mailto:hi@ghostfol.io?subject=Ghostfolio Premium Data Provider&body=Hello,%0D%0DI am interested in the Ghostfolio Premium data provider. Could you please give me access so I can try it for some time?%0D%0DKind regards"
mat-flat-button
>
<ng-container i18n>Get Access</ng-container>

2
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts

@ -456,7 +456,7 @@ export class GfHoldingDetailDialogComponent implements OnInit {
this.assetProfile?.symbol ? ` (${this.assetProfile.symbol})` : ''
}`;
this.reportDataGlitchMail = `mailto:hi@ghostfol.io?Subject=${reportDataGlitchSubject}&body=Hello%0D%0DI would like to report a data glitch for%0D%0DSymbol: ${this.assetProfile?.symbol}%0DData Source: ${this.assetProfile?.dataSource}%0D%0DAdditional notes:%0D%0DCan you please take a look?%0D%0DKind regards`;
this.reportDataGlitchMail = `mailto:hi@ghostfol.io?subject=${reportDataGlitchSubject}&body=Hello%0D%0DI would like to report a data glitch for%0D%0DSymbol: ${this.assetProfile?.symbol}%0DData Source: ${this.assetProfile?.dataSource}%0D%0DAdditional notes:%0D%0DCan you please take a look?%0D%0DKind regards`;
if (this.assetProfile?.assetClass) {
this.assetClass = translate(this.assetProfile?.assetClass);

1
apps/client/src/app/components/home-overview/home-overview.html

@ -86,7 +86,6 @@
<div class="col">
<gf-portfolio-performance
class="pb-4"
[deviceType]="deviceType()"
[errors]="errors()"
[isLoading]="isLoadingPerformance()"
[locale]="user()?.settings?.locale"

22
apps/client/src/app/components/portfolio-performance/portfolio-performance.component.html

@ -1,7 +1,7 @@
<div class="container p-0">
<div class="no-gutters row">
<div class="status-container text-muted text-right">
@if (errors?.length > 0 && !isLoading) {
@if (errors()?.length > 0 && !isLoading()) {
<ion-icon
i18n-title
name="time-outline"
@ -10,7 +10,7 @@
/>
}
</div>
@if (isLoading) {
@if (isLoading()) {
<div class="align-items-center d-flex">
<ngx-skeleton-loader
animation="pulse"
@ -24,25 +24,25 @@
}
<div
class="display-4 font-weight-bold m-0 text-center value-container"
[hidden]="isLoading"
[hidden]="isLoading()"
>
<span #value id="value"></span>
</div>
<div class="currency-container flex-grow-1 px-1">
{{ unit }}
{{ unit() }}
</div>
</div>
@if (showDetails) {
@if (showDetails()) {
<div class="row">
<div class="d-flex col justify-content-end">
<gf-value
[colorizeSign]="true"
[isCurrency]="true"
[locale]="locale"
[locale]="locale()"
[value]="
isLoading
isLoading()
? undefined
: performance?.netPerformanceWithCurrencyEffect
: performance().netPerformanceWithCurrencyEffect
"
/>
</div>
@ -50,11 +50,11 @@
<gf-value
[colorizeSign]="true"
[isPercent]="true"
[locale]="locale"
[locale]="locale()"
[value]="
isLoading
isLoading()
? undefined
: performance?.netPerformancePercentageWithCurrencyEffect
: performance().netPerformancePercentageWithCurrencyEffect
"
/>
</div>

103
apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts

@ -13,10 +13,11 @@ import { GfValueComponent } from '@ghostfolio/ui/value';
import {
ChangeDetectionStrategy,
Component,
effect,
ElementRef,
Input,
OnChanges,
ViewChild
inject,
input,
viewChild
} from '@angular/core';
import { IonIcon } from '@ionic/angular/standalone';
import { CountUp } from 'countup.js';
@ -32,58 +33,68 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
styleUrls: ['./portfolio-performance.component.scss'],
templateUrl: './portfolio-performance.component.html'
})
export class GfPortfolioPerformanceComponent implements OnChanges {
@Input() deviceType: string;
@Input() errors: ResponseError['errors'];
@Input() isLoading: boolean;
@Input() locale = getLocale();
@Input() performance: PortfolioPerformance;
@Input() precision: number;
@Input() showDetails: boolean;
@Input() unit: string;
export class GfPortfolioPerformanceComponent {
public readonly errors = input<ResponseError['errors']>();
public readonly isLoading = input<boolean>();
public readonly locale = input<string>(getLocale());
public readonly performance = input.required<PortfolioPerformance>();
public readonly precision = input.required<number, number>({
transform: (value) => {
return value >= 0 ? value : 2;
}
});
public readonly showDetails = input<boolean>(false);
public readonly unit = input.required<string>();
@ViewChild('value') value: ElementRef;
private readonly value =
viewChild.required<ElementRef<HTMLSpanElement>>('value');
public constructor(private notificationService: NotificationService) {
addIcons({ timeOutline });
}
private readonly notificationService = inject(NotificationService);
public ngOnChanges() {
this.precision = this.precision >= 0 ? this.precision : 2;
public constructor() {
addIcons({ timeOutline });
if (this.isLoading) {
if (this.value?.nativeElement) {
this.value.nativeElement.innerHTML = '';
}
} else {
if (isNumber(this.performance?.currentValueInBaseCurrency)) {
new CountUp('value', this.performance?.currentValueInBaseCurrency, {
decimal: getNumberFormatDecimal(this.locale),
decimalPlaces: this.precision,
duration: 1,
separator: getNumberFormatGroup(this.locale)
}).start();
} else if (this.showDetails === false) {
new CountUp(
'value',
this.performance?.netPerformancePercentageWithCurrencyEffect * 100,
{
decimal: getNumberFormatDecimal(this.locale),
decimalPlaces: 2,
duration: 1,
separator: getNumberFormatGroup(this.locale)
}
).start();
effect(() => {
if (this.isLoading()) {
if (this.value().nativeElement) {
this.value().nativeElement.innerHTML = '';
}
} else {
this.value.nativeElement.innerHTML = '*****';
if (isNumber(this.performance().currentValueInBaseCurrency)) {
new CountUp('value', this.performance().currentValueInBaseCurrency, {
decimal: getNumberFormatDecimal(this.locale()),
decimalPlaces: this.precision(),
duration: 1,
separator: getNumberFormatGroup(this.locale())
}).start();
} else if (this.showDetails() === false) {
new CountUp(
'value',
this.performance().netPerformancePercentageWithCurrencyEffect * 100,
{
decimal: getNumberFormatDecimal(this.locale()),
decimalPlaces: 2,
duration: 1,
separator: getNumberFormatGroup(this.locale())
}
).start();
} else {
this.value().nativeElement.innerHTML = '*****';
}
}
}
});
}
public onShowErrors() {
const errorMessageParts = [];
protected onShowErrors() {
const errors = this.errors();
if (!errors?.length) {
return;
}
const errorMessageParts: string[] = [];
for (const error of this.errors) {
for (const error of errors) {
errorMessageParts.push(`${error.symbol} (${error.dataSource})`);
}

2
apps/client/src/app/components/user-account-membership/user-account-membership.component.ts

@ -52,7 +52,7 @@ export class GfUserAccountMembershipComponent {
public priceId: string;
public routerLinkPricing = publicRoutes.pricing.routerLink;
public trySubscriptionMail =
'mailto:hi@ghostfol.io?Subject=Ghostfolio Premium Trial&body=Hello%0D%0DI am interested in Ghostfolio Premium. Can you please send me a coupon code to try it for some time?%0D%0DKind regards';
'mailto:hi@ghostfol.io?subject=Ghostfolio Premium Trial&body=Hello%0D%0DI am interested in Ghostfolio Premium. Can you please send me a coupon code to try it for some time?%0D%0DKind regards';
public user: User;
public constructor(

2
apps/client/src/app/pages/faq/saas/saas-page.html

@ -96,7 +96,7 @@
</mat-card-header>
<mat-card-content
>Request your student discount
<a href="mailto:hi@ghostfol.io?Subject=Student Discount">here</a> with
<a href="mailto:hi@ghostfol.io?subject=Student Discount">here</a> with
your university e-mail address.</mat-card-content
>
</mat-card>

4
apps/client/src/app/pages/pricing/pricing-page.html

@ -332,7 +332,7 @@
}
<ng-container i18n>please</ng-container>
<ng-container>&nbsp;</ng-container>
<a href="mailto:hi@ghostfol.io?Subject=Referral link for..." i18n
<a href="mailto:hi@ghostfol.io?subject=Referral link for..." i18n
>contact us</a
>
<ng-container>&nbsp;</ng-container>
@ -343,7 +343,7 @@
<ng-container>&nbsp;</ng-container>
<ng-container i18n>Request it</ng-container>
<ng-container>&nbsp;</ng-container>
<a href="mailto:hi@ghostfol.io?Subject=Student Discount" i18n>here</a>
<a href="mailto:hi@ghostfol.io?subject=Student Discount" i18n>here</a>
<ng-container>&nbsp;</ng-container>
<ng-container i18n>with your university e-mail address</ng-container>.
</p>

114
apps/client/src/locales/messages.nl.xlf

@ -311,7 +311,7 @@
</trans-unit>
<trans-unit id="8282940047848889809" datatype="html">
<source>Paid</source>
<target state="new">Paid</target>
<target state="translated">Betaald</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">122</context>
@ -387,7 +387,7 @@
</trans-unit>
<trans-unit id="5611965261696422586" datatype="html">
<source>and is driven by the efforts of its <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio/graphs/contributors&quot; i18n-title title=&quot;Contributors to Ghostfolio&quot; &gt;"/>contributors<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/></source>
<target state="new">en wordt gedreven door de inspanningen van zijn <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio/graphs/contributors&quot; title=&quot;Contributors to Ghostfolio&quot; &gt;"/>bijdragers<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/></target>
<target state="translated">en wordt gedreven door de inspanningen van zijn <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;https://github.com/ghostfolio/ghostfolio/graphs/contributors&quot; title=&quot;Contributors to Ghostfolio&quot; &gt;"/>bijdragers<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a &gt;"/></target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/about/overview/about-overview-page.html</context>
<context context-type="linenumber">50</context>
@ -479,7 +479,7 @@
</trans-unit>
<trans-unit id="8410000928786197012" datatype="html">
<source>Watch the Ghostfol.io Trailer on YouTube</source>
<target state="new">Watch the Ghostfol.io Trailer on YouTube</target>
<target state="translated">Bekijk de Ghostfol.io-trailer op YouTube</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/landing/landing-page.html</context>
<context context-type="linenumber">19</context>
@ -751,7 +751,7 @@
</trans-unit>
<trans-unit id="2047393478951255414" datatype="html">
<source>Creation</source>
<target state="new">Creation</target>
<target state="translated">Aanmaakdatum</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">145</context>
@ -899,7 +899,7 @@
</trans-unit>
<trans-unit id="273949409065292025" datatype="html">
<source>Energy</source>
<target state="new">Energy</target>
<target state="translated">Energie</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">94</context>
@ -1127,7 +1127,7 @@
</trans-unit>
<trans-unit id="8793726805339626615" datatype="html">
<source>Ghostfolio in Numbers: Monthly Active Users (MAU)</source>
<target state="new">Ghostfolio in Numbers: Monthly Active Users (MAU)</target>
<target state="translated">Ghostfolio in cijfers: maandelijks actieve gebruikers (MAU)</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/landing/landing-page.html</context>
<context context-type="linenumber">63</context>
@ -1251,7 +1251,7 @@
</trans-unit>
<trans-unit id="4432485267082955422" datatype="html">
<source>Consumer Defensive</source>
<target state="new">Consumer Defensive</target>
<target state="translated">Basisconsumptiegoederen</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">93</context>
@ -1319,7 +1319,7 @@
</trans-unit>
<trans-unit id="3848479214898655176" datatype="html">
<source>Utilities</source>
<target state="new">Utilities</target>
<target state="translated">Nutsbedrijven</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">101</context>
@ -1343,7 +1343,7 @@
</trans-unit>
<trans-unit id="5463045633785723738" datatype="html">
<source>Coupon</source>
<target state="new">Coupon</target>
<target state="translated">Coupon</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">127</context>
@ -1563,7 +1563,7 @@
</trans-unit>
<trans-unit id="8643034887919513109" datatype="html">
<source>Financial Planning</source>
<target state="new">Financial Planning</target>
<target state="translated">Financiële planning</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">108</context>
@ -1707,7 +1707,7 @@
</trans-unit>
<trans-unit id="7410432243549869948" datatype="html">
<source>Duration</source>
<target state="new">Duration</target>
<target state="translated">Looptijd</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">172</context>
@ -1923,7 +1923,7 @@
</trans-unit>
<trans-unit id="6999515396807067782" datatype="html">
<source>Trial</source>
<target state="new">Trial</target>
<target state="translated">Proefperiode</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts</context>
<context context-type="linenumber">126</context>
@ -2071,7 +2071,7 @@
</trans-unit>
<trans-unit id="2691624743109891676" datatype="html">
<source>Consumer Cyclical</source>
<target state="new">Consumer Cyclical</target>
<target state="translated">Cyclische consumptiegoederen</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">92</context>
@ -2467,7 +2467,7 @@
</trans-unit>
<trans-unit id="1541521390115871091" datatype="html">
<source>{VAR_PLURAL, plural, =1 {Profile} other {Profiles}}</source>
<target state="new">{VAR_PLURAL, plural, =1 {Profile} other {Profiles}}</target>
<target state="translated">{VAR_PLURAL, plural, =1 {Profiel} other {Profielen}}</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">249</context>
@ -2707,7 +2707,7 @@
</trans-unit>
<trans-unit id="6131560364436366828" datatype="html">
<source>Apply current market price</source>
<target state="new">Apply current market price</target>
<target state="translated">Huidige marktprijs toepassen</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
<context context-type="linenumber">238</context>
@ -2715,7 +2715,7 @@
</trans-unit>
<trans-unit id="6135731497699355929" datatype="html">
<source>Subscription History</source>
<target state="new">Subscription History</target>
<target state="translated">Abonnementsgeschiedenis</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">136</context>
@ -2867,7 +2867,7 @@
</trans-unit>
<trans-unit id="4102764207131986196" datatype="html">
<source>Contributors to Ghostfolio</source>
<target state="new">Contributors to Ghostfolio</target>
<target state="translated">Bijdragers aan Ghostfolio</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/about/overview/about-overview-page.html</context>
<context context-type="linenumber">54</context>
@ -2907,7 +2907,7 @@
</trans-unit>
<trans-unit id="8186013988289067040" datatype="html">
<source>Code</source>
<target state="new">Code</target>
<target state="translated">Code</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.html</context>
<context context-type="linenumber">159</context>
@ -3215,7 +3215,7 @@
</trans-unit>
<trans-unit id="8340410730497371637" datatype="html">
<source>Communication Services</source>
<target state="new">Communication Services</target>
<target state="translated">Communicatiediensten</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">91</context>
@ -3275,7 +3275,7 @@
</trans-unit>
<trans-unit id="8894377483833272091" datatype="html">
<source>Price</source>
<target state="new">Price</target>
<target state="translated">Prijs</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">171</context>
@ -3283,7 +3283,7 @@
</trans-unit>
<trans-unit id="6418462810730461014" datatype="html">
<source>Data Gathering Frequency</source>
<target state="new">Data Gathering Frequency</target>
<target state="translated">Frequentie van gegevensverzameling</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
<context context-type="linenumber">454</context>
@ -3447,7 +3447,7 @@
</trans-unit>
<trans-unit id="4733690367258997247" datatype="html">
<source>just now</source>
<target state="new">just now</target>
<target state="translated">zojuist</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.component.ts</context>
<context context-type="linenumber">211</context>
@ -3739,7 +3739,7 @@
</trans-unit>
<trans-unit id="2640607428459636406" datatype="html">
<source>Hourly</source>
<target state="new">Hourly</target>
<target state="translated">Elk uur</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">214</context>
@ -3831,7 +3831,7 @@
</trans-unit>
<trans-unit id="3323137014509063489" datatype="html">
<source>Expiration</source>
<target state="new">Expiration</target>
<target state="translated">Vervaldatum</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">204</context>
@ -3951,7 +3951,7 @@
</trans-unit>
<trans-unit id="5515771028435710194" datatype="html">
<source>Loan</source>
<target state="new">Loan</target>
<target state="translated">Lening</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">64</context>
@ -4051,7 +4051,7 @@
</trans-unit>
<trans-unit id="7701575534145602925" datatype="html">
<source>Explore <x id="INTERPOLATION" equiv-text="{{ item.title }}"/></source>
<target state="new">Explore <x id="INTERPOLATION" equiv-text="{{ item.title }}"/></target>
<target state="translated">Verken <x id="INTERPOLATION" equiv-text="{{ item.title }}"/></target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/overview/resources-overview.component.html</context>
<context context-type="linenumber">11</context>
@ -4463,7 +4463,7 @@
</trans-unit>
<trans-unit id="5765523585863707029" datatype="html">
<source>Technology</source>
<target state="new">Technology</target>
<target state="translated">Technologie</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">100</context>
@ -4479,7 +4479,7 @@
</trans-unit>
<trans-unit id="5915287617703658226" datatype="html">
<source>Total</source>
<target state="new">Total</target>
<target state="translated">Totaal</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html</context>
<context context-type="linenumber">155</context>
@ -4599,7 +4599,7 @@
</trans-unit>
<trans-unit id="237127378624497814" datatype="html">
<source>Upgrade to Ghostfolio Premium</source>
<target state="new">Upgrade to Ghostfolio Premium</target>
<target state="translated">Upgraden naar Ghostfolio Premium</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/premium-indicator/premium-indicator.component.html</context>
<context context-type="linenumber">4</context>
@ -4675,7 +4675,7 @@
</trans-unit>
<trans-unit id="9167786874272926575" datatype="html">
<source>Web</source>
<target state="new">Web</target>
<target state="translated">Web</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">120</context>
@ -4747,7 +4747,7 @@
</trans-unit>
<trans-unit id="1806667489382256324" datatype="html">
<source>Category</source>
<target state="new">Category</target>
<target state="translated">Categorie</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">77</context>
@ -4779,7 +4779,7 @@
</trans-unit>
<trans-unit id="6300009182465422833" datatype="html">
<source>Ghostfolio in Numbers: Pulls on Docker Hub</source>
<target state="new">Ghostfolio in Numbers: Pulls on Docker Hub</target>
<target state="translated">Ghostfolio in cijfers: downloads op Docker Hub</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/landing/landing-page.html</context>
<context context-type="linenumber">101</context>
@ -5151,7 +5151,7 @@
</trans-unit>
<trans-unit id="6945194064393203435" datatype="html">
<source>Basic Materials</source>
<target state="new">Basic Materials</target>
<target state="translated">Basismaterialen</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">90</context>
@ -5279,7 +5279,7 @@
</trans-unit>
<trans-unit id="2756436642316668410" datatype="html">
<source>Oops! Could not delete the asset profiles.</source>
<target state="new">Oops! Could not delete the asset profiles.</target>
<target state="translated">Oeps! De activaprofielen konden niet worden verwijderd.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">52</context>
@ -5609,7 +5609,7 @@
</trans-unit>
<trans-unit id="2191562378582791940" datatype="html">
<source>Stock Tracking</source>
<target state="new">Stock Tracking</target>
<target state="translated">Aandelen volgen</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">111</context>
@ -5689,7 +5689,7 @@
</trans-unit>
<trans-unit id="6075566839446502414" datatype="html">
<source>Available on</source>
<target state="new">Available on</target>
<target state="translated">Beschikbaar op</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/product-page.html</context>
<context context-type="linenumber">130</context>
@ -5897,7 +5897,7 @@
</trans-unit>
<trans-unit id="4581276194280068721" datatype="html">
<source>Industrials</source>
<target state="new">Industrials</target>
<target state="translated">Industrie</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">97</context>
@ -6013,7 +6013,7 @@
</trans-unit>
<trans-unit id="7194017842579795231" datatype="html">
<source>Healthcare</source>
<target state="new">Healthcare</target>
<target state="translated">Gezondheidszorg</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">96</context>
@ -6029,7 +6029,7 @@
</trans-unit>
<trans-unit id="9028573429495160158" datatype="html">
<source>Portfolio Filters</source>
<target state="new">Portfolio Filters</target>
<target state="translated">Portefeuillefilters</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html</context>
<context context-type="linenumber">63</context>
@ -6285,7 +6285,7 @@
</trans-unit>
<trans-unit id="3995811497329884593" datatype="html">
<source>Expires <x id="INTERPOLATION" equiv-text="{{ formatDistanceToNow(element.subscription.expiresAt) }}"/> (<x id="INTERPOLATION_1" equiv-text="{{ element.subscription.expiresAt | date: defaultDateFormat }}"/>)</source>
<target state="new">Expires <x id="INTERPOLATION" equiv-text="{{ formatDistanceToNow(element.subscription.expiresAt) }}"/> (<x id="INTERPOLATION_1" equiv-text="{{ element.subscription.expiresAt | date: defaultDateFormat }}"/>)</target>
<target state="translated">Verloopt <x id="INTERPOLATION" equiv-text="{{ formatDistanceToNow(element.subscription.expiresAt) }}"/> (<x id="INTERPOLATION_1" equiv-text="{{ element.subscription.expiresAt | date: defaultDateFormat }}"/>)</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
<context context-type="linenumber">34</context>
@ -6313,7 +6313,7 @@
</trans-unit>
<trans-unit id="2522011507610634749" datatype="html">
<source>Fetch market price</source>
<target state="new">Fetch market price</target>
<target state="translated">Marktprijs ophalen</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html</context>
<context context-type="linenumber">40</context>
@ -6389,7 +6389,7 @@
</trans-unit>
<trans-unit id="2839679566742557360" datatype="html">
<source>Find a holding...</source>
<target state="new">Find a holding...</target>
<target state="translated">Zoek een positie...</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">448</context>
@ -6442,7 +6442,7 @@
</trans-unit>
<trans-unit id="2988589012964101797" datatype="html">
<source>Daily</source>
<target state="new">Daily</target>
<target state="translated">Dagelijks</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts</context>
<context context-type="linenumber">210</context>
@ -6570,7 +6570,7 @@
</trans-unit>
<trans-unit id="4943376738492797606" datatype="html">
<source>Jump to a page...</source>
<target state="new">Jump to a page...</target>
<target state="translated">Ga naar een pagina...</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/assistant/assistant.component.ts</context>
<context context-type="linenumber">449</context>
@ -6758,7 +6758,7 @@
</trans-unit>
<trans-unit id="1284643802050750978" datatype="html">
<source>Oops! Could not delete the asset profile.</source>
<target state="new">Oops! Could not delete the asset profile.</target>
<target state="translated">Oeps! Het activaprofiel kon niet worden verwijderd.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">51</context>
@ -6862,7 +6862,7 @@
</trans-unit>
<trans-unit id="1518717392874668219" datatype="html">
<source>Do you really want to delete these <x id="count" equiv-text="assetProfileCount"/> asset profiles?</source>
<target state="new">Do you really want to delete these <x id="count" equiv-text="assetProfileCount"/> asset profiles?</target>
<target state="translated">Wil je deze <x id="count" equiv-text="assetProfileCount"/> activaprofielen echt verwijderen?</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.service.ts</context>
<context context-type="linenumber">67</context>
@ -7062,7 +7062,7 @@
</trans-unit>
<trans-unit id="8375528527939577247" datatype="html">
<source><x id="START_BLOCK_IF" equiv-text="@if ( assetProfile?.currency &amp;&amp; data.baseCurrency !== assetProfile?.currency ) {"/> Change with currency effect <x id="CLOSE_BLOCK_IF" equiv-text="}"/><x id="START_BLOCK_ELSE" equiv-text="@else {"/> Change <x id="CLOSE_BLOCK_ELSE" equiv-text="}"/></source>
<target state="new"><x id="START_BLOCK_IF" equiv-text="@if ( SymbolProfile?.currency &amp;&amp; data.baseCurrency !== SymbolProfile?.currency ) {"/> Verandering met valuta effect <x id="CLOSE_BLOCK_IF" equiv-text="}"/><x id="START_BLOCK_ELSE" equiv-text="@else {"/> Verandering <x id="CLOSE_BLOCK_ELSE" equiv-text="}"/></target>
<target state="translated"><x id="START_BLOCK_IF" equiv-text="@if ( assetProfile?.currency &amp;&amp; data.baseCurrency !== assetProfile?.currency ) {"/> Verandering met valuta-effect <x id="CLOSE_BLOCK_IF" equiv-text="}"/><x id="START_BLOCK_ELSE" equiv-text="@else {"/> Verandering <x id="CLOSE_BLOCK_ELSE" equiv-text="}"/></target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">63</context>
@ -7078,7 +7078,7 @@
</trans-unit>
<trans-unit id="6608617124920241143" datatype="html">
<source><x id="START_BLOCK_IF" equiv-text="@if ( assetProfile?.currency &amp;&amp; data.baseCurrency !== assetProfile?.currency ) {"/> Performance with currency effect <x id="CLOSE_BLOCK_IF" equiv-text="}"/><x id="START_BLOCK_ELSE" equiv-text="@else {"/> Performance <x id="CLOSE_BLOCK_ELSE" equiv-text="}"/></source>
<target state="new"><x id="START_BLOCK_IF" equiv-text="@if ( SymbolProfile?.currency &amp;&amp; data.baseCurrency !== SymbolProfile?.currency ) {"/> Prestatie met valuta effect <x id="CLOSE_BLOCK_IF" equiv-text="}"/><x id="START_BLOCK_ELSE" equiv-text="@else {"/> Prestatie <x id="CLOSE_BLOCK_ELSE" equiv-text="}"/></target>
<target state="translated"><x id="START_BLOCK_IF" equiv-text="@if ( assetProfile?.currency &amp;&amp; data.baseCurrency !== assetProfile?.currency ) {"/> Prestaties met valuta-effect <x id="CLOSE_BLOCK_IF" equiv-text="}"/><x id="START_BLOCK_ELSE" equiv-text="@else {"/> Prestaties <x id="CLOSE_BLOCK_ELSE" equiv-text="}"/></target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html</context>
<context context-type="linenumber">83</context>
@ -7126,7 +7126,7 @@
</trans-unit>
<trans-unit id="8466521722895614996" datatype="html">
<source><x id="PH" equiv-text="codeToCopy"/> has been copied to the clipboard</source>
<target state="new"><x id="PH" equiv-text="codeToCopy"/> has been copied to the clipboard</target>
<target state="translated"><x id="PH" equiv-text="codeToCopy"/> is naar het klembord gekopieerd</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-overview/admin-overview.component.ts</context>
<context context-type="linenumber">382</context>
@ -7146,7 +7146,7 @@
</trans-unit>
<trans-unit id="6389025757025171607" datatype="html">
<source>Compare Ghostfolio to <x id="INTERPOLATION" equiv-text="{{ personalFinanceTool.name }}"/> - <x id="INTERPOLATION_1" equiv-text="{{ personalFinanceTool.slogan }}"/></source>
<target state="new">Compare Ghostfolio to <x id="INTERPOLATION" equiv-text="{{ personalFinanceTool.name }}"/> - <x id="INTERPOLATION_1" equiv-text="{{ personalFinanceTool.slogan }}"/></target>
<target state="translated">Vergelijk Ghostfolio met <x id="INTERPOLATION" equiv-text="{{ personalFinanceTool.name }}"/> - <x id="INTERPOLATION_1" equiv-text="{{ personalFinanceTool.slogan }}"/></target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html</context>
<context context-type="linenumber">32</context>
@ -7202,7 +7202,7 @@
</trans-unit>
<trans-unit id="7521745345796915891" datatype="html">
<source>Financial Services</source>
<target state="new">Financial Services</target>
<target state="translated">Financiële diensten</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">95</context>
@ -7230,7 +7230,7 @@
</trans-unit>
<trans-unit id="7547813413369998179" datatype="html">
<source>Delete <x id="INTERPOLATION" equiv-text="{{ selection.selected.length &gt; 1 ? selection.selected.length : &apos;&apos; }}"/> <x id="ICU" equiv-text="{selection.selected.length, plural, =1 {Profile} other {Profiles} }"/></source>
<target state="new">Delete <x id="INTERPOLATION" equiv-text="{{ selection.selected.length &gt; 1 ? selection.selected.length : &apos;&apos; }}"/> <x id="ICU" equiv-text="{selection.selected.length, plural, =1 {Profile} other {Profiles} }"/></target>
<target state="translated">Verwijder <x id="INTERPOLATION" equiv-text="{{ selection.selected.length &gt; 1 ? selection.selected.length : &apos;&apos; }}"/> <x id="ICU" equiv-text="{selection.selected.length, plural, =1 {Profile} other {Profiles} }"/></target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
<context context-type="linenumber">244</context>
@ -7286,7 +7286,7 @@
</trans-unit>
<trans-unit id="3527222903865200876" datatype="html">
<source>Dividend Tracking</source>
<target state="new">Dividend Tracking</target>
<target state="translated">Dividend volgen</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">105</context>
@ -7346,7 +7346,7 @@
</trans-unit>
<trans-unit id="1550367033316836764" datatype="html">
<source>Investment Research</source>
<target state="new">Investment Research</target>
<target state="translated">Beleggingsonderzoek</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">109</context>
@ -7620,7 +7620,7 @@
</trans-unit>
<trans-unit id="1789421195684815451" datatype="html">
<source>Check the system status at</source>
<target state="new">Check the system status at</target>
<target state="translated">Controleer de systeemstatus op</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/about/overview/about-overview-page.html</context>
<context context-type="linenumber">59</context>
@ -7760,7 +7760,7 @@
</trans-unit>
<trans-unit id="1237494164624005096" datatype="html">
<source>Ghostfolio in Numbers: Stars on GitHub</source>
<target state="new">Ghostfolio in Numbers: Stars on GitHub</target>
<target state="translated">Ghostfolio in cijfers: sterren op GitHub</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/landing/landing-page.html</context>
<context context-type="linenumber">82</context>
@ -8082,7 +8082,7 @@
</trans-unit>
<trans-unit id="3910789128199500333" datatype="html">
<source>ETF Tracking</source>
<target state="new">ETF Tracking</target>
<target state="translated">ETF’s volgen</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">106</context>

2
prisma/schema.prisma

@ -203,11 +203,11 @@ model SymbolProfile {
isActive Boolean @default(true)
isin String?
name String?
updatedAt DateTime @updatedAt
scraperConfiguration Json?
sectors Json?
symbol String
symbolMapping Json?
updatedAt DateTime @updatedAt
url String?
user User? @relation(fields: [userId], onDelete: Cascade, references: [id])
userId String?

Loading…
Cancel
Save