1 import {Injectable} from '@angular/core';
2 import {BasePubSub, IPubSubEvent} from "sdc-pubsub";
5 export class EventBusService extends BasePubSub {
7 NoWindowOutEvents: Array<string>;
11 this.NoWindowOutEvents = ["CHECK_IN", "SUBMIT_FOR_TESTING", "UNDO_CHECK_OUT"];
14 public unregister(pluginId: string) {
15 const unregisterData = {
19 this.notify('PLUGIN_CLOSE', unregisterData).subscribe(() => {
20 super.unregister(pluginId);
24 public disableNavigation(isDisable: boolean) {
25 let iframes = document.getElementsByClassName("plugin-iframe");
28 _.forEach(iframes, (iframeElement: HTMLElement) => {
29 iframeElement.style.zIndex = '1300';
31 let disableDiv = document.createElement('div');
32 disableDiv.style.cssText = "position: fixed;\n" +
34 "background: rgba(0,0,0,0.5);\n" +
39 disableDiv.setAttribute("class", "disable-navigation-div");
40 document.body.appendChild(disableDiv);
42 document.getElementsByClassName("disable-navigation-div")[0].remove();
44 _.forEach(iframes, (iframeElement: HTMLElement) => {
45 iframeElement.style.zIndex = '';
50 public notify(eventType: string, eventData?: any, disableOnWaiting: boolean = true) {
51 let doDisable = false;
53 if (disableOnWaiting) {
54 doDisable = this.isWaitingForEvent(eventType);
57 this.disableNavigation(true);
61 const origSubscribe = super.notify(eventType, eventData).subscribe;
64 subscribe: function (callbackFn) {
67 this.disableNavigation(false);
76 protected handlePluginRegistration(eventData: IPubSubEvent, event: any) {
77 if (eventData.type === 'PLUGIN_REGISTER') {
78 this.register(eventData.data.pluginId, event.source, event.origin);
80 let newEventsList = [];
82 if (this.eventsToWait.has(eventData.data.pluginId)) {
83 newEventsList = _.union(this.eventsToWait.get(eventData.data.pluginId), eventData.data.eventsToWait);
85 newEventsList = eventData.data.eventsToWait;
88 this.eventsToWait.set(eventData.data.pluginId, newEventsList);
90 } else if (eventData.type === 'PLUGIN_UNREGISTER') {
91 this.unregister(eventData.data.pluginId);
95 protected onMessage(event: any) {
96 if (event.data.type === 'PLUGIN_REGISTER') {
97 this.handlePluginRegistration(event.data, event);
100 super.onMessage(event);
102 if (event.data.type === 'PLUGIN_UNREGISTER') {
103 this.handlePluginRegistration(event.data, event);