From 9dc90ebdbf5fb78b272b4d530e92f601e36493b8 Mon Sep 17 00:00:00 2001
From: Mathis Neumann <mathis@simpletechs.net>
Date: Sun, 10 Jul 2016 01:02:09 +0200
Subject: [PATCH] also render changes via UPDATE operations

---
 app/controllers/deployments/single.js | 5 +++--
 app/services/changelog-parser.js      | 4 +++-
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/app/controllers/deployments/single.js b/app/controllers/deployments/single.js
index d03195c..7ebb0b8 100644
--- a/app/controllers/deployments/single.js
+++ b/app/controllers/deployments/single.js
@@ -14,8 +14,9 @@ export default Ember.Controller.extend({
     init() {
         this.debug('initializing controller');
     },
-    // gets automatically updated when any of the instances changes (updated from changelog stream)
-    graphModel: Ember.computed(`model.instances.{${observables.join(',')}}.[]`, function() {
+    // gets automatically updated when any of the instances changes, changes are notified via a pseudo property 'updated'
+    // using @each will also listen if the array itself changes. Can be quite expensive.
+    graphModel: Ember.computed(`model.instances.{${observables.join(',')}}.@each._updated`, function() {
         const systemId = this.get('model.systemId');
         const instances = this.get('model.instances');
         /*
diff --git a/app/services/changelog-parser.js b/app/services/changelog-parser.js
index f6eb159..ca36fb9 100644
--- a/app/services/changelog-parser.js
+++ b/app/services/changelog-parser.js
@@ -1,5 +1,6 @@
 import Ember from 'ember';
 
+// TODO: update cytoscape instead of complete rerender
 export default Ember.Service.extend({
     store: Ember.inject.service(),
     parse(changelogs) {
@@ -21,7 +22,7 @@ export default Ember.Service.extend({
             const normalized = store.normalize(data.type, data); // using application serializer
             store.push(normalized);
         },
-        UPDATE(changelog) { // FIXME: does not update view!
+        UPDATE(changelog) {
             const data = changelog.data;
             const oldRecord = this.get('store').peekRecord(data.type, data.id);
             this.debug('oldRecord', oldRecord);
@@ -29,6 +30,7 @@ export default Ember.Service.extend({
                 throw new Error(`old record for update operation not found! Id: ${data.id}`);
             }
             oldRecord.setProperties(data);
+            oldRecord.notifyPropertyChange('_updated'); // notify about pseudo property, can be listened on (see deployments/single controller)
         },
         DELETE(changelog) {
             const data = changelog.data;
-- 
GitLab