Stuck with an on-click handler that isn't happening

This commit is contained in:
Simon Brooke 2018-08-28 14:27:44 +01:00
parent 028022fd75
commit 7724a2514a
7 changed files with 78 additions and 39 deletions

View file

@ -5,6 +5,7 @@
<!-- head: if you want entire custom head content, override this block. --> <!-- head: if you want entire custom head content, override this block. -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="referrer" content="same-origin">
{% style "/css/yyy-common.css" %} {% style "/css/yyy-common.css" %}
{% style "/css/yyy-site.css" %} {% style "/css/yyy-site.css" %}
{% style "/css/spinner.css" %} {% style "/css/spinner.css" %}

View file

@ -118,61 +118,57 @@
;; Routes ;; Routes
(secretary/set-config! :prefix "#") (secretary/set-config! :prefix "#")
(defn log-and-dispatch [arg]
(js/console.log (str "Dispatching " arg))
(rf/dispatch arg))
(secretary/defroute "/" [] (secretary/defroute "/" []
(log-and-dispatch [:set-active-page :map])) (ui/log-and-dispatch [:set-active-page :map]))
(secretary/defroute "/about" [] (secretary/defroute "/about" []
(log-and-dispatch [:set-active-page :about])) (ui/log-and-dispatch [:set-active-page :about]))
(secretary/defroute "/dwelling" [] (secretary/defroute "/dwelling" []
(log-and-dispatch [:set-active-page :dwelling])) (ui/log-and-dispatch [:set-active-page :dwelling]))
(secretary/defroute "/dwelling/:dwelling" {dwelling-id :dwelling} (secretary/defroute "/dwelling/:dwelling" {dwelling-id :dwelling}
(log-and-dispatch [:set-dwelling dwelling-id]) (ui/log-and-dispatch [:set-dwelling dwelling-id])
(log-and-dispatch [:set-active-page :dwelling])) (ui/log-and-dispatch [:set-active-page :dwelling]))
(secretary/defroute "/building/:address" {address-id :address} (secretary/defroute "/building/:address" {address-id :address}
(log-and-dispatch [:set-address address-id])) (ui/log-and-dispatch [:set-address address-id]))
(secretary/defroute "/elector" [] (secretary/defroute "/elector" []
(log-and-dispatch [:set-active-page :elector])) (ui/log-and-dispatch [:set-active-page :elector]))
(secretary/defroute "/elector/:elector" {elector-id :elector} (secretary/defroute "/elector/:elector" {elector-id :elector}
(log-and-dispatch [:set-elector-and-page {:elector-id elector-id :page :elector}])) (ui/log-and-dispatch [:set-elector-and-page {:elector-id elector-id :page :elector}]))
(secretary/defroute "/elector/:elector/:consent" {elector-id :elector consent :consent} (secretary/defroute "/elector/:elector/:consent" {elector-id :elector consent :consent}
(log-and-dispatch [:set-consent-and-page {:elector-id elector-id :consent (and true consent) :page :elector}])) (ui/log-and-dispatch [:set-active-page {:page :elector}]))
(secretary/defroute "/elector" [] (secretary/defroute "/elector" []
(log-and-dispatch [:set-active-page :elector])) (ui/log-and-dispatch [:set-active-page :elector]))
(secretary/defroute "/followup" [] (secretary/defroute "/followup" []
(log-and-dispatch [:set-active-page :followup])) (ui/log-and-dispatch [:set-active-page :followup]))
(secretary/defroute "/gdpr" [] (secretary/defroute "/gdpr" []
(log-and-dispatch [:set-active-page :gdpr])) (ui/log-and-dispatch [:set-active-page :gdpr]))
(secretary/defroute "/gdpr/:elector" {elector-id :elector} (secretary/defroute "/gdpr/:elector" {elector-id :elector}
(log-and-dispatch [:set-elector-and-page {:elector-id elector-id :page :gdpr}])) (ui/log-and-dispatch [:set-elector-and-page {:elector-id elector-id :page :gdpr}]))
(secretary/defroute "/issues" [] (secretary/defroute "/issues" []
(log-and-dispatch [:set-active-page :issues])) (ui/log-and-dispatch [:set-active-page :issues]))
(secretary/defroute "/issues/:elector" {elector-id :elector} (secretary/defroute "/issues/:elector" {elector-id :elector}
(log-and-dispatch [:set-elector-and-page {:elector-id elector-id :page :issues}])) (ui/log-and-dispatch [:set-elector-and-page {:elector-id elector-id :page :issues}]))
(secretary/defroute "/issue/:issue" {issue :issue} (secretary/defroute "/issue/:issue" {issue :issue}
(log-and-dispatch [:set-and-go-to-issue issue])) (ui/log-and-dispatch [:set-and-go-to-issue issue]))
(secretary/defroute "/map" [] (secretary/defroute "/map" []
(log-and-dispatch [:set-active-page :map])) (ui/log-and-dispatch [:set-active-page :map]))
(secretary/defroute "/set-intention/:elector/:intention" {elector-id :elector intention :intention} (secretary/defroute "/set-intention/:elector/:intention" {elector-id :elector intention :intention}
(log-and-dispatch [:set-intention {:elector-id elector-id :intention intention}])) (ui/log-and-dispatch [:set-intention {:elector-id elector-id :intention intention}]))
;; ------------------------- ;; -------------------------
;; History ;; History

View file

@ -209,8 +209,10 @@
[{db :db} [_ response]] [{db :db} [_ response]]
(js/console.log (str "Updating locality data: " (count response) " addresses " )) (js/console.log (str "Updating locality data: " (count response) " addresses " ))
(refresh-map-pins) (refresh-map-pins)
{:dispatch-later [{:ms 60000 :dispatch [:fetch-locality]} {
{:ms 1000 :dispatch [:get-current-location]}] ;; :dispatch-later [{:ms 60000 :dispatch [:fetch-locality]}
;; ;; {:ms 1000 :dispatch [:get-current-location]}
;; ]
:db (assoc :db (assoc
(remove-from-feedback db :fetch-locality) (remove-from-feedback db :fetch-locality)
:addresses (js->clj response))})) :addresses (js->clj response))}))
@ -380,15 +382,28 @@
:page :building)))))) :page :building))))))
(reg-event-db
:update-elector
(fn [db [_ args]]
(if (:signature (:elector db))
(do
(js/console.log "Updating elector signature")
(add-to-feedback
(add-to-outqueue
db
{:elector (:elector db)
:action :update-elector-signature})
:send-request))
(assoc db :error "Please supply a telephone number to call"))))
(reg-event-db (reg-event-db
:set-consent-and-page :set-consent-and-page
(fn [db [_ args]] (fn [db [_ args]]
(let [page (:page args) (let [page (:page args)
consent (:consent args) elector (:elector args)]
elector-id (coerce-to-number (:elector-id args)) (dispatch [:update-elector {:elector elector}])
elector (get-elector elector-id db)] (assoc (clear-messages db) :elector elector :page page))))
(js/console.log (str "Setting page to " page ", consent to " consent " for " (:name elector)))
(assoc (clear-messages db) :elector (assoc elector :consent true) :page page))))
(reg-event-db (reg-event-db

View file

@ -28,6 +28,11 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn log-and-dispatch [arg]
(js/console.log (str "Dispatching " arg))
(rf/dispatch arg))
(defn back-link (defn back-link
"Generate a back link to the preceding page, or, if `target` is specified, "Generate a back link to the preceding page, or, if `target` is specified,
to a particular page." to a particular page."
@ -40,8 +45,9 @@
(defn big-link (defn big-link
[text & {:keys [target handler]}] [text & {:keys [target handler]}]
(js/console.log (str "Big link with target '" target "'; handler '" handler "'"))
[:div.big-link-container {:key (gensym "big-link")} [:div.big-link-container {:key (gensym "big-link")}
[:a.big-link (merge [:a.big-link (merge {:href target :on-click handler}
(if target {:href target}{}) (if target {:href target}{})
(if handler {:on-click handler}{})) (if handler {:on-click handler}{}))
text]]) text]])

View file

@ -41,7 +41,7 @@
[:div [:div
[:h1 (str "Flats at " (:address address))] [:h1 (str "Flats at " (:address address))]
[:div.container {:id "main-container"} [:div.container {:id "main-container"}
(ui/back-link) (ui/back-link "#map")
[:div {:id "dwelling-list"} [:div {:id "dwelling-list"}
(map (map
(fn (fn

View file

@ -80,11 +80,16 @@
(defn panel (defn panel
"Generate the electors panel." "Generate the electors panel."
[] []
(js/console.log "dwelling.panel")
(let [dwelling @(subscribe [:dwelling]) (let [dwelling @(subscribe [:dwelling])
address @(subscribe [:address]) address @(subscribe [:address])
sub-address (:sub-address dwelling) sub-address (:sub-address dwelling)
electors (sort-by :id (:electors dwelling)) electors (sort-by :id (:electors dwelling))
options @(subscribe [:options])] options @(subscribe [:options])
back (if
(> (count (:dwellings address)) 1)
"#building"
"#map")]
(if address (if address
[:div [:div
[:h1 (if sub-address [:h1 (if sub-address
@ -95,7 +100,7 @@
[:tbody [:tbody
(genders-row electors) (genders-row electors)
(names-row electors)]] (names-row electors)]]
(ui/back-link)]] (ui/back-link back)]]
(ui/error-panel "No address selected")))) (ui/error-panel "No address selected"))))

View file

@ -30,6 +30,11 @@
;; OK, the idea here is a GDPR consent form to be signed by the elector ;; OK, the idea here is a GDPR consent form to be signed by the elector
(def sig-pad
;; something the signature pad will be bound to
(atom nil))
(defn gdpr-render (defn gdpr-render
[] []
(let [elector @(subscribe [:elector])] (let [elector @(subscribe [:elector])]
@ -51,21 +56,32 @@
[:canvas {:id "signature-pad"}]]]]]] [:canvas {:id "signature-pad"}]]]]]]
(ui/back-link "#dwelling") (ui/back-link "#dwelling")
(ui/big-link "I consent" (ui/big-link "I consent"
:target (str "#elector/" (:id elector) "/true") ;; :target (str "#elector/" (:id elector) "/true/")
:handler #(fn [] (dispatch [:set-consent-and-page {:elector-id (:id elector) :page :elector}]))) :handler #(fn
;; TODO: need to save the signature []
(ui/log-and-dispatch
[:set-consent-and-page
{:elector-id (:id elector)
:page :elector
:elector (merge
elector
:signature
(.toDataURL
sig-pad
"image/svg+xml")
)}])))
(ui/big-link "I DO NOT consent" (ui/big-link "I DO NOT consent"
:target (str "#elector/" (:id elector) "/true"))])) :target (str "#elector/" (:id elector) "/false"))]))
;; :handler #(fn [] (dispatch [:set-elector-and-page {:elector-id (:id elector) :page :elector}])))]))
(defn gdpr-did-mount (defn gdpr-did-mount
[] []
(js/SignaturePad. (.getElementById js/document "signature-pad"))) (reset! sig-pad (js/SignaturePad. (.getElementById js/document "signature-pad"))))
(defn panel (defn panel
"A reagent class for the GDPR consent form" "A reagent class for the GDPR consent form"
[] []
(js/console.log "gdpr.panel")
(reagent/create-class {:reagent-render gdpr-render (reagent/create-class {:reagent-render gdpr-render
:component-did-mount gdpr-did-mount})) :component-did-mount gdpr-did-mount}))