[CORD-1232] Filtering events based on updated properies

Change-Id: If96da2f5c987f487b4d8b9ec7c68e44869cb4e12
diff --git a/src/app/datasources/websocket/global.ts b/src/app/datasources/websocket/global.ts
index a820269..7e5dad7 100644
--- a/src/app/datasources/websocket/global.ts
+++ b/src/app/datasources/websocket/global.ts
@@ -23,27 +23,38 @@
     '$log'
   ];
 
+
   private _events: Subject<IWSEvent> = new Subject<IWSEvent>();
-    private socket;
-    constructor(
-      private AppConfig: IXosAppConfig,
-      private $log: ng.ILogService
-    ) {
-      this.socket = io(this.AppConfig.websocketClient);
-      this.socket.on('event', (data: IWSEvent): void => {
-          this.$log.debug(`[WebSocket] Received Event for: ${data.model} [${data.msg.pk}]`);
-          this._events.next(data);
+  private socket;
+  constructor(
+    private AppConfig: IXosAppConfig,
+    private $log: ng.ILogService
+  ) {
+    // NOTE list of field that are not useful to the UI
+    const ignoredFields: string[] = ['created', 'updated', 'backend_register'];
 
-          // NOTE update observers of parent classes
-          if (data.msg.object.class_names && angular.isString(data.msg.object.class_names)) {
-            const models = data.msg.object.class_names.split(',');
-            _.forEach(models, (m: string) => {
-              data.model = m;
-              this._events.next(data);
-            });
-          }
+    this.socket = io(this.AppConfig.websocketClient);
+    this.socket.on('event', (data: IWSEvent): void => {
+        this.$log.debug(`[WebSocket] Received Event for: ${data.model} [${data.msg.pk}]`);
 
-        });
+        if (data.msg.changed_fields.length === 0 || _.intersection(data.msg.changed_fields, ignoredFields).length === data.msg.changed_fields.length) {
+          // NOTE means that the only updated fields does not change anything in the UI, so don't send events around
+          this.$log.debug(`[WebSocket] Ignoring Event for: ${data.model} [${data.msg.pk}]`);
+          return;
+        }
+
+        this._events.next(data);
+
+        // NOTE update observers of parent classes
+        if (data.msg.object.class_names && angular.isString(data.msg.object.class_names)) {
+          const models = data.msg.object.class_names.split(',');
+          _.forEach(models, (m: string) => {
+            data.model = m;
+            this._events.next(data);
+          });
+        }
+
+      });
     }
     list() {
       return this._events.asObservable();