From 3a18cacf0fc761868a523dbb05e4ec30213c7942 Mon Sep 17 00:00:00 2001 From: simon Date: Fri, 21 Jul 2017 15:51:16 +0100 Subject: [PATCH] #43 Zoom and lat/long now captured in state. --- .../youyesyet/canvasser_app/handlers.cljs | 26 +++++++++++++++++++ src/cljs/youyesyet/canvasser_app/state.cljs | 6 ++++- .../canvasser_app/subscriptions.cljs | 19 ++++++++++++++ .../youyesyet/canvasser_app/views/map.cljs | 13 ++++++++-- 4 files changed, 61 insertions(+), 3 deletions(-) diff --git a/src/cljs/youyesyet/canvasser_app/handlers.cljs b/src/cljs/youyesyet/canvasser_app/handlers.cljs index 813ec99..a916231 100644 --- a/src/cljs/youyesyet/canvasser_app/handlers.cljs +++ b/src/cljs/youyesyet/canvasser_app/handlers.cljs @@ -169,8 +169,34 @@ (assoc (clear-messages db) :issue issue))) +(reg-event-db + :set-latitude + (fn [db [_ issue]] + (assoc db :latitude issue))) + + +(reg-event-db + :set-longitude + (fn [db [_ issue]] + (assoc db :longitude issue))) + + (reg-event-db :set-telephone (fn [db [_ telephone]] (js/console.log (str "Setting telephone to " telephone)) (assoc (clear-messages db) :telephone telephone))) + + +(reg-event-db + :set-view + (fn [db [_ view]] + (assoc db :view view))) + + +(reg-event-db + :set-zoom + (fn [db [_ zoom]] + (if (integer? zoom) + (assoc db :zoom zoom) + db))) diff --git a/src/cljs/youyesyet/canvasser_app/state.cljs b/src/cljs/youyesyet/canvasser_app/state.cljs index c967f7c..241752e 100644 --- a/src/cljs/youyesyet/canvasser_app/state.cljs +++ b/src/cljs/youyesyet/canvasser_app/state.cljs @@ -82,4 +82,8 @@ ;;; the queue of items waiting to be transmitted. :outqueue () ;;; the currently displayed page within the app. - :page :home}) + :page :home + :view nil + :latitude 55.82 + :longitude -4.25 + :zoom 12}) diff --git a/src/cljs/youyesyet/canvasser_app/subscriptions.cljs b/src/cljs/youyesyet/canvasser_app/subscriptions.cljs index 3f87dee..8fd4218 100644 --- a/src/cljs/youyesyet/canvasser_app/subscriptions.cljs +++ b/src/cljs/youyesyet/canvasser_app/subscriptions.cljs @@ -76,6 +76,16 @@ (fn [db _] (:issues db))) +(reg-sub + :latitude + (fn [db _] + (:latitude db))) + +(reg-sub + :longitude + (fn [db _] + (:longitude db))) + (reg-sub :page (fn [db _] @@ -91,3 +101,12 @@ (fn [db _] (:outqueue db))) +(reg-sub + :view + (fn [db _] + (:view db))) + +(reg-sub + :zoom + (fn [db _] + (:zoom db))) diff --git a/src/cljs/youyesyet/canvasser_app/views/map.cljs b/src/cljs/youyesyet/canvasser_app/views/map.cljs index a0a7097..f60887d 100644 --- a/src/cljs/youyesyet/canvasser_app/views/map.cljs +++ b/src/cljs/youyesyet/canvasser_app/views/map.cljs @@ -77,6 +77,11 @@ so back links work." [id] (js/console.log (str "Click handler for address #" id)) + (let [view @(subscribe [:view]) + centre (.getCenter view)] + (dispatch [:set-zoom (.getZoom view)]) + (dispatch [:set-latitude (.-lat centre)]) + (dispatch [:set-longitude (.-lng centre)])) (set! window.location.href (str "#building/" id))) ;; This way is probably more idiomatic React, but history doesn't work: ;; (defn map-pin-click-handler @@ -121,7 +126,10 @@ (defn map-did-mount-osm "Did-mount function loading map tile data from Open Street Map." [] - (let [view (.setView (.map js/L "map" (clj->js {:zoomControl false})) #js [55.82 -4.25] 13) + (let [view (.setView + (.map js/L "map" (clj->js {:zoomControl false})) + #js [@(subscribe [:latitude]) @(subscribe [:longitude])] + @(subscribe [:zoom])) addresses @(subscribe [:addresses])] (js/console.log (str "Adding " (count addresses) " pins")) (doall (map #(add-map-pin % view) addresses)) @@ -129,7 +137,8 @@ (clj->js {:attribution osm-attrib :maxZoom 18})) view) - )) + (dispatch [:set-view view]) + view)) (defn map-did-mount