diff --git a/apps/client/src/app/pages/about/about-page.component.ts b/apps/client/src/app/pages/about/about-page.component.ts index 97e24c944..3953aa00e 100644 --- a/apps/client/src/app/pages/about/about-page.component.ts +++ b/apps/client/src/app/pages/about/about-page.component.ts @@ -7,7 +7,7 @@ import { } from '@angular/core'; import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { User } from '@ghostfolio/common/interfaces'; +import { TabConfiguration, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; @@ -24,12 +24,7 @@ export class AboutPageComponent implements OnDestroy, OnInit { public hasMessage: boolean; public hasPermissionForSubscription: boolean; - public tabs: { - iconName: string; - label: string; - path: string[]; - showCondition?: boolean; - }[] = []; + public tabs: TabConfiguration[] = []; public user: User; private unsubscribeSubject = new Subject(); 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 42e4a583b..c95630726 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,6 @@ import { Component, HostBinding, OnDestroy, OnInit } from '@angular/core'; import { DataService } from '@ghostfolio/client/services/data.service'; +import { TabConfiguration } from '@ghostfolio/common/interfaces'; import { Subject } from 'rxjs'; @Component({ @@ -13,12 +14,7 @@ export class AdminPageComponent implements OnDestroy, OnInit { } public hasMessage: boolean; - public tabs: { - iconName: string; - label: string; - path: string[]; - showCondition?: boolean; - }[] = []; + public tabs: TabConfiguration[] = []; private unsubscribeSubject = new Subject(); 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 5a689f825..77c318395 100644 --- a/apps/client/src/app/pages/home/home-page.component.ts +++ b/apps/client/src/app/pages/home/home-page.component.ts @@ -7,7 +7,7 @@ import { } from '@angular/core'; import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { InfoItem, User } from '@ghostfolio/common/interfaces'; +import { TabConfiguration, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; @@ -24,13 +24,7 @@ export class HomePageComponent implements OnDestroy, OnInit { public hasMessage: boolean; public hasPermissionToAccessFearAndGreedIndex: boolean; - public info: InfoItem; - public tabs: { - iconName: string; - label: string; - path: string[]; - showCondition?: boolean; - }[] = []; + public tabs: TabConfiguration[] = []; public user: User; private unsubscribeSubject = new Subject(); @@ -40,7 +34,12 @@ export class HomePageComponent implements OnDestroy, OnInit { private dataService: DataService, private userService: UserService ) { - this.info = this.dataService.fetchInfo(); + const { globalPermissions, systemMessage } = this.dataService.fetchInfo(); + + this.hasPermissionToAccessFearAndGreedIndex = hasPermission( + globalPermissions, + permissions.enableFearAndGreedIndex + ); this.userService.stateChanged .pipe(takeUntil(this.unsubscribeSubject)) @@ -61,6 +60,12 @@ export class HomePageComponent implements OnDestroy, OnInit { iconName: 'reader-outline', label: $localize`Summary`, path: ['/home', 'summary'] + }, + { + iconName: 'newspaper-outline', + label: $localize`Markets`, + path: ['/home', 'market'], + showCondition: this.hasPermissionToAccessFearAndGreedIndex } ]; this.user = state.user; @@ -69,20 +74,7 @@ export class HomePageComponent implements OnDestroy, OnInit { hasPermission( this.user?.permissions, permissions.createUserAccount - ) || !!this.info.systemMessage; - - this.hasPermissionToAccessFearAndGreedIndex = hasPermission( - this.info?.globalPermissions, - permissions.enableFearAndGreedIndex - ); - - if (this.hasPermissionToAccessFearAndGreedIndex) { - this.tabs.push({ - iconName: 'newspaper-outline', - label: $localize`Markets`, - path: ['/home', 'market'] - }); - } + ) || !!systemMessage; this.changeDetectorRef.markForCheck(); } diff --git a/apps/client/src/app/pages/portfolio/portfolio-page.component.ts b/apps/client/src/app/pages/portfolio/portfolio-page.component.ts index deb710c76..2244e7af9 100644 --- a/apps/client/src/app/pages/portfolio/portfolio-page.component.ts +++ b/apps/client/src/app/pages/portfolio/portfolio-page.component.ts @@ -7,7 +7,11 @@ import { } from '@angular/core'; import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { InfoItem, User } from '@ghostfolio/common/interfaces'; +import { + InfoItem, + TabConfiguration, + User +} from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; @@ -24,12 +28,7 @@ export class PortfolioPageComponent implements OnDestroy, OnInit { public hasMessage: boolean; public info: InfoItem; - public tabs: { - iconName: string; - label: string; - path: string[]; - showCondition?: boolean; - }[] = []; + public tabs: TabConfiguration[] = []; public user: User; private unsubscribeSubject = new Subject(); diff --git a/apps/client/src/app/pages/zen/zen-page.component.ts b/apps/client/src/app/pages/zen/zen-page.component.ts index f107748ba..9f769e281 100644 --- a/apps/client/src/app/pages/zen/zen-page.component.ts +++ b/apps/client/src/app/pages/zen/zen-page.component.ts @@ -8,7 +8,7 @@ import { } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { User } from '@ghostfolio/common/interfaces'; +import { TabConfiguration, User } from '@ghostfolio/common/interfaces'; import { Subject } from 'rxjs'; import { first, takeUntil } from 'rxjs/operators'; @@ -18,12 +18,7 @@ import { first, takeUntil } from 'rxjs/operators'; styleUrls: ['./zen-page.scss'] }) export class ZenPageComponent implements AfterViewInit, OnDestroy, OnInit { - public tabs: { - iconName: string; - label: string; - path: string[]; - showCondition?: boolean; - }[] = []; + public tabs: TabConfiguration[] = []; public user: User; private unsubscribeSubject = new Subject(); diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index 93268153b..6eebc0de2 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -40,6 +40,7 @@ import type { PortfolioPerformanceResponse } from './responses/portfolio-perform import type { ScraperConfiguration } from './scraper-configuration.interface'; import type { Statistics } from './statistics.interface'; import type { Subscription } from './subscription.interface'; +import { TabConfiguration } from './tab-configuration.interface'; import type { TimelinePosition } from './timeline-position.interface'; import type { UniqueAsset } from './unique-asset.interface'; import type { UserSettings } from './user-settings.interface'; @@ -86,6 +87,7 @@ export { ScraperConfiguration, Statistics, Subscription, + TabConfiguration, TimelinePosition, UniqueAsset, User, diff --git a/libs/common/src/lib/interfaces/tab-configuration.interface.ts b/libs/common/src/lib/interfaces/tab-configuration.interface.ts new file mode 100644 index 000000000..e475e3efc --- /dev/null +++ b/libs/common/src/lib/interfaces/tab-configuration.interface.ts @@ -0,0 +1,6 @@ +export interface TabConfiguration { + iconName: string; + label: string; + path: string[]; + showCondition?: boolean; +}