3 * ============LICENSE_START=======================================================
4 * Copyright (C) 2022 Nordix Foundation.
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
22 import {Component, EventEmitter, Inject, Input, OnInit, Output} from '@angular/core';
23 import {MenuItem, MenuItemGroup} from "../../../../utils/menu-handler";
24 import {CacheService} from "../../../services/cache.service";
25 import {IAppMenu} from "../../../../models/app-config";
26 import {IUserProperties} from "../../../../models/user";
27 import {SdcMenuToken} from "../../../config/sdc-menu.config";
30 selector: 'app-workspace-menu',
31 templateUrl: './workspace-menu.component.html',
32 styleUrls: ['./workspace-menu.component.less']
34 export class WorkspaceMenuComponent implements OnInit {
36 @Input() menuHeader: string = '';
37 @Output() onMenuUpdate: EventEmitter<MenuItemGroup> = new EventEmitter<MenuItemGroup>();
38 @Output() onClick: EventEmitter<MenuItem> = new EventEmitter<MenuItem>();
41 private user: IUserProperties;
42 private $state: ng.ui.IStateService;
43 private $q: ng.IQService;
45 leftBarTabs: MenuItemGroup = new MenuItemGroup();
47 constructor(private cacheService: CacheService, @Inject(SdcMenuToken) private sdcMenu: IAppMenu, @Inject('$injector') $injector) {
48 this.$state = $injector.get('$state');
49 this.$q = $injector.get('$q');
53 this.user = this.cacheService.get('user');
54 this.role = this.user.role;
58 private initMenuItems(): void {
59 this.leftBarTabs = new MenuItemGroup();
60 const menuItemsObjects: MenuItem[] = this.updateMenuItemByRole(this.sdcMenu.component_workspace_menu_option["DataType"], this.role);
62 this.leftBarTabs.menuItems = menuItemsObjects.map((item: MenuItem) => {
63 const menuCallback = () => this[menuItem.action](menuItem);
64 const menuItem = new MenuItem(item.text, menuCallback, item.state, item.action, item.params, item.blockedForTypes, item.disabledCategory);
65 if (menuItem.params) {
66 menuItem.params.state = menuItem.state;
68 menuItem.params = {state: menuItem.state};
72 this.updateSelectedMenuItem();
73 this.onMenuUpdate.emit(this.leftBarTabs);
76 isSelected(menuItem: MenuItem): boolean {
77 return this.leftBarTabs.selectedIndex === this.leftBarTabs.menuItems.indexOf(menuItem);
80 private onMenuItemPressed(menuItem: MenuItem): angular.IPromise<boolean> {
81 this.leftBarTabs.selectedIndex = this.leftBarTabs.menuItems.indexOf(menuItem);
82 this.onClick.emit(this.leftBarTabs.menuItems[this.leftBarTabs.selectedIndex]);
83 const deferred: ng.IDeferred<boolean> = this.$q.defer();
84 deferred.resolve(true);
85 return deferred.promise;
88 private updateMenuItemByRole(menuItems: MenuItem[], role: string): MenuItem[] {
89 const filteredMenuItems: MenuItem[] = [];
90 menuItems.forEach((item: any) => {
91 if (!(item.disabledRoles && item.disabledRoles.indexOf(role) > -1)) {
92 filteredMenuItems.push(item);
95 return filteredMenuItems;
98 private updateSelectedMenuItem(): void {
99 const stateArray: Array<string> = this.$state.current.name.split('.', 2);
100 const stateWithoutInternalNavigate: string = stateArray[0] + '.' + stateArray[1];
101 const selectedItem: MenuItem = this.leftBarTabs.menuItems.find((item: MenuItem) => {
102 let itemStateArray: Array<string> = item.state.split('.', 2);
103 let itemStateWithoutNavigation: string = itemStateArray[0] + '.' + itemStateArray[1];
104 return (itemStateWithoutNavigation === stateWithoutInternalNavigate);
106 this.leftBarTabs.selectedIndex = selectedItem ? this.leftBarTabs.menuItems.indexOf(selectedItem) : 0;
107 this.onClick.emit(this.leftBarTabs.menuItems[this.leftBarTabs.selectedIndex]);