Browse Source

Merge branch 'main' into bugfix/fix-account-cluster-risk-rules-for-no-accounts

pull/5202/head
Thomas Kaul 3 days ago
committed by GitHub
parent
commit
3cef88c01d
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 3
      CHANGELOG.md
  2. 2
      apps/client/src/app/app-routing.module.ts
  3. 36
      apps/client/src/app/components/accounts-table/accounts-table.component.ts
  4. 33
      apps/client/src/app/components/accounts-table/accounts-table.module.ts
  5. 4
      apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
  6. 4
      apps/client/src/app/pages/accounts/accounts-page.component.ts
  7. 43
      apps/client/src/app/pages/faq/faq-page-routing.module.ts
  8. 17
      apps/client/src/app/pages/faq/faq-page.component.ts
  9. 21
      apps/client/src/app/pages/faq/faq-page.module.ts
  10. 34
      apps/client/src/app/pages/faq/faq-page.routes.ts
  11. 21
      apps/client/src/app/pages/faq/overview/faq-overview-page-routing.module.ts
  12. 17
      apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts
  13. 20
      apps/client/src/app/pages/faq/overview/faq-overview-page.module.ts
  14. 14
      apps/client/src/app/pages/faq/overview/faq-overview-page.routes.ts
  15. 22
      apps/client/src/app/pages/faq/saas/saas-page-routing.module.ts
  16. 17
      apps/client/src/app/pages/faq/saas/saas-page.component.ts
  17. 20
      apps/client/src/app/pages/faq/saas/saas-page.module.ts
  18. 15
      apps/client/src/app/pages/faq/saas/saas-page.routes.ts
  19. 22
      apps/client/src/app/pages/faq/self-hosting/self-hosting-page-routing.module.ts
  20. 12
      apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts
  21. 20
      apps/client/src/app/pages/faq/self-hosting/self-hosting-page.module.ts
  22. 15
      apps/client/src/app/pages/faq/self-hosting/self-hosting-page.routes.ts
  23. 32
      apps/client/src/locales/messages.ca.xlf

3
CHANGELOG.md

@ -17,7 +17,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Extended the export functionality by custom asset profiles
- Improved the platform icon in the create or update platform dialog of the admin control
- Localized the durations of the coupon system
- Refactored the Frequently Asked Questions (FAQ) pages to standalone
- Refactored the resources pages to standalone
- Refactored the accounts table component to standalone
- Improved the language localization for Catalan (`ca`)
- Improved the language localization for Dutch (`nl`)
- Improved the language localization for German (`de`)
@ -27,6 +29,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
- Fixed the horizontal ellipsis icon in the accounts table component
- Fixed the static portfolio analysis rule for no accounts: _Account Cluster Risks_ (Current Investment)
- Fixed the static portfolio analysis rule for no accounts: _Account Cluster Risks_ (Single Account)

2
apps/client/src/app/app-routing.module.ts

@ -61,7 +61,7 @@ const routes: Routes = [
{
path: publicRoutes.faq.path,
loadChildren: () =>
import('./pages/faq/faq-page.module').then((m) => m.FaqPageModule)
import('./pages/faq/faq-page.routes').then((m) => m.routes)
},
{
canActivate: [AuthGuard],

36
apps/client/src/app/components/accounts-table/accounts-table.component.ts

@ -1,7 +1,10 @@
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { getLocale } from '@ghostfolio/common/helper';
import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo';
import { GfValueComponent } from '@ghostfolio/ui/value';
import { CommonModule } from '@angular/common';
import {
ChangeDetectionStrategy,
Component,
@ -12,30 +15,45 @@ import {
Output,
ViewChild
} from '@angular/core';
import { MatSort } from '@angular/material/sort';
import { MatTableDataSource } from '@angular/material/table';
import { Router } from '@angular/router';
import { MatButtonModule } from '@angular/material/button';
import { MatMenuModule } from '@angular/material/menu';
import { MatSort, MatSortModule } from '@angular/material/sort';
import { MatTableDataSource, MatTableModule } from '@angular/material/table';
import { Router, RouterModule } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone';
import { Account as AccountModel } from '@prisma/client';
import { addIcons } from 'ionicons';
import {
arrowRedoOutline,
createOutline,
documentTextOutline,
ellipsisHorizontalOutline,
ellipsisHorizontal,
eyeOffOutline,
trashOutline
} from 'ionicons/icons';
import { get } from 'lodash';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { Subject, Subscription } from 'rxjs';
@Component({
selector: 'gf-accounts-table',
changeDetection: ChangeDetectionStrategy.OnPush,
templateUrl: './accounts-table.component.html',
imports: [
CommonModule,
GfEntityLogoComponent,
GfValueComponent,
IonIcon,
MatButtonModule,
MatMenuModule,
MatSortModule,
MatTableModule,
NgxSkeletonLoaderModule,
RouterModule
],
selector: 'gf-accounts-table',
styleUrls: ['./accounts-table.component.scss'],
standalone: false
templateUrl: './accounts-table.component.html'
})
export class AccountsTableComponent implements OnChanges, OnDestroy {
export class GfAccountsTableComponent implements OnChanges, OnDestroy {
@Input() accounts: AccountModel[];
@Input() baseCurrency: string;
@Input() deviceType: string;
@ -72,7 +90,7 @@ export class AccountsTableComponent implements OnChanges, OnDestroy {
arrowRedoOutline,
createOutline,
documentTextOutline,
ellipsisHorizontalOutline,
ellipsisHorizontal,
eyeOffOutline,
trashOutline
});

33
apps/client/src/app/components/accounts-table/accounts-table.module.ts

@ -1,33 +0,0 @@
import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo';
import { GfValueComponent } from '@ghostfolio/ui/value';
import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { MatMenuModule } from '@angular/material/menu';
import { MatSortModule } from '@angular/material/sort';
import { MatTableModule } from '@angular/material/table';
import { RouterModule } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone';
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
import { AccountsTableComponent } from './accounts-table.component';
@NgModule({
declarations: [AccountsTableComponent],
exports: [AccountsTableComponent],
imports: [
CommonModule,
GfEntityLogoComponent,
GfValueComponent,
IonIcon,
MatButtonModule,
MatMenuModule,
MatSortModule,
MatTableModule,
NgxSkeletonLoaderModule,
RouterModule
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class GfAccountsTableModule {}

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

@ -1,5 +1,5 @@
import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface';
import { GfAccountsTableModule } from '@ghostfolio/client/components/accounts-table/accounts-table.module';
import { GfAccountsTableComponent } from '@ghostfolio/client/components/accounts-table/accounts-table.component';
import { GfDialogFooterModule } from '@ghostfolio/client/components/dialog-footer/dialog-footer.module';
import { GfDialogHeaderModule } from '@ghostfolio/client/components/dialog-header/dialog-header.module';
import { DataService } from '@ghostfolio/client/services/data.service';
@ -71,7 +71,7 @@ import { HoldingDetailDialogParams } from './interfaces/interfaces';
host: { class: 'd-flex flex-column h-100' },
imports: [
CommonModule,
GfAccountsTableModule,
GfAccountsTableComponent,
GfActivitiesTableComponent,
GfDataProviderCreditsComponent,
GfDialogFooterModule,

4
apps/client/src/app/pages/accounts/accounts-page.component.ts

@ -4,7 +4,7 @@ import { UpdateAccountDto } from '@ghostfolio/api/app/account/update-account.dto
import { AccountDetailDialog } from '@ghostfolio/client/components/account-detail-dialog/account-detail-dialog.component';
import { GfAccountDetailDialogModule } from '@ghostfolio/client/components/account-detail-dialog/account-detail-dialog.module';
import { AccountDetailDialogParams } from '@ghostfolio/client/components/account-detail-dialog/interfaces/interfaces';
import { GfAccountsTableModule } from '@ghostfolio/client/components/accounts-table/accounts-table.module';
import { GfAccountsTableComponent } from '@ghostfolio/client/components/accounts-table/accounts-table.component';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
@ -30,7 +30,7 @@ import { GfTransferBalanceDialogComponent } from './transfer-balance/transfer-ba
host: { class: 'has-fab page' },
imports: [
GfAccountDetailDialogModule,
GfAccountsTableModule,
GfAccountsTableComponent,
MatButtonModule,
RouterModule
],

43
apps/client/src/app/pages/faq/faq-page-routing.module.ts

@ -1,43 +0,0 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { FaqPageComponent } from './faq-page.component';
const routes: Routes = [
{
canActivate: [AuthGuard],
children: [
{
path: '',
loadChildren: () =>
import('./overview/faq-overview-page.module').then(
(m) => m.FaqOverviewPageModule
)
},
{
path: publicRoutes.faq.subRoutes.saas.path,
loadChildren: () =>
import('./saas/saas-page.module').then((m) => m.SaasPageModule)
},
{
path: publicRoutes.faq.subRoutes.selfHosting.path,
loadChildren: () =>
import('./self-hosting/self-hosting-page.module').then(
(m) => m.SelfHostingPageModule
)
}
],
component: FaqPageComponent,
path: '',
title: publicRoutes.faq.title
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class FaqPageRoutingModule {}

17
apps/client/src/app/pages/faq/faq-page.component.ts

@ -3,7 +3,15 @@ import { TabConfiguration } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Component, OnDestroy, OnInit } from '@angular/core';
import {
CUSTOM_ELEMENTS_SCHEMA,
Component,
OnDestroy,
OnInit
} from '@angular/core';
import { MatTabsModule } from '@angular/material/tabs';
import { RouterModule } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone';
import { addIcons } from 'ionicons';
import { cloudyOutline, readerOutline, serverOutline } from 'ionicons/icons';
import { DeviceDetectorService } from 'ngx-device-detector';
@ -11,12 +19,13 @@ import { Subject } from 'rxjs';
@Component({
host: { class: 'page has-tabs' },
imports: [IonIcon, MatTabsModule, RouterModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
selector: 'gf-faq-page',
styleUrls: ['./faq-page.scss'],
templateUrl: './faq-page.html',
standalone: false
templateUrl: './faq-page.html'
})
export class FaqPageComponent implements OnDestroy, OnInit {
export class GfFaqPageComponent implements OnDestroy, OnInit {
public deviceType: string;
public hasPermissionForSubscription: boolean;
public tabs: TabConfiguration[] = [];

21
apps/client/src/app/pages/faq/faq-page.module.ts

@ -1,21 +0,0 @@
import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { MatTabsModule } from '@angular/material/tabs';
import { RouterModule } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone';
import { FaqPageRoutingModule } from './faq-page-routing.module';
import { FaqPageComponent } from './faq-page.component';
@NgModule({
declarations: [FaqPageComponent],
imports: [
CommonModule,
FaqPageRoutingModule,
IonIcon,
MatTabsModule,
RouterModule
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class FaqPageModule {}

34
apps/client/src/app/pages/faq/faq-page.routes.ts

@ -0,0 +1,34 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { GfFaqPageComponent } from './faq-page.component';
export const routes: Routes = [
{
canActivate: [AuthGuard],
children: [
{
path: '',
loadChildren: () =>
import('./overview/faq-overview-page.routes').then((m) => m.routes)
},
{
path: publicRoutes.faq.subRoutes.saas.path,
loadChildren: () =>
import('./saas/saas-page.routes').then((m) => m.routes)
},
{
path: publicRoutes.faq.subRoutes.selfHosting.path,
loadChildren: () =>
import('./self-hosting/self-hosting-page.routes').then(
(m) => m.routes
)
}
],
component: GfFaqPageComponent,
path: '',
title: publicRoutes.faq.title
}
];

21
apps/client/src/app/pages/faq/overview/faq-overview-page-routing.module.ts

@ -1,21 +0,0 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { FaqOverviewPageComponent } from './faq-overview-page.component';
const routes: Routes = [
{
canActivate: [AuthGuard],
component: FaqOverviewPageComponent,
path: '',
title: $localize`Frequently Asked Questions (FAQ)`
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class FaqOverviewPageRoutingModule {}

17
apps/client/src/app/pages/faq/overview/faq-overview-page.component.ts

@ -1,18 +1,27 @@
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { User } from '@ghostfolio/common/interfaces';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { ChangeDetectorRef, Component, OnDestroy } from '@angular/core';
import {
ChangeDetectorRef,
Component,
CUSTOM_ELEMENTS_SCHEMA,
OnDestroy
} from '@angular/core';
import { MatCardModule } from '@angular/material/card';
import { RouterModule } from '@angular/router';
import { Subject, takeUntil } from 'rxjs';
@Component({
host: { class: 'page' },
imports: [GfPremiumIndicatorComponent, MatCardModule, RouterModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
selector: 'gf-faq-overview-page',
styleUrls: ['./faq-overview-page.scss'],
templateUrl: './faq-overview-page.html',
standalone: false
templateUrl: './faq-overview-page.html'
})
export class FaqOverviewPageComponent implements OnDestroy {
export class GfFaqOverviewPageComponent implements OnDestroy {
public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${publicRoutes.pricing.path}`;
public routerLinkFeatures = publicRoutes.features.routerLink;
public user: User;

20
apps/client/src/app/pages/faq/overview/faq-overview-page.module.ts

@ -1,20 +0,0 @@
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { MatCardModule } from '@angular/material/card';
import { FaqOverviewPageRoutingModule } from './faq-overview-page-routing.module';
import { FaqOverviewPageComponent } from './faq-overview-page.component';
@NgModule({
declarations: [FaqOverviewPageComponent],
imports: [
CommonModule,
FaqOverviewPageRoutingModule,
GfPremiumIndicatorComponent,
MatCardModule
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class FaqOverviewPageModule {}

14
apps/client/src/app/pages/faq/overview/faq-overview-page.routes.ts

@ -0,0 +1,14 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { Routes } from '@angular/router';
import { GfFaqOverviewPageComponent } from './faq-overview-page.component';
export const routes: Routes = [
{
canActivate: [AuthGuard],
component: GfFaqOverviewPageComponent,
path: '',
title: $localize`Frequently Asked Questions (FAQ)`
}
];

22
apps/client/src/app/pages/faq/saas/saas-page-routing.module.ts

@ -1,22 +0,0 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { SaasPageComponent } from './saas-page.component';
const routes: Routes = [
{
canActivate: [AuthGuard],
component: SaasPageComponent,
path: '',
title: `${publicRoutes.faq.subRoutes.saas.title} - ${publicRoutes.faq.title}`
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class SaasPageRoutingModule {}

17
apps/client/src/app/pages/faq/saas/saas-page.component.ts

@ -1,18 +1,27 @@
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { User } from '@ghostfolio/common/interfaces';
import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { ChangeDetectorRef, Component, OnDestroy } from '@angular/core';
import {
ChangeDetectorRef,
Component,
CUSTOM_ELEMENTS_SCHEMA,
OnDestroy
} from '@angular/core';
import { MatCardModule } from '@angular/material/card';
import { RouterModule } from '@angular/router';
import { Subject, takeUntil } from 'rxjs';
@Component({
host: { class: 'page' },
imports: [GfPremiumIndicatorComponent, MatCardModule, RouterModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
selector: 'gf-saas-page',
styleUrls: ['./saas-page.scss'],
templateUrl: './saas-page.html',
standalone: false
templateUrl: './saas-page.html'
})
export class SaasPageComponent implements OnDestroy {
export class GfSaasPageComponent implements OnDestroy {
public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${publicRoutes.pricing.path}`;
public routerLinkAccount = internalRoutes.account.routerLink;
public routerLinkAccountMembership =

20
apps/client/src/app/pages/faq/saas/saas-page.module.ts

@ -1,20 +0,0 @@
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { MatCardModule } from '@angular/material/card';
import { SaasPageRoutingModule } from './saas-page-routing.module';
import { SaasPageComponent } from './saas-page.component';
@NgModule({
declarations: [SaasPageComponent],
imports: [
CommonModule,
GfPremiumIndicatorComponent,
MatCardModule,
SaasPageRoutingModule
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class SaasPageModule {}

15
apps/client/src/app/pages/faq/saas/saas-page.routes.ts

@ -0,0 +1,15 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { GfSaasPageComponent } from './saas-page.component';
export const routes: Routes = [
{
canActivate: [AuthGuard],
component: GfSaasPageComponent,
path: '',
title: `${publicRoutes.faq.subRoutes.saas.title} - ${publicRoutes.faq.title}`
}
];

22
apps/client/src/app/pages/faq/self-hosting/self-hosting-page-routing.module.ts

@ -1,22 +0,0 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { SelfHostingPageComponent } from './self-hosting-page.component';
const routes: Routes = [
{
canActivate: [AuthGuard],
component: SelfHostingPageComponent,
path: '',
title: `${publicRoutes.faq.subRoutes.selfHosting.title} - ${publicRoutes.faq.title}`
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class SelfHostingPageRoutingModule {}

12
apps/client/src/app/pages/faq/self-hosting/self-hosting-page.component.ts

@ -1,16 +1,20 @@
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { Component, OnDestroy } from '@angular/core';
import { CUSTOM_ELEMENTS_SCHEMA, Component, OnDestroy } from '@angular/core';
import { MatCardModule } from '@angular/material/card';
import { RouterModule } from '@angular/router';
import { Subject } from 'rxjs';
@Component({
host: { class: 'page' },
imports: [GfPremiumIndicatorComponent, MatCardModule, RouterModule],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
selector: 'gf-self-hosting-page',
styleUrls: ['./self-hosting-page.scss'],
templateUrl: './self-hosting-page.html',
standalone: false
templateUrl: './self-hosting-page.html'
})
export class SelfHostingPageComponent implements OnDestroy {
export class GfSelfHostingPageComponent implements OnDestroy {
public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${publicRoutes.pricing.path}`;
private unsubscribeSubject = new Subject<void>();

20
apps/client/src/app/pages/faq/self-hosting/self-hosting-page.module.ts

@ -1,20 +0,0 @@
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { MatCardModule } from '@angular/material/card';
import { SelfHostingPageRoutingModule } from './self-hosting-page-routing.module';
import { SelfHostingPageComponent } from './self-hosting-page.component';
@NgModule({
declarations: [SelfHostingPageComponent],
imports: [
CommonModule,
GfPremiumIndicatorComponent,
MatCardModule,
SelfHostingPageRoutingModule
],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class SelfHostingPageModule {}

15
apps/client/src/app/pages/faq/self-hosting/self-hosting-page.routes.ts

@ -0,0 +1,15 @@
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Routes } from '@angular/router';
import { GfSelfHostingPageComponent } from './self-hosting-page.component';
export const routes: Routes = [
{
canActivate: [AuthGuard],
component: GfSelfHostingPageComponent,
path: '',
title: `${publicRoutes.faq.subRoutes.selfHosting.title} - ${publicRoutes.faq.title}`
}
];

32
apps/client/src/locales/messages.ca.xlf

@ -5890,7 +5890,7 @@
</trans-unit>
<trans-unit id="7608037008789240367" datatype="html">
<source>Asset Sub Class</source>
<target state="new">Asset Sub Class</target>
<target state="translated">Subclasse d’actiu</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">7</context>
@ -5898,7 +5898,7 @@
</trans-unit>
<trans-unit id="8903954975609359428" datatype="html">
<source>Buy and sell</source>
<target state="new">Buy and sell</target>
<target state="translated">Comprar i vendre</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">8</context>
@ -5906,7 +5906,7 @@
</trans-unit>
<trans-unit id="7027401708987643293" datatype="html">
<source>Core</source>
<target state="new">Core</target>
<target state="translated">Bàsic</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">10</context>
@ -5914,7 +5914,7 @@
</trans-unit>
<trans-unit id="3298117765569632011" datatype="html">
<source>Switch to Ghostfolio Premium or Ghostfolio Open Source easily</source>
<target state="new">Switch to Ghostfolio Premium or Ghostfolio Open Source easily</target>
<target state="translated">Canvia fàcilment a Ghostfolio Premium o Ghostfolio Open Source</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">12</context>
@ -5922,7 +5922,7 @@
</trans-unit>
<trans-unit id="1631940846690193897" datatype="html">
<source>Switch to Ghostfolio Premium easily</source>
<target state="new">Switch to Ghostfolio Premium easily</target>
<target state="translated">Canvia fàcilment a Ghostfolio Premium</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">13</context>
@ -5930,7 +5930,7 @@
</trans-unit>
<trans-unit id="1921273115613254799" datatype="html">
<source>Switch to Ghostfolio Open Source or Ghostfolio Basic easily</source>
<target state="new">Switch to Ghostfolio Open Source or Ghostfolio Basic easily</target>
<target state="translated">Canvia fàcilment a Ghostfolio Open Source o Ghostfolio Basic</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">14</context>
@ -5938,7 +5938,7 @@
</trans-unit>
<trans-unit id="6268646680388419543" datatype="html">
<source>Emergency Fund</source>
<target state="new">Emergency Fund</target>
<target state="translated">Fons d’emergència</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">15</context>
@ -5946,7 +5946,7 @@
</trans-unit>
<trans-unit id="5036857680734170026" datatype="html">
<source>Grant</source>
<target state="new">Grant</target>
<target state="translated">Subvenció</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">17</context>
@ -5954,7 +5954,7 @@
</trans-unit>
<trans-unit id="2963674907100579427" datatype="html">
<source>Higher Risk</source>
<target state="new">Higher Risk</target>
<target state="translated">Risc Alt</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">18</context>
@ -5962,7 +5962,7 @@
</trans-unit>
<trans-unit id="687928208076721343" datatype="html">
<source>This activity already exists.</source>
<target state="new">This activity already exists.</target>
<target state="translated">Aquesta activitat ja existeix.</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">19</context>
@ -5970,7 +5970,7 @@
</trans-unit>
<trans-unit id="80663871075536039" datatype="html">
<source>Japan</source>
<target state="new">Japan</target>
<target state="translated">Japó</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">88</context>
@ -5978,7 +5978,7 @@
</trans-unit>
<trans-unit id="4152514811781104574" datatype="html">
<source>Lower Risk</source>
<target state="new">Lower Risk</target>
<target state="translated">Risc Baix</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">20</context>
@ -5986,7 +5986,7 @@
</trans-unit>
<trans-unit id="5403684285319082289" datatype="html">
<source>Month</source>
<target state="new">Month</target>
<target state="translated">Mes</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">21</context>
@ -5994,7 +5994,7 @@
</trans-unit>
<trans-unit id="4845030128243887325" datatype="html">
<source>Months</source>
<target state="new">Months</target>
<target state="translated">Mesos</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">22</context>
@ -6002,7 +6002,7 @@
</trans-unit>
<trans-unit id="8693603235657020323" datatype="html">
<source>Other</source>
<target state="new">Other</target>
<target state="translated">Altres</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">23</context>
@ -6014,7 +6014,7 @@
</trans-unit>
<trans-unit id="6333857424161463201" datatype="html">
<source>Preset</source>
<target state="new">Preset</target>
<target state="translated">Predefinit</target>
<context-group purpose="location">
<context context-type="sourcefile">libs/ui/src/lib/i18n.ts</context>
<context context-type="linenumber">25</context>

Loading…
Cancel
Save