|
|
@ -1,10 +1,19 @@ |
|
|
|
|
|
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; |
|
|
|
|
|
import { UserService } from '@ghostfolio/client/services/user/user.service'; |
|
|
|
|
|
import { |
|
|
|
|
|
BULL_BOARD_COOKIE_NAME, |
|
|
|
|
|
BULL_BOARD_ROUTE |
|
|
|
|
|
} from '@ghostfolio/common/config'; |
|
|
|
|
|
import { User } from '@ghostfolio/common/interfaces'; |
|
|
|
|
|
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; |
|
|
import { internalRoutes } from '@ghostfolio/common/routes/routes'; |
|
|
import { internalRoutes } from '@ghostfolio/common/routes/routes'; |
|
|
import { |
|
|
import { |
|
|
GfPageTabsComponent, |
|
|
GfPageTabsComponent, |
|
|
TabConfiguration |
|
|
TabConfiguration |
|
|
} from '@ghostfolio/ui/page-tabs'; |
|
|
} from '@ghostfolio/ui/page-tabs'; |
|
|
|
|
|
|
|
|
import { Component, OnInit } from '@angular/core'; |
|
|
import { Component, inject } from '@angular/core'; |
|
|
|
|
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; |
|
|
import { addIcons } from 'ionicons'; |
|
|
import { addIcons } from 'ionicons'; |
|
|
import { |
|
|
import { |
|
|
flashOutline, |
|
|
flashOutline, |
|
|
@ -21,10 +30,23 @@ import { |
|
|
styleUrls: ['./admin-page.scss'], |
|
|
styleUrls: ['./admin-page.scss'], |
|
|
templateUrl: './admin-page.html' |
|
|
templateUrl: './admin-page.html' |
|
|
}) |
|
|
}) |
|
|
export class AdminPageComponent implements OnInit { |
|
|
export class AdminPageComponent { |
|
|
public tabs: TabConfiguration[] = []; |
|
|
public tabs: TabConfiguration[] = []; |
|
|
|
|
|
|
|
|
|
|
|
private user: User; |
|
|
|
|
|
|
|
|
|
|
|
private readonly tokenStorageService = inject(TokenStorageService); |
|
|
|
|
|
private readonly userService = inject(UserService); |
|
|
|
|
|
|
|
|
public constructor() { |
|
|
public constructor() { |
|
|
|
|
|
this.userService.stateChanged |
|
|
|
|
|
.pipe(takeUntilDestroyed()) |
|
|
|
|
|
.subscribe((state) => { |
|
|
|
|
|
this.user = state?.user; |
|
|
|
|
|
|
|
|
|
|
|
this.initializeTabs(); |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
addIcons({ |
|
|
addIcons({ |
|
|
flashOutline, |
|
|
flashOutline, |
|
|
peopleOutline, |
|
|
peopleOutline, |
|
|
@ -34,7 +56,12 @@ export class AdminPageComponent implements OnInit { |
|
|
}); |
|
|
}); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public ngOnInit() { |
|
|
private initializeTabs() { |
|
|
|
|
|
const hasPermissionToAccessBullBoard = hasPermission( |
|
|
|
|
|
this.user?.permissions, |
|
|
|
|
|
permissions.accessAdminControlBullBoard |
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
this.tabs = [ |
|
|
this.tabs = [ |
|
|
{ |
|
|
{ |
|
|
iconName: 'reader-outline', |
|
|
iconName: 'reader-outline', |
|
|
@ -51,11 +78,19 @@ export class AdminPageComponent implements OnInit { |
|
|
label: internalRoutes.adminControl.subRoutes.marketData.title, |
|
|
label: internalRoutes.adminControl.subRoutes.marketData.title, |
|
|
routerLink: internalRoutes.adminControl.subRoutes.marketData.routerLink |
|
|
routerLink: internalRoutes.adminControl.subRoutes.marketData.routerLink |
|
|
}, |
|
|
}, |
|
|
{ |
|
|
hasPermissionToAccessBullBoard |
|
|
iconName: 'flash-outline', |
|
|
? { |
|
|
label: internalRoutes.adminControl.subRoutes.jobs.title, |
|
|
iconName: 'flash-outline', |
|
|
routerLink: internalRoutes.adminControl.subRoutes.jobs.routerLink |
|
|
label: $localize`Job Queue`, |
|
|
}, |
|
|
onClick: () => { |
|
|
|
|
|
this.onOpenBullBoard(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
: { |
|
|
|
|
|
iconName: 'flash-outline', |
|
|
|
|
|
label: internalRoutes.adminControl.subRoutes.jobs.title, |
|
|
|
|
|
routerLink: internalRoutes.adminControl.subRoutes.jobs.routerLink |
|
|
|
|
|
}, |
|
|
{ |
|
|
{ |
|
|
iconName: 'people-outline', |
|
|
iconName: 'people-outline', |
|
|
label: internalRoutes.adminControl.subRoutes.users.title, |
|
|
label: internalRoutes.adminControl.subRoutes.users.title, |
|
|
@ -63,4 +98,16 @@ export class AdminPageComponent implements OnInit { |
|
|
} |
|
|
} |
|
|
]; |
|
|
]; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private onOpenBullBoard() { |
|
|
|
|
|
const token = this.tokenStorageService.getToken(); |
|
|
|
|
|
|
|
|
|
|
|
document.cookie = [ |
|
|
|
|
|
`${BULL_BOARD_COOKIE_NAME}=${encodeURIComponent(token)}`, |
|
|
|
|
|
'path=/', |
|
|
|
|
|
'SameSite=Strict' |
|
|
|
|
|
].join('; '); |
|
|
|
|
|
|
|
|
|
|
|
window.open(BULL_BOARD_ROUTE, '_blank'); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|