mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
3.1 KiB
113 lines
3.1 KiB
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 {
|
|
GfPageTabsComponent,
|
|
TabConfiguration
|
|
} from '@ghostfolio/ui/page-tabs';
|
|
|
|
import { Component, inject } from '@angular/core';
|
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
import { addIcons } from 'ionicons';
|
|
import {
|
|
flashOutline,
|
|
peopleOutline,
|
|
readerOutline,
|
|
serverOutline,
|
|
settingsOutline
|
|
} from 'ionicons/icons';
|
|
|
|
@Component({
|
|
host: { class: 'page' },
|
|
imports: [GfPageTabsComponent],
|
|
selector: 'gf-admin-page',
|
|
styleUrls: ['./admin-page.scss'],
|
|
templateUrl: './admin-page.html'
|
|
})
|
|
export class AdminPageComponent {
|
|
public tabs: TabConfiguration[] = [];
|
|
|
|
private user: User;
|
|
|
|
private readonly tokenStorageService = inject(TokenStorageService);
|
|
private readonly userService = inject(UserService);
|
|
|
|
public constructor() {
|
|
this.userService.stateChanged
|
|
.pipe(takeUntilDestroyed())
|
|
.subscribe((state) => {
|
|
this.user = state?.user;
|
|
|
|
this.initializeTabs();
|
|
});
|
|
|
|
addIcons({
|
|
flashOutline,
|
|
peopleOutline,
|
|
readerOutline,
|
|
serverOutline,
|
|
settingsOutline
|
|
});
|
|
}
|
|
|
|
private initializeTabs() {
|
|
const hasPermissionToAccessBullBoard = hasPermission(
|
|
this.user?.permissions,
|
|
permissions.accessAdminControlBullBoard
|
|
);
|
|
|
|
this.tabs = [
|
|
{
|
|
iconName: 'reader-outline',
|
|
label: $localize`Overview`,
|
|
routerLink: internalRoutes.adminControl.routerLink
|
|
},
|
|
{
|
|
iconName: 'settings-outline',
|
|
label: internalRoutes.adminControl.subRoutes.settings.title,
|
|
routerLink: internalRoutes.adminControl.subRoutes.settings.routerLink
|
|
},
|
|
{
|
|
iconName: 'server-outline',
|
|
label: internalRoutes.adminControl.subRoutes.marketData.title,
|
|
routerLink: internalRoutes.adminControl.subRoutes.marketData.routerLink
|
|
},
|
|
hasPermissionToAccessBullBoard
|
|
? {
|
|
iconName: 'flash-outline',
|
|
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',
|
|
label: internalRoutes.adminControl.subRoutes.users.title,
|
|
routerLink: internalRoutes.adminControl.subRoutes.users.routerLink
|
|
}
|
|
];
|
|
}
|
|
|
|
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');
|
|
}
|
|
}
|
|
|