diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6f252e991..feac50910 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- Adapted the options of the date range selector in the assistant dynamically based on the user’s first activity
+- Migrated the `@ghostfolio/ui/assistant` component to control flow
+- Migrated the `@ghostfolio/ui/value` component to control flow
+- Improved the language localization for Chinese (`zh`)
+- Improved the language localization for Portuguese (`pt`)
## 2.171.0 - 2025-06-15
diff --git a/apps/api/src/app/endpoints/ai/ai.service.ts b/apps/api/src/app/endpoints/ai/ai.service.ts
index 8807e67bf..df6b7749a 100644
--- a/apps/api/src/app/endpoints/ai/ai.service.ts
+++ b/apps/api/src/app/endpoints/ai/ai.service.ts
@@ -30,7 +30,7 @@ export class AiService {
});
const holdingsTable = [
- '| Name | Symbol | Currency | Asset Class | Asset Sub Class | Allocation in Percentage |',
+ '| Name | Symbol | Currency | Asset Class | Asset Sub Class | Allocation in Percentage |',
'| --- | --- | --- | --- | --- | --- |',
...Object.values(holdings)
.sort((a, b) => {
diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts
index 46ad162ea..a7e587ea8 100644
--- a/apps/client/src/app/app-routing.module.ts
+++ b/apps/client/src/app/app-routing.module.ts
@@ -32,7 +32,7 @@ const routes: Routes = [
)
},
{
- path: ghostfolioRoutes.adminControl,
+ path: internalRoutes.adminControl.path,
loadChildren: () =>
import('./pages/admin/admin-page.module').then((m) => m.AdminPageModule)
},
@@ -46,9 +46,10 @@ const routes: Routes = [
title: 'Ghostfolio API'
},
{
- path: ghostfolioRoutes.auth,
+ path: internalRoutes.auth.path,
loadChildren: () =>
- import('./pages/auth/auth-page.module').then((m) => m.AuthPageModule)
+ import('./pages/auth/auth-page.module').then((m) => m.AuthPageModule),
+ title: internalRoutes.auth.title
},
{
path: publicRoutes.blog.path,
@@ -61,7 +62,7 @@ const routes: Routes = [
import('./pages/demo/demo-page.component').then(
(c) => c.GfDemoPageComponent
),
- path: ghostfolioRoutes.demo
+ path: publicRoutes.demo.path
},
{
path: publicRoutes.faq.path,
@@ -118,7 +119,7 @@ const routes: Routes = [
)
},
{
- path: ghostfolioRoutes.public,
+ path: publicRoutes.public.path,
loadChildren: () =>
import('./pages/public/public-page.module').then(
(m) => m.PublicPageModule
@@ -139,7 +140,7 @@ const routes: Routes = [
)
},
{
- path: ghostfolioRoutes.start,
+ path: publicRoutes.start.path,
loadChildren: () =>
import('./pages/landing/landing-page.module').then(
(m) => m.LandingPageModule
@@ -150,8 +151,8 @@ const routes: Routes = [
import('./pages/webauthn/webauthn-page.component').then(
(c) => c.GfWebauthnPageComponent
),
- path: ghostfolioRoutes.webauthn,
- title: $localize`Sign in`
+ path: internalRoutes.webauthn.path,
+ title: internalRoutes.webauthn.title
},
{
path: internalRoutes.zen.path,
diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts
index 7d2c51af9..fb39028fc 100644
--- a/apps/client/src/app/app.component.ts
+++ b/apps/client/src/app/app.component.ts
@@ -3,11 +3,7 @@ import { HoldingDetailDialogParams } from '@ghostfolio/client/components/holding
import { getCssVariable } from '@ghostfolio/common/helper';
import { InfoItem, User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
-import {
- internalRoutes,
- publicRoutes,
- routes
-} from '@ghostfolio/common/routes/routes';
+import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes';
import { ColorScheme } from '@ghostfolio/common/types';
import { DOCUMENT } from '@angular/common';
@@ -202,7 +198,7 @@ export class AppComponent implements OnDestroy, OnInit {
this.currentRoute === publicRoutes.faq.path ||
this.currentRoute === publicRoutes.resources.path ||
this.currentRoute === internalRoutes.account.path ||
- this.currentRoute === routes.adminControl ||
+ this.currentRoute === internalRoutes.adminControl.path ||
this.currentRoute === internalRoutes.home.path ||
this.currentRoute === internalRoutes.portfolio.path ||
this.currentRoute === internalRoutes.zen.path) &&
@@ -213,10 +209,10 @@ export class AppComponent implements OnDestroy, OnInit {
this.currentRoute === publicRoutes.features.path ||
this.currentRoute === publicRoutes.markets.path ||
this.currentRoute === publicRoutes.openStartup.path ||
- this.currentRoute === routes.public ||
+ this.currentRoute === publicRoutes.public.path ||
this.currentRoute === publicRoutes.pricing.path ||
this.currentRoute === publicRoutes.register.path ||
- this.currentRoute === routes.start) &&
+ this.currentRoute === publicRoutes.start.path) &&
this.deviceType !== 'mobile';
if (this.deviceType === 'mobile') {
diff --git a/apps/client/src/app/components/access-table/access-table.component.ts b/apps/client/src/app/components/access-table/access-table.component.ts
index 50d823def..641156f5b 100644
--- a/apps/client/src/app/components/access-table/access-table.component.ts
+++ b/apps/client/src/app/components/access-table/access-table.component.ts
@@ -1,7 +1,7 @@
import { ConfirmationDialogType } from '@ghostfolio/client/core/notification/confirmation-dialog/confirmation-dialog.type';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { Access, User } from '@ghostfolio/common/interfaces';
-import { routes } from '@ghostfolio/common/routes/routes';
+import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Clipboard } from '@angular/cdk/clipboard';
import {
@@ -55,7 +55,7 @@ export class AccessTableComponent implements OnChanges {
public getPublicUrl(aId: string): string {
const languageCode = this.user.settings.language;
- return `${this.baseUrl}/${languageCode}/${routes.public}/${aId}`;
+ return `${this.baseUrl}/${languageCode}/${publicRoutes.public.path}/${aId}`;
}
public onCopyUrlToClipboard(aId: string): void {
diff --git a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
index 32ac71afa..d6589eda5 100644
--- a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
+++ b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
@@ -13,7 +13,7 @@ import {
} from '@ghostfolio/common/helper';
import { LineChartItem, User } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
-import { routes } from '@ghostfolio/common/routes/routes';
+import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { ColorScheme } from '@ghostfolio/common/types';
import {
@@ -64,10 +64,8 @@ export class BenchmarkComparatorComponent implements OnChanges, OnDestroy {
public chart: Chart<'line'>;
public hasPermissionToAccessAdminControl: boolean;
- public routerLinkAdminControlMarketData = [
- '/' + routes.adminControl,
- routes.marketData
- ];
+ public routerLinkAdminControlMarketData =
+ internalRoutes.adminControl.subRoutes.marketData.routerLink;
public constructor() {
Chart.register(
diff --git a/apps/client/src/app/components/header/header.component.ts b/apps/client/src/app/components/header/header.component.ts
index a79ec6786..0ab5e91f3 100644
--- a/apps/client/src/app/components/header/header.component.ts
+++ b/apps/client/src/app/components/header/header.component.ts
@@ -93,7 +93,7 @@ export class HeaderComponent implements OnChanges {
public routerLinkAbout = publicRoutes.about.routerLink;
public routerLinkAccount = internalRoutes.account.routerLink;
public routerLinkAccounts = internalRoutes.accounts.routerLink;
- public routerLinkAdminControl = ['/' + routes.adminControl];
+ public routerLinkAdminControl = internalRoutes.adminControl.routerLink;
public routerLinkFeatures = publicRoutes.features.routerLink;
public routerLinkMarkets = publicRoutes.markets.routerLink;
public routerLinkPortfolio = internalRoutes.portfolio.routerLink;
diff --git a/apps/client/src/app/core/auth.guard.ts b/apps/client/src/app/core/auth.guard.ts
index 4ddc0d229..69280af6a 100644
--- a/apps/client/src/app/core/auth.guard.ts
+++ b/apps/client/src/app/core/auth.guard.ts
@@ -1,11 +1,7 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { SettingsStorageService } from '@ghostfolio/client/services/settings-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
-import {
- internalRoutes,
- publicRoutes,
- routes
-} from '@ghostfolio/common/routes/routes';
+import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes';
import { Injectable } from '@angular/core';
import {
@@ -21,13 +17,13 @@ export class AuthGuard {
private static PUBLIC_PAGE_ROUTES = [
`/${publicRoutes.about.path}`,
`/${publicRoutes.blog.path}`,
- `/${routes.demo}`,
+ `/${publicRoutes.demo.path}`,
`/${publicRoutes.faq.path}`,
`/${publicRoutes.features.path}`,
`/${publicRoutes.markets.path}`,
`/${publicRoutes.openStartup.path}`,
`/${publicRoutes.pricing.path}`,
- `/${routes.public}`,
+ `/${publicRoutes.public.path}`,
`/${publicRoutes.register.path}`,
`/${publicRoutes.resources.path}`
];
@@ -52,7 +48,7 @@ export class AuthGuard {
.pipe(
catchError(() => {
if (utmSource === 'ios') {
- this.router.navigate(['/' + routes.demo]);
+ this.router.navigate(publicRoutes.demo.routerLink);
resolve(false);
} else if (utmSource === 'trusted-web-activity') {
this.router.navigate(publicRoutes.register.routerLink);
@@ -66,7 +62,7 @@ export class AuthGuard {
resolve(true);
return EMPTY;
} else if (state.url !== '/start') {
- this.router.navigate(['/' + routes.start]);
+ this.router.navigate(publicRoutes.start.routerLink);
resolve(false);
return EMPTY;
}
@@ -98,7 +94,7 @@ export class AuthGuard {
this.router.navigate(internalRoutes.zen.routerLink);
resolve(false);
return;
- } else if (state.url.startsWith(`/${routes.start}`)) {
+ } else if (state.url.startsWith(`/${publicRoutes.start.path}`)) {
if (user.settings.viewMode === 'ZEN') {
this.router.navigate(internalRoutes.zen.routerLink);
} else {
diff --git a/apps/client/src/app/core/http-response.interceptor.ts b/apps/client/src/app/core/http-response.interceptor.ts
index 8fdc21e0d..c2eef4175 100644
--- a/apps/client/src/app/core/http-response.interceptor.ts
+++ b/apps/client/src/app/core/http-response.interceptor.ts
@@ -2,7 +2,7 @@ import { DataService } from '@ghostfolio/client/services/data.service';
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service';
import { InfoItem } from '@ghostfolio/common/interfaces';
-import { publicRoutes, routes } from '@ghostfolio/common/routes/routes';
+import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes';
import {
HTTP_INTERCEPTORS,
@@ -60,7 +60,9 @@ export class HttpResponseInterceptor implements HttpInterceptor {
duration: ms('6 seconds')
}
);
- } else if (!error.url.includes('/auth')) {
+ } else if (
+ !error.url.includes(internalRoutes.auth.routerLink.join(''))
+ ) {
this.snackBarRef = this.snackBar.open(
$localize`This action is not allowed.`,
undefined,
@@ -111,7 +113,7 @@ export class HttpResponseInterceptor implements HttpInterceptor {
} else if (error.status === StatusCodes.UNAUTHORIZED) {
if (!error.url.includes('/data-providers/ghostfolio/status')) {
if (this.webAuthnService.isEnabled()) {
- this.router.navigate(['/' + routes.webauthn]);
+ this.router.navigate(internalRoutes.webauthn.routerLink);
} else {
this.tokenStorageService.signOut();
}
diff --git a/apps/client/src/app/pages/admin/admin-page-routing.module.ts b/apps/client/src/app/pages/admin/admin-page-routing.module.ts
index 31c51dbab..efcb217af 100644
--- a/apps/client/src/app/pages/admin/admin-page-routing.module.ts
+++ b/apps/client/src/app/pages/admin/admin-page-routing.module.ts
@@ -4,7 +4,7 @@ import { AdminOverviewComponent } from '@ghostfolio/client/components/admin-over
import { AdminSettingsComponent } from '@ghostfolio/client/components/admin-settings/admin-settings.component';
import { AdminUsersComponent } from '@ghostfolio/client/components/admin-users/admin-users.component';
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
-import { routes as ghostfolioRoutes } from '@ghostfolio/common/routes/routes';
+import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
@@ -18,27 +18,27 @@ const routes: Routes = [
{
path: '',
component: AdminOverviewComponent,
- title: $localize`Admin Control`
+ title: internalRoutes.adminControl.title
},
{
- path: ghostfolioRoutes.jobs,
+ path: internalRoutes.adminControl.subRoutes.jobs.path,
component: AdminJobsComponent,
- title: $localize`Job Queue`
+ title: internalRoutes.adminControl.subRoutes.jobs.title
},
{
- path: ghostfolioRoutes.marketData,
+ path: internalRoutes.adminControl.subRoutes.marketData.path,
component: AdminMarketDataComponent,
- title: $localize`Market Data`
+ title: internalRoutes.adminControl.subRoutes.marketData.title
},
{
- path: ghostfolioRoutes.settings,
+ path: internalRoutes.adminControl.subRoutes.settings.path,
component: AdminSettingsComponent,
- title: $localize`Settings`
+ title: internalRoutes.adminControl.subRoutes.settings.title
},
{
- path: ghostfolioRoutes.users,
+ path: internalRoutes.adminControl.subRoutes.users.path,
component: AdminUsersComponent,
- title: $localize`Users`
+ title: internalRoutes.adminControl.subRoutes.users.title
}
],
component: AdminPageComponent,
diff --git a/apps/client/src/app/pages/admin/admin-page.component.ts b/apps/client/src/app/pages/admin/admin-page.component.ts
index 5c9f0e063..02aa8ba18 100644
--- a/apps/client/src/app/pages/admin/admin-page.component.ts
+++ b/apps/client/src/app/pages/admin/admin-page.component.ts
@@ -1,5 +1,5 @@
import { TabConfiguration } from '@ghostfolio/common/interfaces';
-import { routes } from '@ghostfolio/common/routes/routes';
+import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { Component, OnDestroy, OnInit } from '@angular/core';
import { DeviceDetectorService } from 'ngx-device-detector';
@@ -27,27 +27,27 @@ export class AdminPageComponent implements OnDestroy, OnInit {
{
iconName: 'reader-outline',
label: $localize`Overview`,
- routerLink: ['/' + routes.adminControl]
+ routerLink: internalRoutes.adminControl.routerLink
},
{
iconName: 'settings-outline',
- label: $localize`Settings`,
- routerLink: ['/' + routes.adminControl, routes.settings]
+ label: internalRoutes.adminControl.subRoutes.settings.title,
+ routerLink: internalRoutes.adminControl.subRoutes.settings.routerLink
},
{
iconName: 'server-outline',
- label: $localize`Market Data`,
- routerLink: ['/' + routes.adminControl, routes.marketData]
+ label: internalRoutes.adminControl.subRoutes.marketData.title,
+ routerLink: internalRoutes.adminControl.subRoutes.marketData.routerLink
},
{
iconName: 'flash-outline',
- label: $localize`Job Queue`,
- routerLink: ['/' + routes.adminControl, routes.jobs]
+ label: internalRoutes.adminControl.subRoutes.jobs.title,
+ routerLink: internalRoutes.adminControl.subRoutes.jobs.routerLink
},
{
iconName: 'people-outline',
- label: $localize`Users`,
- routerLink: ['/' + routes.adminControl, routes.users]
+ label: internalRoutes.adminControl.subRoutes.users.title,
+ routerLink: internalRoutes.adminControl.subRoutes.users.routerLink
}
];
}
diff --git a/apps/client/src/app/pages/faq/saas/saas-page.component.ts b/apps/client/src/app/pages/faq/saas/saas-page.component.ts
index e3fba4d21..f5063d765 100644
--- a/apps/client/src/app/pages/faq/saas/saas-page.component.ts
+++ b/apps/client/src/app/pages/faq/saas/saas-page.component.ts
@@ -1,10 +1,6 @@
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { User } from '@ghostfolio/common/interfaces';
-import {
- internalRoutes,
- publicRoutes,
- routes
-} from '@ghostfolio/common/routes/routes';
+import { internalRoutes, publicRoutes } from '@ghostfolio/common/routes/routes';
import { ChangeDetectorRef, Component, OnDestroy } from '@angular/core';
import { Subject, takeUntil } from 'rxjs';
@@ -19,10 +15,8 @@ import { Subject, takeUntil } from 'rxjs';
export class SaasPageComponent implements OnDestroy {
public pricingUrl = `https://ghostfol.io/${document.documentElement.lang}/${publicRoutes.pricing.path}`;
public routerLinkAccount = internalRoutes.account.routerLink;
- public routerLinkAccountMembership = [
- '/' + internalRoutes.account.path,
- routes.membership
- ];
+ public routerLinkAccountMembership =
+ internalRoutes.account.subRoutes.membership.routerLink;
public routerLinkMarkets = publicRoutes.markets.routerLink;
public routerLinkRegister = publicRoutes.register.routerLink;
public user: User;
diff --git a/apps/client/src/app/pages/home/home-page-routing.module.ts b/apps/client/src/app/pages/home/home-page-routing.module.ts
index 68432c17d..6fa7f1c27 100644
--- a/apps/client/src/app/pages/home/home-page-routing.module.ts
+++ b/apps/client/src/app/pages/home/home-page-routing.module.ts
@@ -4,10 +4,7 @@ import { HomeOverviewComponent } from '@ghostfolio/client/components/home-overvi
import { HomeSummaryComponent } from '@ghostfolio/client/components/home-summary/home-summary.component';
import { HomeWatchlistComponent } from '@ghostfolio/client/components/home-watchlist/home-watchlist.component';
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
-import {
- routes as ghostfolioRoutes,
- internalRoutes
-} from '@ghostfolio/common/routes/routes';
+import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
@@ -33,9 +30,9 @@ const routes: Routes = [
title: internalRoutes.home.subRoutes.summary.title
},
{
- path: ghostfolioRoutes.market,
+ path: internalRoutes.home.subRoutes.markets.path,
component: HomeMarketComponent,
- title: $localize`Markets`
+ title: internalRoutes.home.subRoutes.markets.title
},
{
path: internalRoutes.home.subRoutes.watchlist.path,
diff --git a/apps/client/src/app/pages/home/home-page.component.ts b/apps/client/src/app/pages/home/home-page.component.ts
index 68d93520a..ad9a65a4c 100644
--- a/apps/client/src/app/pages/home/home-page.component.ts
+++ b/apps/client/src/app/pages/home/home-page.component.ts
@@ -1,7 +1,7 @@
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { TabConfiguration, User } from '@ghostfolio/common/interfaces';
-import { internalRoutes, routes } from '@ghostfolio/common/routes/routes';
+import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
import { DeviceDetectorService } from 'ngx-device-detector';
@@ -56,8 +56,8 @@ export class HomePageComponent implements OnDestroy, OnInit {
},
{
iconName: 'newspaper-outline',
- label: $localize`Markets`,
- routerLink: ['/' + internalRoutes.home.path, routes.market]
+ label: internalRoutes.home.subRoutes.markets.title,
+ routerLink: internalRoutes.home.subRoutes.markets.routerLink
}
];
diff --git a/apps/client/src/app/pages/landing/landing-page.component.ts b/apps/client/src/app/pages/landing/landing-page.component.ts
index 6212ce56c..0a965b8fa 100644
--- a/apps/client/src/app/pages/landing/landing-page.component.ts
+++ b/apps/client/src/app/pages/landing/landing-page.component.ts
@@ -1,7 +1,7 @@
import { DataService } from '@ghostfolio/client/services/data.service';
import { Statistics } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
-import { publicRoutes, routes } from '@ghostfolio/common/routes/routes';
+import { publicRoutes } from '@ghostfolio/common/routes/routes';
import { Component, OnDestroy, OnInit } from '@angular/core';
import { format } from 'date-fns';
@@ -26,7 +26,7 @@ export class LandingPageComponent implements OnDestroy, OnInit {
public hasPermissionForSubscription: boolean;
public hasPermissionToCreateUser: boolean;
public routerLinkAbout = publicRoutes.about.routerLink;
- public routerLinkDemo = ['/' + routes.demo];
+ public routerLinkDemo = publicRoutes.demo.routerLink;
public routerLinkOpenStartup = publicRoutes.openStartup.routerLink;
public routerLinkRegister = publicRoutes.register.routerLink;
public statistics: Statistics;
diff --git a/apps/client/src/app/pages/user-account/user-account-page-routing.module.ts b/apps/client/src/app/pages/user-account/user-account-page-routing.module.ts
index a9c41b68d..2d40309c1 100644
--- a/apps/client/src/app/pages/user-account/user-account-page-routing.module.ts
+++ b/apps/client/src/app/pages/user-account/user-account-page-routing.module.ts
@@ -2,7 +2,7 @@ import { UserAccountAccessComponent } from '@ghostfolio/client/components/user-a
import { UserAccountMembershipComponent } from '@ghostfolio/client/components/user-account-membership/user-account-membership.component';
import { UserAccountSettingsComponent } from '@ghostfolio/client/components/user-account-settings/user-account-settings.component';
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
-import { routes as ghostfolioRoutes } from '@ghostfolio/common/routes/routes';
+import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
@@ -16,17 +16,17 @@ const routes: Routes = [
{
path: '',
component: UserAccountSettingsComponent,
- title: $localize`Settings`
+ title: internalRoutes.userAccount.title
},
{
- path: ghostfolioRoutes.membership,
+ path: internalRoutes.userAccount.subRoutes.membership.path,
component: UserAccountMembershipComponent,
- title: $localize`Membership`
+ title: internalRoutes.userAccount.subRoutes.membership.title
},
{
- path: ghostfolioRoutes.access,
+ path: internalRoutes.userAccount.subRoutes.access.path,
component: UserAccountAccessComponent,
- title: $localize`Access`
+ title: internalRoutes.userAccount.subRoutes.access.title
}
],
component: UserAccountPageComponent,
diff --git a/apps/client/src/app/pages/user-account/user-account-page.component.ts b/apps/client/src/app/pages/user-account/user-account-page.component.ts
index 278812dc6..78783f400 100644
--- a/apps/client/src/app/pages/user-account/user-account-page.component.ts
+++ b/apps/client/src/app/pages/user-account/user-account-page.component.ts
@@ -1,6 +1,6 @@
import { UserService } from '@ghostfolio/client/services/user/user.service';
import { TabConfiguration, User } from '@ghostfolio/common/interfaces';
-import { internalRoutes, routes } from '@ghostfolio/common/routes/routes';
+import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
import { DeviceDetectorService } from 'ngx-device-detector';
@@ -39,17 +39,15 @@ export class UserAccountPageComponent implements OnDestroy, OnInit {
},
{
iconName: 'diamond-outline',
- label: $localize`Membership`,
- routerLink: [
- '/' + internalRoutes.account.path,
- routes.membership
- ],
+ label: internalRoutes.account.subRoutes.membership.title,
+ routerLink:
+ internalRoutes.account.subRoutes.membership.routerLink,
showCondition: !!this.user?.subscription
},
{
iconName: 'key-outline',
- label: $localize`Access`,
- routerLink: ['/' + internalRoutes.account.path, routes.access]
+ label: internalRoutes.account.subRoutes.access.title,
+ routerLink: internalRoutes.account.subRoutes.access.routerLink
}
];
diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf
index 80579001e..81d20e741 100644
--- a/apps/client/src/locales/messages.ca.xlf
+++ b/apps/client/src/locales/messages.ca.xlf
@@ -6,7 +6,7 @@
Característiques
libs/common/src/lib/routes/routes.ts
- 180
+ 229
@@ -14,20 +14,24 @@
Internacionalització
apps/client/src/app/app-routing.module.ts
- 92
+ 93
Sign in
Iniciar sessió
-
- apps/client/src/app/app-routing.module.ts
- 154
-
apps/client/src/app/components/header/header.component.ts
242
+
+ libs/common/src/lib/routes/routes.ts
+ 69
+
+
+ libs/common/src/lib/routes/routes.ts
+ 134
+
You are using the Live Demo.
@@ -371,31 +375,31 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 109
+ 153
libs/common/src/lib/routes/routes.ts
- 110
+ 154
libs/common/src/lib/routes/routes.ts
- 115
+ 159
libs/common/src/lib/routes/routes.ts
- 123
+ 167
libs/common/src/lib/routes/routes.ts
- 130
+ 174
libs/common/src/lib/routes/routes.ts
- 136
+ 180
libs/common/src/lib/routes/routes.ts
- 144
+ 188
@@ -404,11 +408,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 121
+ 165
libs/common/src/lib/routes/routes.ts
- 124
+ 168
@@ -417,11 +421,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 134
+ 178
libs/common/src/lib/routes/routes.ts
- 137
+ 181
@@ -430,19 +434,19 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 158
+ 207
libs/common/src/lib/routes/routes.ts
- 159
+ 208
libs/common/src/lib/routes/routes.ts
- 163
+ 212
libs/common/src/lib/routes/routes.ts
- 169
+ 218
@@ -451,11 +455,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 178
+ 227
libs/common/src/lib/routes/routes.ts
- 179
+ 228
@@ -464,19 +468,19 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 183
+ 232
libs/common/src/lib/routes/routes.ts
- 184
+ 233
libs/common/src/lib/routes/routes.ts
- 223
+ 276
libs/common/src/lib/routes/routes.ts
- 226
+ 279
@@ -485,11 +489,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 193
+ 242
libs/common/src/lib/routes/routes.ts
- 194
+ 243
@@ -498,11 +502,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 198
+ 251
libs/common/src/lib/routes/routes.ts
- 199
+ 252
@@ -511,23 +515,23 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 203
+ 256
libs/common/src/lib/routes/routes.ts
- 204
+ 257
libs/common/src/lib/routes/routes.ts
- 209
+ 262
libs/common/src/lib/routes/routes.ts
- 217
+ 270
libs/common/src/lib/routes/routes.ts
- 225
+ 278
@@ -1323,7 +1327,7 @@
libs/ui/src/lib/assistant/assistant.html
- 204
+ 206
@@ -2023,7 +2027,7 @@
Portfolio
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 122
+ 120
apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts
@@ -2031,7 +2035,7 @@
libs/common/src/lib/routes/routes.ts
- 90
+ 128
@@ -2039,7 +2043,7 @@
Punt de Referència
apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts
- 134
+ 132
@@ -3279,7 +3283,7 @@
apps/client/src/app/core/http-response.interceptor.ts
- 86
+ 88
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
@@ -3291,7 +3295,7 @@
Aquesta acció no està permesa.
apps/client/src/app/core/http-response.interceptor.ts
- 65
+ 67
@@ -3299,7 +3303,7 @@
Vaja! Alguna cosa va fallar.
apps/client/src/app/core/http-response.interceptor.ts
- 84
+ 86
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
@@ -3315,7 +3319,7 @@
apps/client/src/app/core/http-response.interceptor.ts
- 87
+ 89
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
@@ -3327,7 +3331,7 @@
Ups! Sembla que esteu fent massa sol·licituds. Si us plau, aneu una mica més lent.
apps/client/src/app/core/http-response.interceptor.ts
- 104
+ 106
@@ -3339,7 +3343,7 @@
libs/common/src/lib/routes/routes.ts
- 150
+ 194
@@ -3347,7 +3351,7 @@
Registre de canvis
libs/common/src/lib/routes/routes.ts
- 118
+ 162
@@ -3355,7 +3359,7 @@
llicència
libs/common/src/lib/routes/routes.ts
- 126
+ 170
@@ -3363,7 +3367,7 @@
Política de privadesa
libs/common/src/lib/routes/routes.ts
- 139
+ 183
@@ -3395,7 +3399,7 @@
Comptes
libs/common/src/lib/routes/routes.ts
- 36
+ 63
@@ -3458,64 +3462,44 @@
Admin Control
Control d’administració
- apps/client/src/app/pages/admin/admin-page-routing.module.ts
- 21
+ libs/common/src/lib/routes/routes.ts
+ 58
Job Queue
Cua de treball
- apps/client/src/app/pages/admin/admin-page-routing.module.ts
- 26
-
-
- apps/client/src/app/pages/admin/admin-page.component.ts
- 44
+ libs/common/src/lib/routes/routes.ts
+ 40
Market Data
Dades de mercat
- apps/client/src/app/pages/admin/admin-page-routing.module.ts
- 31
-
-
- apps/client/src/app/pages/admin/admin-page.component.ts
- 39
+ libs/common/src/lib/routes/routes.ts
+ 45
Settings
Configuració
- apps/client/src/app/pages/admin/admin-page-routing.module.ts
- 36
-
-
- apps/client/src/app/pages/admin/admin-page.component.ts
- 34
-
-
- apps/client/src/app/pages/user-account/user-account-page-routing.module.ts
- 19
+ libs/common/src/lib/routes/routes.ts
+ 30
libs/common/src/lib/routes/routes.ts
- 31
+ 50
Users
Usuaris
- apps/client/src/app/pages/admin/admin-page-routing.module.ts
- 41
-
-
- apps/client/src/app/pages/admin/admin-page.component.ts
- 49
+ libs/common/src/lib/routes/routes.ts
+ 55
@@ -3531,11 +3515,11 @@
libs/common/src/lib/routes/routes.ts
- 58
+ 96
libs/common/src/lib/routes/routes.ts
- 103
+ 147
@@ -3543,7 +3527,7 @@
Bloc
libs/common/src/lib/routes/routes.ts
- 155
+ 199
@@ -3571,7 +3555,7 @@
libs/common/src/lib/routes/routes.ts
- 175
+ 224
@@ -3591,7 +3575,7 @@
libs/common/src/lib/routes/routes.ts
- 164
+ 213
@@ -3603,7 +3587,7 @@
libs/common/src/lib/routes/routes.ts
- 172
+ 221
@@ -3612,11 +3596,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 167
+ 216
libs/common/src/lib/routes/routes.ts
- 170
+ 219
@@ -3764,11 +3748,11 @@
Explotacions
libs/common/src/lib/routes/routes.ts
- 45
+ 78
libs/common/src/lib/routes/routes.ts
- 100
+ 144
@@ -3776,31 +3760,27 @@
Resum
libs/common/src/lib/routes/routes.ts
- 50
+ 88
Markets
Mercats
-
- apps/client/src/app/pages/home/home-page-routing.module.ts
- 38
-
-
- apps/client/src/app/pages/home/home-page.component.ts
- 59
-
apps/client/src/app/pages/resources/resources-page.component.ts
30
libs/common/src/lib/routes/routes.ts
- 185
+ 83
libs/common/src/lib/routes/routes.ts
- 228
+ 234
+
+
+ libs/common/src/lib/routes/routes.ts
+ 281
@@ -4248,7 +4228,7 @@
Activitats
libs/common/src/lib/routes/routes.ts
- 67
+ 105
@@ -4324,7 +4304,7 @@
libs/ui/src/lib/assistant/assistant.html
- 143
+ 145
@@ -4424,7 +4404,7 @@
libs/ui/src/lib/assistant/assistant.html
- 165
+ 167
@@ -4488,7 +4468,7 @@
libs/common/src/lib/routes/routes.ts
- 72
+ 110
@@ -4676,7 +4656,7 @@
Anàlisi
libs/common/src/lib/routes/routes.ts
- 77
+ 115
@@ -4892,7 +4872,7 @@
libs/common/src/lib/routes/routes.ts
- 195
+ 244
@@ -5116,7 +5096,7 @@
Registration
libs/common/src/lib/routes/routes.ts
- 200
+ 253
@@ -5157,7 +5137,7 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 24
+ 11
@@ -5469,7 +5449,7 @@
Resources
libs/common/src/lib/routes/routes.ts
- 231
+ 284
@@ -5492,24 +5472,16 @@
Membership
Membership
- apps/client/src/app/pages/user-account/user-account-page-routing.module.ts
- 24
-
-
- apps/client/src/app/pages/user-account/user-account-page.component.ts
- 42
+ libs/common/src/lib/routes/routes.ts
+ 27
Access
Access
- apps/client/src/app/pages/user-account/user-account-page-routing.module.ts
- 29
-
-
- apps/client/src/app/pages/user-account/user-account-page.component.ts
- 51
+ libs/common/src/lib/routes/routes.ts
+ 22
@@ -5713,7 +5685,7 @@
libs/ui/src/lib/assistant/assistant.html
- 119
+ 120
@@ -5729,7 +5701,7 @@
Date Range
libs/ui/src/lib/assistant/assistant.html
- 129
+ 131
@@ -5737,7 +5709,7 @@
Reset Filters
libs/ui/src/lib/assistant/assistant.html
- 223
+ 225
@@ -5745,7 +5717,7 @@
Apply Filters
libs/ui/src/lib/assistant/assistant.html
- 233
+ 235
@@ -6957,7 +6929,7 @@
libs/common/src/lib/routes/routes.ts
- 212
+ 265
@@ -6969,7 +6941,7 @@
libs/common/src/lib/routes/routes.ts
- 220
+ 273
@@ -6978,11 +6950,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 215
+ 268
libs/common/src/lib/routes/routes.ts
- 218
+ 271
@@ -6991,11 +6963,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 207
+ 260
libs/common/src/lib/routes/routes.ts
- 210
+ 263
@@ -7115,7 +7087,7 @@
Tag
libs/ui/src/lib/assistant/assistant.html
- 193
+ 195
@@ -7456,11 +7428,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 142
+ 186
libs/common/src/lib/routes/routes.ts
- 145
+ 189
@@ -7468,7 +7440,7 @@
Terms of Service
libs/common/src/lib/routes/routes.ts
- 147
+ 191
@@ -7592,7 +7564,7 @@
Watchlist
libs/common/src/lib/routes/routes.ts
- 55
+ 93
@@ -7633,11 +7605,11 @@
kebab-case
libs/common/src/lib/routes/routes.ts
- 113
+ 157
libs/common/src/lib/routes/routes.ts
- 116
+ 160
@@ -7728,12 +7700,20 @@
45
-
+
Asset Profiles
Asset Profiles
libs/ui/src/lib/assistant/assistant.html
- 96
+ 97
+
+
+
+ Live Demo
+ Live Demo
+
+ libs/common/src/lib/routes/routes.ts
+ 204