[CORD-1858] Avoid event duplication and skipping notification for parent models
Change-Id: I8815de31b0adb731226ae26bedbe3598bde04aca
diff --git a/src/app/datasources/stores/synchronizer.store.ts b/src/app/datasources/stores/synchronizer.store.ts
index 635e6db..e1b26b3 100644
--- a/src/app/datasources/stores/synchronizer.store.ts
+++ b/src/app/datasources/stores/synchronizer.store.ts
@@ -36,7 +36,7 @@
if (!e.msg || !e.msg.changed_fields) {
return false;
}
- return e.msg.changed_fields.indexOf('backend_status') > -1;
+ return (e.msg.changed_fields.indexOf('backend_status') > -1 || e.msg.changed_fields.indexOf('backend_code') > -1) && !e.skip_notification;
})
.subscribe(
(event: IWSEvent) => {
diff --git a/src/app/datasources/websocket/global.ts b/src/app/datasources/websocket/global.ts
index 1367dc7..32f6f4a 100644
--- a/src/app/datasources/websocket/global.ts
+++ b/src/app/datasources/websocket/global.ts
@@ -23,6 +23,7 @@
export interface IWSEvent {
model: string;
+ skip_notification?: boolean;
msg: {
changed_fields: string[],
object?: any,
@@ -60,18 +61,20 @@
return;
}
- this.$log.info(`[WebSocket] Received Event for: ${data.model} [${data.msg.pk}]`);
+ this.$log.info(`[WebSocket] Received Event for: ${data.model} [${data.msg.pk}]`, data);
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(',');
+ let event: IWSEvent = angular.copy(data);
_.forEach(models, (m: string) => {
// send event only if the parent class is not the same as the model class
- if (data.model !== m) {
- data.model = m;
- this._events.next(data);
+ if (event.model !== m && m !== 'object') {
+ event.model = m;
+ event.skip_notification = true;
+ this._events.next(event);
}
});
}