From f61397b07126acc0dba72c2549fbf279e49c21da Mon Sep 17 00:00:00 2001
From: esikkala <esko.ikkala@aalto.fi>
Date: Tue, 5 Feb 2019 17:21:00 +0200
Subject: [PATCH] Add colors for markers and grey marker clusters

---
 src/client/components/LeafletMap.js | 90 +++++++++++++++++++++--------
 src/client/index.html               |  6 ++
 2 files changed, 71 insertions(+), 25 deletions(-)

diff --git a/src/client/components/LeafletMap.js b/src/client/components/LeafletMap.js
index c7429ece..fa97e3a9 100644
--- a/src/client/components/LeafletMap.js
+++ b/src/client/components/LeafletMap.js
@@ -28,6 +28,12 @@ import 'Leaflet.extra-markers/dist/css/leaflet.extra-markers.min.css';
 import 'Leaflet.extra-markers/dist/img/markers_default.png';
 import 'Leaflet.extra-markers/dist/img/markers_shadow.png';
 
+import markerShadowIcon from '../img/markers/marker-shadow.png';
+import markerIconViolet from '../img/markers/marker-icon-violet.png';
+import markerIconGreen from '../img/markers/marker-icon-green.png';
+import markerIconRed from '../img/markers/marker-icon-red.png';
+import markerIconOrange from '../img/markers/marker-icon-orange.png';
+
 const MAPBOX_ACCESS_TOKEN = 'pk.eyJ1IjoiZWtrb25lbiIsImEiOiJjam5vampzZ28xd2dyM3BzNXR0Zzg4azl4In0.eozyF-bBaZbA3ibhvJlJpQ';
 
 const style = {
@@ -50,16 +56,16 @@ const styles = () => ({
   },
 });
 
-// https://github.com/pointhi/leaflet-color-markers
-// const ColorIcon = L.Icon.extend({
-//   options: {
-//     shadowUrl: 'img/markers/marker-shadow.png',
-//     iconSize: [25, 41],
-//     iconAnchor: [12, 41],
-//     popupAnchor: [1, -34],
-//     shadowSize: [41, 41]
-//   }
-// });
+//https://github.com/pointhi/leaflet-color-markers
+const ColorIcon = L.Icon.extend({
+  options: {
+    shadowUrl: markerShadowIcon,
+    iconSize: [25, 41],
+    iconAnchor: [12, 41],
+    popupAnchor: [1, -34],
+    shadowSize: [41, 41]
+  }
+});
 
 class LeafletMap extends React.Component {
 
@@ -204,7 +210,12 @@ class LeafletMap extends React.Component {
         }
       });
     } else {
-      clusterer = new L.MarkerClusterGroup();
+      clusterer = new L.MarkerClusterGroup({
+        iconCreateFunction: cluster => {
+          const childCount = cluster.getChildCount();
+          return new L.DivIcon({ html: '<div><span>' + childCount + '</span></div>', className: 'marker-cluster marker-cluster-grey', iconSize: new L.Point(40, 40) });
+        }
+      });
     }
 
     results.forEach(value => {
@@ -224,21 +235,50 @@ class LeafletMap extends React.Component {
     } else {
       const { lat, long } = result;
       const latLng = [+lat, +long];
-      // https://github.com/coryasilva/Leaflet.ExtraMarkers
-      const icon = L.ExtraMarkers.icon({
-        icon: 'fa-number',
-        number: result.manuscriptCount,
-        markerColor: 'red',
-        shape: 'circle',
-        prefix: 'fa'
-      });
+      let marker = null;
+
+      if (this.props.variant === 'productionPlaces') {
+        // https://github.com/coryasilva/Leaflet.ExtraMarkers
+        const icon = L.ExtraMarkers.icon({
+          icon: 'fa-number',
+          number: result.manuscriptCount,
+          markerColor: 'red',
+          shape: 'circle',
+          prefix: 'fa'
+        });
+        marker = L.marker(latLng, {
+          icon: icon,
+          manuscriptCount: result.manuscriptCount ? result.manuscriptCount : null,
+          id: result.id
+        })
+          .on('click', this.markerOnClick);
+      } else {
+
+        const color = 'green';
+
+        let markerIcon = '';
+        switch(color) {
+          case 'violet':
+            markerIcon = markerIconViolet;
+            break;
+          case 'green':
+            markerIcon = markerIconGreen;
+            break;
+          case 'red':
+            markerIcon = markerIconRed;
+            break;
+          case 'orange':
+            markerIcon = markerIconOrange;
+            break;
+        }
+
+        marker = L.marker(latLng, {
+          icon: new ColorIcon({iconUrl: markerIcon }),
+          id: result.id
+        })
+          .on('click', this.markerOnClick);
+      }
 
-      const marker = L.marker(latLng, {
-        icon: icon,
-        manuscriptCount: result.manuscriptCount ? result.manuscriptCount : null,
-        id: result.id
-      })
-        .on('click', this.markerOnClick);
       return marker;
     }
   }
diff --git a/src/client/index.html b/src/client/index.html
index b167b569..fd932362 100644
--- a/src/client/index.html
+++ b/src/client/index.html
@@ -29,6 +29,12 @@
       font-size: 14px;
       font-family: 'Roboto', sans-serif;
     }
+    .marker-cluster-grey {
+      background-color: rgba(128,128,128, 0.6);
+      }
+    .marker-cluster-small div {
+      background-color: rgba(211,211,211, 0.6);
+    }
     .rstcustom__rowWrapper {
       display: flex;
       align-items: center;
-- 
GitLab