From ea4aedce3acd82e77acec46df9fee2bacce3a18f Mon Sep 17 00:00:00 2001
From: Mathis Neumann <mathis@simpletechs.net>
Date: Tue, 21 Jun 2016 13:18:49 +0200
Subject: [PATCH] listen to clicks on objects in the visualisation

---
 app/components/architecture-viewer.js           |  4 ++++
 .../component.js                                | 17 +++++++++++++++++
 .../components/architecture-viewer.hbs          |  9 +++++++--
 3 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/app/components/architecture-viewer.js b/app/components/architecture-viewer.js
index be2f110..1396d9f 100644
--- a/app/components/architecture-viewer.js
+++ b/app/components/architecture-viewer.js
@@ -5,6 +5,7 @@ import Themes from './architecture-visualisation-cytoscape/themes';
 
 export default Ember.Component.extend({
     graph: null,
+    entityDetails: null,
     layoutAlgorithm: 'cose',
     theme: Themes[Object.keys(Themes)[0]], // first theme
     themes: Object.keys(Themes),
@@ -27,6 +28,9 @@ export default Ember.Component.extend({
         },
         selectTheme(theme) {
             this.set('theme', Themes[theme]);
+        },
+        graphClick(rawEntity) {
+            this.set('entityDetails', rawEntity);
         }
     }
 });
diff --git a/app/components/architecture-visualisation-cytoscape/component.js b/app/components/architecture-visualisation-cytoscape/component.js
index 86f6755..e0de2b8 100644
--- a/app/components/architecture-visualisation-cytoscape/component.js
+++ b/app/components/architecture-visualisation-cytoscape/component.js
@@ -44,6 +44,23 @@ export default Ember.Component.extend({
           }
         });
 
+        this.rendering.on('click', (event) => {
+            const target = event.cyTarget;
+            const data = target && target.data && target.data();
+            if(data && data.id) {
+                this.debug('clicked on element in graph', data, event);
+                const action = this.get('select');
+                if(action) {
+                    action(data);
+                } else {
+                    this.debug('select action not set, ignoring click');
+                }
+            } else {
+                this.debug('clicked on non-selectable entity', event);
+            }
+
+        });
+
         // just for development purposes - TODO: remove
         window.cy = cytoscape;
         window.cytoscape = this.rendering;
diff --git a/app/templates/components/architecture-viewer.hbs b/app/templates/components/architecture-viewer.hbs
index ce7d54b..f780a96 100644
--- a/app/templates/components/architecture-viewer.hbs
+++ b/app/templates/components/architecture-viewer.hbs
@@ -1,8 +1,8 @@
 <div class="row">
     <div class="col-md-10 visualisationContainer">
-        {{architecture-visualisation-cytoscape graph=graph layoutAlgorithm=layoutAlgorithm theme=theme}}
+        {{architecture-visualisation-cytoscape graph=graph layoutAlgorithm=layoutAlgorithm theme=theme select=(action "graphClick")}}
     </div>
-    <div class="col-md-2">
+    <div class="col-md-2 visualistaionSidebar">
         <div class="form-group">
           <label for="layoutAlgorithm">Layout:</label>
           <select class="form-control" id="layoutAlgorithm" onchange={{action "selectLayoutAlgorithm" value="target.value"}}>
@@ -19,6 +19,11 @@
             {{/each}}
           </select>
         </div>
+
+        {{#if entityDetails}}
+            <h3>Details</h3>
+            {{entityDetails.type}}
+        {{/if}}
     </div>
 </div>
 
-- 
GitLab