can send emails on a whim

This commit is contained in:
Bryce Covert
2018-04-13 20:28:31 -07:00
parent c8e959bd40
commit 431c2883e2
9 changed files with 103 additions and 31 deletions

View File

@@ -42,6 +42,29 @@
:on-success [::save-complete]
:on-error [::save-error]}))))))
(re-frame/reg-event-fx
::remind
(fn [{:keys [db] :as fx} [_ id]]
{ :http {:method :post
:token (:user db)
:headers {"Content-Type" "application/edn"}
:uri (str "/api/vendors/" id "/remind")
:on-success [::reminder-sent]
:on-error [::failed "Failed to send reminder"]}
:db (assoc-in db [:admin :banner] nil)}))
(re-frame/reg-event-db
::reminder-sent
(fn [db [_ error]]
(-> db
(assoc-in [:admin :banner] "Reminder sent!"))))
(re-frame/reg-event-db
::failed
(fn [db [_ error]]
(-> db
(assoc-in [:admin :banner] error))))
(re-frame/reg-event-db
::save-complete
(fn [db [_ vendor]]

View File

@@ -18,14 +18,16 @@
[:tr
[:th "Vendor"]
[:th "Scheduled Date"]
[:th "Status"]]]
[:tbody (for [{:keys [id vendor-name scheduled sent]} reminders]
[:th "Status"]
[:th "Email"]]]
[:tbody (for [{:keys [id vendor-name scheduled sent email ]} reminders]
^{:key id}
[:tr
[:td vendor-name]
[:td (date->str scheduled)]
[:td (when sent
[:span [:span.icon [:i.fa.fa-check]] "Sent " (date-time->str sent)]) ]])]]))
[:span [:span.icon [:i.fa.fa-check]] "Sent " (date-time->str sent)]) ]
[:td email]])]]))
(defn admin-reminders-page []

View File

@@ -24,14 +24,22 @@
[:tr
[:th "Name"]
[:th "Email"]
[:th "Invoice Reminders"]]]
[:th "Invoice Reminders"]
[:th]]]
[:tbody (for [v @vendors]
^{:key (str (:id v))}
[:tr {:on-click (fn [] (re-frame/dispatch [::events/edit (:id v)]))
[:tr {:on-click (dispatch-event [::events/edit (:id v)])
:style {"cursor" "pointer"}}
[:td (:name v)]
[:td (:primary-email v)]
[:td (:invoice-reminder-schedule v)]])]]))
[:td (:invoice-reminder-schedule v)]
[:td
(when (:primary-email v)
[:button.button.is-primary.is-outlined
{:on-click (dispatch-event [::events/remind (:id v)])
:href "#"}
[:span.icon [:i.fa.fa-share-square]] [:span "Send Reminder"]])]])]]))
(defn danger-for [[dom {:keys [field subscription class] :as keys} & rest]]
(let [keys (assoc keys :class (str class
@@ -226,7 +234,7 @@
(when (:saving? editing-vendor) [:div.is-overlay {:style {"backgroundColor" "rgba(150,150,150, 0.5)"}}])]
[:footer.modal-card-foot
[:a.button.is-primary {:on-click (fn [] (re-frame/dispatch [::events/save]))
[:button.button.is-primary {:on-click (fn [] (re-frame/dispatch [::events/save]))
:disabled (when (not (s/valid? ::entity/vendor editing-vendor ))
"disabled")}
[:span "Save"]
@@ -238,17 +246,20 @@
[(with-meta
(fn []
[:div.inbox-messages
(when-let [banner (:banner @(re-frame/subscribe [::subs/admin]))]
[:div.notification banner])
(let [vendors (re-frame/subscribe [::subs/vendors])
editing-vendor (:vendor @(re-frame/subscribe [::subs/admin]))]
[:div
[:h1.title "Vendors"]
[vendors-table]
[:a.button.is-primary.is-large {:on-click (dispatch-event [::events/new])} "New vendor"]
[:div.is-pulled-right
[:a.button.is-primary.is-large {:on-click (dispatch-event [::events/new])} "New vendor"]]
(when editing-vendor
[edit-dialog]
)])])
[edit-dialog])])])
{:component-did-mount (fn []
(re-frame/dispatch [::events/mounted]))})])

View File

@@ -18,6 +18,7 @@
(defn dispatch-event [event]
(fn [e]
(.stopPropagation e)
(.preventDefault e)
(re-frame/dispatch event)))