From 999a51de4c79d0a1b56bf16bbbf97f516209114d Mon Sep 17 00:00:00 2001
From: Janne Alatalo <janne.alatalo@jamk.fi>
Date: Wed, 26 Sep 2018 15:26:04 +0300
Subject: [PATCH] Add lam point hover and click handlers

---
 src/PointMap.js | 45 ++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 44 insertions(+), 1 deletion(-)

diff --git a/src/PointMap.js b/src/PointMap.js
index bf8ea4a..7a90cb2 100644
--- a/src/PointMap.js
+++ b/src/PointMap.js
@@ -21,7 +21,9 @@ class PointMap extends Component {
 
   constructor(props) {
     super(props);
-    this.state = { viewport };
+    const mouseover = null;
+    const clicked = null;
+    this.state = { viewport, mouseover, clicked };
   }
 
   update_tooltip(visible, x, y, content) {
@@ -38,6 +40,36 @@ class PointMap extends Component {
     });
   }
 
+  handleOnHover(e) {
+    this.setState(prevState => {
+      let mouseover = null;
+      if (e.picked) {
+        mouseover = e.object.get_id();
+      }
+      return { ...prevState, mouseover };
+    });
+  }
+
+  handleOnClickObject(e) {
+    this.setState(prevState => {
+      let clicked = null;
+      if (e.picked) {
+        clicked = e.object.get_id();
+      }
+      return { ...prevState, clicked };
+    });
+    return false;
+  }
+
+  handleOnClickMap(e) {
+    if (e === null) {
+      this.setState(prevState => {
+        const clicked = null;
+        return { ...prevState, clicked };
+      });
+    }
+  }
+
   render() {
     const point_coords = this.props.points.toArray();
     const layers = [
@@ -59,6 +91,16 @@ class PointMap extends Component {
         filled: true,
         extruded: true,
         getElevation: d => d.get_avg_traffic_vol() * 20,
+        getLineColor: d => {
+          if (this.state.mouseover === d.get_id()) {
+            return [255, 0, 0];
+          }
+          return d.get_color();
+        },
+        wireframe: true,
+        pickable: true,
+        onClick: e => this.handleOnClickObject(e),
+        onHover: e => this.handleOnHover(e),
       })
     ];
 
@@ -70,6 +112,7 @@ class PointMap extends Component {
           layers={layers}
           controller={MapController}
           onViewportChange={v => this.setState({viewport: v})}
+          onLayerClick={e => this.handleOnClickMap(e)}
         >
           <StaticMap
             {...this.props.mapSize}
-- 
GitLab