1 import { Injectable } from '@angular/core';
2 import {BasePubSub, IPubSubEvent} from "../../models/base-pubsub";
5 export class EventBusService extends BasePubSub {
7 NoWindowOutEvents: Array<string>;
11 this.NoWindowOutEvents = ["CHECK_IN", "SUBMIT_FOR_TESTING", "UNDO_CHECK_OUT"];
14 protected handlePluginRegistration(eventData: IPubSubEvent, event: any) {
15 if (eventData.type === 'PLUGIN_REGISTER') {
16 this.register(eventData.data.pluginId, event.source, event.origin);
18 let newEventsList = [];
20 if (this.eventsToWait.has(eventData.data.pluginId)) {
21 newEventsList = _.union(this.eventsToWait.get(eventData.data.pluginId), eventData.data.eventsToWait);
24 newEventsList = eventData.data.eventsToWait;
27 this.eventsToWait.set(eventData.data.pluginId, newEventsList);
29 } else if (eventData.type === 'PLUGIN_UNREGISTER') {
30 this.unregister(eventData.data.pluginId);
34 public unregister(pluginId: string) {
35 const unregisterData = {
39 this.notify('PLUGIN_CLOSE', unregisterData).subscribe(() => {
40 super.unregister(pluginId);
44 protected onMessage(event: any) {
45 if (event.data.type === 'PLUGIN_REGISTER') {
46 this.handlePluginRegistration(event.data, event);
49 super.onMessage(event);
51 if (event.data.type === 'PLUGIN_UNREGISTER') {
52 this.handlePluginRegistration(event.data, event);
56 public disableNavigation(isDisable: boolean) {
58 let disableDiv = document.createElement('div');
59 disableDiv.style.cssText = "position: fixed;\n" +
61 "background: rgba(0,0,0,0.5);\n" +
66 disableDiv.setAttribute("class", "disable-navigation-div");
67 document.body.appendChild(disableDiv);
70 document.getElementsByClassName("disable-navigation-div")[0].remove();
74 public notify(eventType:string, eventData?:any, disableOnWaiting:boolean=true) {
75 let doDisable = false;
77 if (disableOnWaiting) {
78 doDisable = this.isWaitingForEvent(eventType);
81 this.disableNavigation(true);
85 const origSubscribe = super.notify(eventType, eventData).subscribe;
88 subscribe: function (callbackFn) {
91 this.disableNavigation(false);