1 import {Component, OnInit} from '@angular/core';
2 import {GRAPH_EVENTS, SdcElementType} from "app/utils";
3 import {LeftPaletteComponent, Point} from "app/models";
4 import {EventListenerService} from "app/services";
5 import {LeftPaletteMetadataTypes} from "app/models/components/displayComponent";
8 selector: 'app-palette-popup-panel',
9 templateUrl: './palette-popup-panel.component.html',
10 styleUrls: [ './palette-popup-panel.component.less' ],
12 export class PalettePopupPanelComponent implements OnInit {
14 public panelTitle: string;
15 public isShowPanel: boolean;
16 private component: Component;
17 private displayComponent: LeftPaletteComponent;
18 private popupPanelPosition:Point = new Point(0,0);
20 constructor(private eventListenerService: EventListenerService) {
21 this.isShowPanel = false;
25 this.registerObserverCallbacks();
28 public onMouseEnter() {
29 this.isShowPanel = true;
32 public getMenuItems = () => {
37 iconMode: 'secondary',
40 action: () => this.addZoneInstance()
44 public onMouseLeave() {
45 this.isShowPanel = false;
48 public addZoneInstance(): void {
49 if(this.displayComponent) {
50 this.eventListenerService.notifyObservers(GRAPH_EVENTS.ON_ADD_ZONE_INSTANCE_FROM_PALETTE, this.component, this.displayComponent, this.popupPanelPosition);
51 this.hidePopupPanel();
55 private registerObserverCallbacks() {
57 this.eventListenerService.registerObserverCallback(GRAPH_EVENTS.ON_PALETTE_COMPONENT_SHOW_POPUP_PANEL,
58 (displayComponent: LeftPaletteComponent, sectionElem: HTMLElement) => {
59 this.showPopupPanel(displayComponent, sectionElem);
62 this.eventListenerService.registerObserverCallback(GRAPH_EVENTS.ON_PALETTE_COMPONENT_HIDE_POPUP_PANEL, () => this.hidePopupPanel());
65 private getPopupPanelPosition (sectionElem: HTMLElement):Point {
66 let pos: ClientRect = sectionElem.getBoundingClientRect();
67 let offsetX: number = -30;
68 const offsetY: number = pos.height / 2;
69 return new Point((pos.right + offsetX), (pos.top - offsetY + window.pageYOffset));
72 private setPopupPanelTitle(component: LeftPaletteComponent): void {
73 if (component.componentSubType === SdcElementType.GROUP) {
74 this.panelTitle = "Add Group";
78 if (component.componentSubType === SdcElementType.POLICY) {
79 this.panelTitle = "Add Policy";
84 private showPopupPanel(displayComponent:LeftPaletteComponent, sectionElem: HTMLElement) {
85 if(!this.isShowPanel){
86 this.displayComponent = displayComponent;
87 this.setPopupPanelTitle(displayComponent);
88 this.popupPanelPosition = this.getPopupPanelPosition(sectionElem);
89 this.isShowPanel = true;
93 private hidePopupPanel() {
95 this.isShowPanel = false;