From 89745e3a831e87aef648f951304b9f0008f0c0c0 Mon Sep 17 00:00:00 2001
From: simon <simon@journeyman.cc>
Date: Fri, 21 Jul 2017 16:39:59 +0100
Subject: [PATCH] Minor UI fixes

---
 .../youyesyet/canvasser_app/handlers.cljs     | 76 ++++++++++++-------
 .../canvasser_app/views/building.cljs         |  4 +-
 .../youyesyet/canvasser_app/views/map.cljs    |  6 +-
 3 files changed, 56 insertions(+), 30 deletions(-)

diff --git a/src/cljs/youyesyet/canvasser_app/handlers.cljs b/src/cljs/youyesyet/canvasser_app/handlers.cljs
index a916231..a010699 100644
--- a/src/cljs/youyesyet/canvasser_app/handlers.cljs
+++ b/src/cljs/youyesyet/canvasser_app/handlers.cljs
@@ -57,32 +57,56 @@
 
 
 (reg-event-db
- :send-intention
- (fn [db [_ args]]
-   (let [intention (:intention args)
-         elector-id (:elector-id args)
-         elector
-         (first
-          (remove nil?
-                  (map
-                   #(if (= elector-id (:id %)) %)
-                   (:electors (:address db)))))
-         old-address (:address db)
-         new-address (assoc old-address :electors (cons (assoc elector :intention intention) (remove #(= % elector) (:electors old-address))))]
-     (cond
-      (nil? elector)
-      (assoc db :error "No elector found; not setting intention")
-      (= intention (:intention elector)) (do (js/console.log "Elector's intention hasn't changed; not setting intention") db)
-      true
-      (do
-        (js/console.log (str "Setting intention of elector " elector " to " intention))
-        (merge
-         (clear-messages db)
-         {:addresses
-          (cons new-address (remove old-address (:addresses db)))
-          :address new-address
-          :elector elector
-          :outqueue (cons (assoc args :action :set-intention) (:outqueue db))}))))))
+  :send-intention
+  (fn [db [_ args]]
+    (let [intention (:intention args)
+          elector-id (:elector-id args)
+          old-elector (first
+                        (remove nil?
+                                (map
+                                  #(if (= elector-id (:id %)) %)
+                                  (:electors (:dwelling db)))))
+          new-elector (assoc old-elector :intention intention)
+          old-dwelling (:dwelling db)
+          new-dwelling (assoc
+                         old-dwelling
+                         :electors
+                         (cons
+                           new-elector
+                           (remove
+                             #(= % old-elector)
+                             (:electors old-dwelling))))
+          old-address (:address db)
+          new-address (assoc
+                        old-address
+                        :dwellings
+                        (cons
+                          new-dwelling
+                          (remove
+                            #(= % old-dwelling)
+                            (:dwellings old-address))))]
+      (cond
+        (nil? old-elector)
+        (assoc db :error "No elector found; not setting intention")
+        (= intention (:intention old-elector))
+        (do
+          (js/console.log "Elector's intention hasn't changed; not setting intention")
+          db)
+        true
+        (do
+          (js/console.log (str "Setting intention of elector " old-elector " to " intention))
+          (merge
+            (clear-messages db)
+            {:addresses
+             (cons
+               new-address
+               (remove #(= % old-address) (:addresses db)))
+             :address new-address
+             :dwelling new-dwelling
+             :elector new-elector
+             :outqueue (cons
+                         (assoc args :action :set-intention)
+                         (:outqueue db))}))))))
 
 
  (reg-event-db
diff --git a/src/cljs/youyesyet/canvasser_app/views/building.cljs b/src/cljs/youyesyet/canvasser_app/views/building.cljs
index 5e9e935..54a1ed2 100644
--- a/src/cljs/youyesyet/canvasser_app/views/building.cljs
+++ b/src/cljs/youyesyet/canvasser_app/views/building.cljs
@@ -49,4 +49,6 @@
            (ui/big-link
              (:sub-address dwelling)
              (str "#/electors/" (:id dwelling))) )
-         (:dwellings address))]]]))
+         (sort
+           #(< (:sub-address %1) (:sub-address %2))
+           (:dwellings address)))]]]))
diff --git a/src/cljs/youyesyet/canvasser_app/views/map.cljs b/src/cljs/youyesyet/canvasser_app/views/map.cljs
index f60887d..257e404 100644
--- a/src/cljs/youyesyet/canvasser_app/views/map.cljs
+++ b/src/cljs/youyesyet/canvasser_app/views/map.cljs
@@ -62,9 +62,9 @@
           (remove
             nil?
             (map
-              #(:intention %)
-              (map :electors
-                   (:dwellings address)))))]
+              :intention
+              (mapcat :electors
+                      (:dwellings address)))))]
     (case (count intentions)
       0 "unknown-pin"
       1 (str (name (first intentions)) "-pin")