Developed disable navigation mechanism

Added a list for events to not fire an WINDOW_OUT event after sdc notifies about them
Small fix to Plugins loader

Change-Id: Ia31ebf4095b94a5ca602c4f502df4fcc32368b0b
Issue-ID: SDC-1277
Signed-off-by: Idan Amit <ia096e@intl.att.com>
diff --git a/catalog-ui/src/app/models/base-pubsub.ts b/catalog-ui/src/app/models/base-pubsub.ts
index c4b109f..41e8039 100644
--- a/catalog-ui/src/app/models/base-pubsub.ts
+++ b/catalog-ui/src/app/models/base-pubsub.ts
@@ -6,12 +6,14 @@
     eventsCallbacks: Array<Function>;
     clientId: string;
     eventsToWait: Map<string, Array<string>>;
+    lastEventNotified: string;
 
     constructor(pluginId: string) {
         this.subscribers = new Map<string, ISubscriber>();
         this.eventsCallbacks = [];
         this.eventsToWait = new Map<string, Array<string>>();
         this.clientId = pluginId;
+        this.lastEventNotified = "";
         this.onMessage = this.onMessage.bind(this);
 
         window.addEventListener("message", this.onMessage);
@@ -54,9 +56,10 @@
 
         this.subscribers.forEach( (subscriber: ISubscriber, subscriberId: string) => {
             subscriber.window.postMessage(eventObj, subscriber.locationUrl);
-
         });
 
+        this.lastEventNotified = eventType;
+
         return {
             subscribe: function(callbackFn) {
 
diff --git a/catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.ts b/catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.ts
index 83d302b..cd92cca 100644
--- a/catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.ts
+++ b/catalog-ui/src/app/ng2/components/ui/plugin/plugin-frame.component.ts
@@ -58,15 +58,20 @@
         // before moving to a new state
         this.$scope.$on('$stateChangeStart', (event, toState, toParams, fromState, fromParams) => {
             if ((fromState.name !== toState.name) || (fromState.name === toState.name) && (toParams.path !== fromParams.path)) {
-                if (!this.isClosed) {
-                    event.preventDefault();
+                if(this.eventBusService.NoWindowOutEvents.indexOf(this.eventBusService.lastEventNotified) == -1) {
+                    if (!this.isClosed) {
+                        event.preventDefault();
 
-                    this.eventBusService.notify("WINDOW_OUT").subscribe(() => {
-                        this.isClosed = true;
-                        this.eventBusService.unregister(this.plugin.pluginId);
+                        this.eventBusService.notify("WINDOW_OUT").subscribe(() => {
+                            this.isClosed = true;
+                            this.eventBusService.unregister(this.plugin.pluginId);
 
-                        this.$state.go(toState.name, toParams);
-                    });
+                            this.$state.go(toState.name, toParams);
+                        });
+                    }
+                }
+                else {
+                    this.eventBusService.unregister(this.plugin.pluginId);
                 }
             }
         });
diff --git a/catalog-ui/src/app/ng2/services/event-bus.service.ts b/catalog-ui/src/app/ng2/services/event-bus.service.ts
index cff18e1..10990e2 100644
--- a/catalog-ui/src/app/ng2/services/event-bus.service.ts
+++ b/catalog-ui/src/app/ng2/services/event-bus.service.ts
@@ -4,8 +4,11 @@
 @Injectable()
 export class EventBusService extends BasePubSub {
 
+    NoWindowOutEvents: Array<string>;
+
     constructor() {
         super("sdc-hub");
+        this.NoWindowOutEvents = ["CHECK_IN", "SUBMIT_FOR_TESTING", "UNDO_CHECK_OUT"];
     }
 
     protected handlePluginRegistration(eventData: IPubSubEvent, event: any) {
diff --git a/catalog-ui/src/app/view-models/workspace/tabs/plugins/plugins-context-view.html b/catalog-ui/src/app/view-models/workspace/tabs/plugins/plugins-context-view.html
index d70717a..3746bc0 100644
--- a/catalog-ui/src/app/view-models/workspace/tabs/plugins/plugins-context-view.html
+++ b/catalog-ui/src/app/view-models/workspace/tabs/plugins/plugins-context-view.html
@@ -1,4 +1,4 @@
-<loader display="isLoading"></loader>
+<loader display="isLoading && plugin.isOnline" ></loader>
 <div class="workspace-plugins">
     <plugin-frame (on-loading-done)="onLoadingDone(plugin)" [plugin]="plugin" [query-params]="queryParams"></plugin-frame>
 </div>