UI mostly working

There's no target yet for the followup form, but it otherwise good.
This commit is contained in:
Simon Brooke 2017-03-26 09:12:15 +01:00
parent 013ebea4db
commit 65b69939b3
12 changed files with 174 additions and 42 deletions

View file

@ -12,10 +12,10 @@
[youyesyet.ui-utils :as ui]
[youyesyet.views.about :as about]
[youyesyet.views.electors :as electors]
[youyesyet.views.followup :as followup]
[youyesyet.views.issue :as issue]
[youyesyet.views.issues :as issues]
[youyesyet.views.map :as maps]
[youyesyet.views.followup-request :as request])
[youyesyet.views.map :as maps])
(:import goog.History))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -50,6 +50,9 @@
(defn electors-page []
(electors/panel))
(defn followup-page []
(followup/panel))
(defn issues-page []
(issues/panel))
@ -59,12 +62,10 @@
(defn map-page []
(maps/panel))
(defn request-page []
(request/panel))
(def pages
{:about #'about-page
:electors #'electors-page
:followup #'followup-page
:issues #'issues-page
:issue #'issue-page
:map #'map-page
@ -89,11 +90,14 @@
(secretary/defroute "/electors" []
(rf/dispatch [:set-active-page :electors]))
(secretary/defroute "/followup" []
(rf/dispatch [:set-active-page :followup]))
(secretary/defroute "/issues" []
(rf/dispatch [:set-active-page :issues]))
(secretary/defroute "/issues/:elector" {elector :elector}
(rf/dispatch (list [:set-elector elector] [:set-active-page :issues])))
(secretary/defroute "/issues/:elector" {elector-id :elector}
(rf/dispatch [:set-elector-and-page elector-id :issues]))
(secretary/defroute "/issue/:issue" {issue :issue}
(rf/dispatch [:set-issue issue]))

View file

@ -31,7 +31,11 @@
(def default-db
{;;; the currently selected address, if any.
:address {:id 1 :address "13 Imaginary Terrace, IM1 3TE" :latitude 55.8253043 :longitude -4.2590944}
:address {:id 1 :address "13 Imaginary Terrace, IM1 3TE" :latitude 55.8253043 :longitude -4.2590944
:electors [{:id 1 :name "Alan Anderson" :gender :male :intention :no}
{:id 2 :name "Ann Anderson" :gender :female}
{:id 3 :name "Alex Anderson" :gender :fluid :intention :yes}
{:id 4 :name "Andy Anderson" :intention :yes}]}
;;; a list of the addresses in the current location at which there
;;; are electors registered.
:addresses [{:id 1 :address "13 Imaginary Terrace, IM1 3TE" :latitude 55.8253043 :longitude -4.2590944
@ -40,10 +44,7 @@
{:id 3 :name "Alex Anderson" :gender :fluid :intention :yes}
{:id 4 :name "Andy Anderson" :intention :yes}]}]
;;; electors at the currently selected address
:electors [{:id 1 :name "Alan Anderson" :gender :male :intention :no}
{:id 2 :name "Ann Anderson" :gender :female}
{:id 3 :name "Alex Anderson" :gender :fluid :intention :yes}
{:id 4 :name "Andy Anderson" :intention :yes}]
:elector {:id 1 :name "Alan Anderson" :gender :male :intention :no}
;;; the issue from among the issues which is currently selected.
:issue "Currency"
;;; the issues selected for the issues page on this day.

View file

@ -35,6 +35,16 @@
(fn [db [_ page]]
(assoc db :page page)))
(reg-event-db
:set-elector-and-page
(fn [db [_ [elector-id page]]]
(let [elector
(remove nil?
(map
#(if (= elector-id (:id %)) %)
(:electors (:address db))))]
(merge db {:elector elector :page page}))))
(reg-event-db
:set-issue
(fn [db [_ issue]]

View file

@ -40,9 +40,9 @@
(:addresses db)))
(reg-sub
:electors
:elector
(fn [db _]
(:electors db)))
(:elector db)))
(reg-sub
:issue

View file

@ -45,6 +45,14 @@
:on-click #(reset! collapsed? true)} title]]))
(defn error-panel
[message]
[:div
[:h1.error message]
[:div.container {:id "main-container"}
(ui/back-link)]])
(defn navbar []
(r/with-let [collapsed? (r/atom true)]
[:div {:id "nav"}

View file

@ -95,22 +95,25 @@
"Generate the electors panel."
[]
(let [address @(subscribe [:address])
electors @(subscribe [:electors])
electors (:electors address)
options @(subscribe [:options])]
[:div
[:h1 (:address address) (count electors) " electors"]
[:div.container {:id "main-container"}
[:table
;; genders row
(genders-row electors)
;; names row
(names-row electors)
;; options rows
(map
#(options-row electors %)
options)
;; issues row
(issues-row electors)]
(ui/back-link)]]))
(if address
[:div
[:h1 (:address address) (count electors) " electors"]
[:div.container {:id "main-container"}
[:table
[:tbody
;; genders row
(genders-row electors)
;; names row
(names-row electors)
;; options rows
(map
#(options-row electors %)
options)
;; issues row
(issues-row electors)]]
(ui/back-link)]]
(ui/error-panel "No address selected"))))

View file

@ -1,5 +1,6 @@
(ns youyesyet.views.followup-request
(:require [re-frame.core :refer [reg-sub]]))
(ns youyesyet.views.followup
(:require [re-frame.core :refer [reg-sub subscribe]]
[youyesyet.ui-utils :as ui]))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;
@ -35,4 +36,34 @@
(defn panel
"Generate the followup-request panel."
[]
[])
(let [issue @(subscribe [:issue])
issues @(subscribe [:issues])
elector @(subscribe [:elector])
address @(subscribe [:address])]
(cond
(nil? address)
(ui/error-panel "No address selected")
(nil? issues)
(ui/error-panel "No issues loaded")
true
[:div
[:h1 "Followup Request"]
[:div.container {:id "main-container"}
[:form {}
[:p.widget
[:label {:for "elector"} "Elector"]
[:select {:id "elector" :name "elector"}
(map
#(let [selkey (if (= (:id elector) (:id %)) :selected :not-selected)]
[:option {:value (:id %) selkey "true"} (:name %)]) (:electors address))]]
[:p.widget
[:label {:for "issue"} "Issue"]
[:select {:id "issue" :name "issue"}
(map
#(let [selkey (if (= (:id issue) (:id %)) :selected :not-selected)]
[:option {selkey "true"} %]) (keys issues))]]
[:p.widget
[:label {:for "submit"} " "]
[:input {:id "submit" :name "submit" :type "submit" :value "Request Call"}]]
]
(ui/back-link)]])))

View file

@ -43,4 +43,5 @@
[:div {:id "issue"}
[:div {:id "issue-text"}
(issues issue)]]
(ui/big-link "Request call" "#/followup")
(ui/back-link)]]))

View file

@ -38,9 +38,11 @@
"Generate the issues panel."
[]
(let [issues @(subscribe [:issues])]
[:div
[:h1 "Issues"]
[:div.container {:id "main-container"}
(ui/back-link)
[:div {:id "issue-list"}
(map (fn [k] (ui/big-link k (str "#/issue/" k))) (keys issues))]]]))
(if issues
[:div
[:h1 "Issues"]
[:div.container {:id "main-container"}
(ui/back-link)
[:div {:id "issue-list"}
(map (fn [k] (ui/big-link k (str "#/issue/" k))) (keys issues))]]]
(ui/error-panel "No issues loaded"))))

View file

@ -73,8 +73,6 @@
(.addTp (.marker js/L [latitude longitude] {:icon pin})) view))
;; My gods mapbox is user-hostile!
(defn map-did-mount-mapbox
"Did-mount function loading map tile data from MapBox (proprietary)."
@ -96,7 +94,8 @@
(clj->js {:attribution osm-attrib
:maxZoom 18}))
view)
(map #(add-map-pin (:latitude %) (:longitude %) (pin-image %) view) addresses)))
;; (map #(add-map-pin (:latitude %) (:longitude %) (pin-image %) view) addresses)
))
(defn map-did-mount