Files
cloudbeaver/webapp/packages/plugin-administration/src/PluginBootstrap.ts
T

74 lines
2.4 KiB
TypeScript

/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2021 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { EAdminPermission, AdministrationScreenService } from '@cloudbeaver/core-administration';
import { Bootstrap, injectable } from '@cloudbeaver/core-di';
import { PermissionsService } from '@cloudbeaver/core-root';
import { ScreenService } from '@cloudbeaver/core-routing';
import { DATA_CONTEXT_MENU, MenuBaseItem, MenuService } from '@cloudbeaver/core-view';
import { TOP_NAV_BAR_SETTINGS_MENU } from '@cloudbeaver/plugin-settings-menu';
@injectable()
export class PluginBootstrap extends Bootstrap {
constructor(
private readonly permissionsService: PermissionsService,
private readonly screenService: ScreenService,
private readonly administrationScreenService: AdministrationScreenService,
private readonly menuService: MenuService
) {
super();
}
register(): void {
this.menuService.addCreator({
isApplicable: (context) => context.get(DATA_CONTEXT_MENU) === TOP_NAV_BAR_SETTINGS_MENU,
getItems: (context, items) => {
const administrationScreen = this.screenService.isActive(AdministrationScreenService.screenName);
if (this.permissionsService.has(EAdminPermission.admin) && !administrationScreen) {
return [
...items,
new MenuBaseItem(
'administrationMenuEnter',
'administration_menu_enter',
'administration_menu_enter',
{ onSelect: () => this.administrationScreenService.navigateToRoot() }
)
]
}
if (administrationScreen) {
return [
...items,
new MenuBaseItem(
'administrationMenuBack',
'administration_menu_back',
'administration_menu_back',
{ onSelect: () => this.screenService.navigateToRoot() }
)
]
}
return items;
},
orderItems: (context, items) => {
const index = items.findIndex(item => item.id === 'administrationMenuBack' || item.id === 'administrationMenuEnter');
if (index > -1) {
const item = items.splice(index, 1);
items.unshift(item[0]);
}
return items;
}
});
}
load(): void { }
}