From c496851ecb42fb16bb32c4c3261054ef44848243 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 2 Jul 2025 20:14:24 +0200 Subject: [PATCH] Extend markets --- apps/api/src/app/user/user.service.ts | 1 + .../components/markets/markets.component.ts | 1 - .../pages/home/home-page-routing.module.ts | 4 +-- .../src/app/pages/home/home-page.component.ts | 25 ++++++++++++------- libs/common/src/lib/permissions.ts | 1 - libs/common/src/lib/routes/routes.ts | 5 ++++ 6 files changed, 24 insertions(+), 13 deletions(-) diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index 3ad43301e..7b55210eb 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -419,6 +419,7 @@ export class UserService { if (!hasRole(user, Role.DEMO)) { currentPermissions.push(permissions.createApiKey); currentPermissions.push(permissions.enableDataProviderGhostfolio); + currentPermissions.push(permissions.readMarketDataOfMarkets); currentPermissions.push(permissions.reportDataGlitch); } diff --git a/apps/client/src/app/components/markets/markets.component.ts b/apps/client/src/app/components/markets/markets.component.ts index 48e4377c1..b0bbe04ba 100644 --- a/apps/client/src/app/components/markets/markets.component.ts +++ b/apps/client/src/app/components/markets/markets.component.ts @@ -125,7 +125,6 @@ export class MarketsComponent implements OnDestroy, OnInit { ]; } - // TODO public onChangeFearAndGreedIndexMode( aFearAndGreedIndexMode: FearAndGreedIndexMode ) { 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 1146213de..06dbfdf14 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 @@ -36,9 +36,9 @@ const routes: Routes = [ title: internalRoutes.home.subRoutes.markets.title }, { - path: internalRoutes.home.subRoutes.markets.path + '-new', // TODO + path: internalRoutes.home.subRoutes.marketsPremium.path, component: MarketsComponent, - title: internalRoutes.home.subRoutes.markets.title + title: internalRoutes.home.subRoutes.marketsPremium.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 a95e92584..d162d15ab 100644 --- a/apps/client/src/app/pages/home/home-page.component.ts +++ b/apps/client/src/app/pages/home/home-page.component.ts @@ -1,6 +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 { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; @@ -33,6 +34,8 @@ export class HomePageComponent implements OnDestroy, OnInit { .pipe(takeUntil(this.unsubscribeSubject)) .subscribe((state) => { if (state?.user) { + this.user = state.user; + this.tabs = [ { iconName: 'analytics-outline', @@ -56,18 +59,22 @@ export class HomePageComponent implements OnDestroy, OnInit { }, { iconName: 'newspaper-outline', - label: internalRoutes.home.subRoutes.markets.title, - routerLink: internalRoutes.home.subRoutes.markets.routerLink - }, - { - iconName: 'newspaper-outline', - label: internalRoutes.home.subRoutes.markets.title + ' (new)', - routerLink: ['/home', 'markets-new'] // TODO + label: hasPermission( + this.user?.permissions, + permissions.readMarketDataOfMarkets + ) + ? internalRoutes.home.subRoutes.marketsPremium.title + : internalRoutes.home.subRoutes.markets.title, + + routerLink: hasPermission( + this.user?.permissions, + permissions.readMarketDataOfMarkets + ) + ? internalRoutes.home.subRoutes.marketsPremium.routerLink + : internalRoutes.home.subRoutes.markets.routerLink } ]; - this.user = state.user; - this.changeDetectorRef.markForCheck(); } }); diff --git a/libs/common/src/lib/permissions.ts b/libs/common/src/lib/permissions.ts index 919f51c99..13e10c404 100644 --- a/libs/common/src/lib/permissions.ts +++ b/libs/common/src/lib/permissions.ts @@ -88,7 +88,6 @@ export function getPermissions(aRole: Role): string[] { permissions.deleteUser, permissions.readAiPrompt, permissions.readMarketData, - permissions.readMarketDataOfMarkets, permissions.readMarketDataOfOwnAssetProfile, permissions.readPlatforms, permissions.readTags, diff --git a/libs/common/src/lib/routes/routes.ts b/libs/common/src/lib/routes/routes.ts index 9c6461a75..9a75f0bc6 100644 --- a/libs/common/src/lib/routes/routes.ts +++ b/libs/common/src/lib/routes/routes.ts @@ -94,6 +94,11 @@ export const internalRoutes: Record = { routerLink: ['/home', 'markets'], title: $localize`Markets` }, + marketsPremium: { + path: 'markets-premium', + routerLink: ['/home', 'markets-premium'], + title: $localize`Markets` + }, summary: { path: 'summary', routerLink: ['/home', 'summary'],