[CORD-1232] Filtering events based on updated properies
Change-Id: If96da2f5c987f487b4d8b9ec7c68e44869cb4e12
(cherry picked from commit e015fa919bede8603079aa6cca04cba7eb438686)
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();