diff --git a/resources/templates/base.html b/resources/templates/base.html index c14f6de..3f9928e 100644 --- a/resources/templates/base.html +++ b/resources/templates/base.html @@ -5,6 +5,7 @@ + {% style "/css/yyy-common.css" %} {% style "/css/yyy-site.css" %} {% style "/css/spinner.css" %} diff --git a/src/cljs/youyesyet/canvasser_app/core.cljs b/src/cljs/youyesyet/canvasser_app/core.cljs index 81b4e36..89493ac 100644 --- a/src/cljs/youyesyet/canvasser_app/core.cljs +++ b/src/cljs/youyesyet/canvasser_app/core.cljs @@ -118,61 +118,57 @@ ;; Routes (secretary/set-config! :prefix "#") -(defn log-and-dispatch [arg] - (js/console.log (str "Dispatching " arg)) - (rf/dispatch arg)) - (secretary/defroute "/" [] - (log-and-dispatch [:set-active-page :map])) + (ui/log-and-dispatch [:set-active-page :map])) (secretary/defroute "/about" [] - (log-and-dispatch [:set-active-page :about])) + (ui/log-and-dispatch [:set-active-page :about])) (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} - (log-and-dispatch [:set-dwelling dwelling-id]) - (log-and-dispatch [:set-active-page :dwelling])) + (ui/log-and-dispatch [:set-dwelling dwelling-id]) + (ui/log-and-dispatch [:set-active-page :dwelling])) (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" [] - (log-and-dispatch [:set-active-page :elector])) + (ui/log-and-dispatch [:set-active-page :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} - (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" [] - (log-and-dispatch [:set-active-page :elector])) + (ui/log-and-dispatch [:set-active-page :elector])) (secretary/defroute "/followup" [] - (log-and-dispatch [:set-active-page :followup])) + (ui/log-and-dispatch [:set-active-page :followup])) (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} - (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" [] - (log-and-dispatch [:set-active-page :issues])) + (ui/log-and-dispatch [:set-active-page :issues])) (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} - (log-and-dispatch [:set-and-go-to-issue issue])) + (ui/log-and-dispatch [:set-and-go-to-issue issue])) (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} - (log-and-dispatch [:set-intention {:elector-id elector-id :intention intention}])) + (ui/log-and-dispatch [:set-intention {:elector-id elector-id :intention intention}])) ;; ------------------------- ;; History diff --git a/src/cljs/youyesyet/canvasser_app/handlers.cljs b/src/cljs/youyesyet/canvasser_app/handlers.cljs index 833305f..3ab4419 100644 --- a/src/cljs/youyesyet/canvasser_app/handlers.cljs +++ b/src/cljs/youyesyet/canvasser_app/handlers.cljs @@ -209,8 +209,10 @@ [{db :db} [_ response]] (js/console.log (str "Updating locality data: " (count response) " addresses " )) (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 (remove-from-feedback db :fetch-locality) :addresses (js->clj response))})) @@ -380,15 +382,28 @@ :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 :set-consent-and-page (fn [db [_ args]] (let [page (:page args) - consent (:consent args) - elector-id (coerce-to-number (:elector-id args)) - elector (get-elector elector-id db)] - (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)))) + elector (:elector args)] + (dispatch [:update-elector {:elector elector}]) + (assoc (clear-messages db) :elector elector :page page)))) (reg-event-db diff --git a/src/cljs/youyesyet/canvasser_app/ui_utils.cljs b/src/cljs/youyesyet/canvasser_app/ui_utils.cljs index 12ab66f..cd37ead 100644 --- a/src/cljs/youyesyet/canvasser_app/ui_utils.cljs +++ b/src/cljs/youyesyet/canvasser_app/ui_utils.cljs @@ -28,6 +28,11 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(defn log-and-dispatch [arg] + (js/console.log (str "Dispatching " arg)) + (rf/dispatch arg)) + + (defn back-link "Generate a back link to the preceding page, or, if `target` is specified, to a particular page." @@ -40,8 +45,9 @@ (defn big-link [text & {:keys [target handler]}] + (js/console.log (str "Big link with target '" target "'; handler '" handler "'")) [: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 handler {:on-click handler}{})) text]]) diff --git a/src/cljs/youyesyet/canvasser_app/views/building.cljs b/src/cljs/youyesyet/canvasser_app/views/building.cljs index d2cac79..3cc7446 100644 --- a/src/cljs/youyesyet/canvasser_app/views/building.cljs +++ b/src/cljs/youyesyet/canvasser_app/views/building.cljs @@ -41,7 +41,7 @@ [:div [:h1 (str "Flats at " (:address address))] [:div.container {:id "main-container"} - (ui/back-link) + (ui/back-link "#map") [:div {:id "dwelling-list"} (map (fn diff --git a/src/cljs/youyesyet/canvasser_app/views/dwelling.cljs b/src/cljs/youyesyet/canvasser_app/views/dwelling.cljs index 73f28b3..88d5bee 100644 --- a/src/cljs/youyesyet/canvasser_app/views/dwelling.cljs +++ b/src/cljs/youyesyet/canvasser_app/views/dwelling.cljs @@ -80,11 +80,16 @@ (defn panel "Generate the electors panel." [] + (js/console.log "dwelling.panel") (let [dwelling @(subscribe [:dwelling]) address @(subscribe [:address]) sub-address (:sub-address dwelling) electors (sort-by :id (:electors dwelling)) - options @(subscribe [:options])] + options @(subscribe [:options]) + back (if + (> (count (:dwellings address)) 1) + "#building" + "#map")] (if address [:div [:h1 (if sub-address @@ -95,7 +100,7 @@ [:tbody (genders-row electors) (names-row electors)]] - (ui/back-link)]] + (ui/back-link back)]] (ui/error-panel "No address selected")))) diff --git a/src/cljs/youyesyet/canvasser_app/views/gdpr.cljs b/src/cljs/youyesyet/canvasser_app/views/gdpr.cljs index 65e1e5a..9da0ad3 100644 --- a/src/cljs/youyesyet/canvasser_app/views/gdpr.cljs +++ b/src/cljs/youyesyet/canvasser_app/views/gdpr.cljs @@ -30,6 +30,11 @@ ;; 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 [] (let [elector @(subscribe [:elector])] @@ -51,21 +56,32 @@ [:canvas {:id "signature-pad"}]]]]]] (ui/back-link "#dwelling") (ui/big-link "I consent" - :target (str "#elector/" (:id elector) "/true") - :handler #(fn [] (dispatch [:set-consent-and-page {:elector-id (:id elector) :page :elector}]))) - ;; TODO: need to save the signature + ;; :target (str "#elector/" (:id elector) "/true/") + :handler #(fn + [] + (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" - :target (str "#elector/" (:id elector) "/true"))])) - ;; :handler #(fn [] (dispatch [:set-elector-and-page {:elector-id (:id elector) :page :elector}])))])) + :target (str "#elector/" (:id elector) "/false"))])) (defn gdpr-did-mount [] - (js/SignaturePad. (.getElementById js/document "signature-pad"))) + (reset! sig-pad (js/SignaturePad. (.getElementById js/document "signature-pad")))) (defn panel "A reagent class for the GDPR consent form" [] + (js/console.log "gdpr.panel") (reagent/create-class {:reagent-render gdpr-render :component-did-mount gdpr-did-mount}))