pagination and sorting for reminders.
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
(ns auto-ap.views.pages.admin.reminders
|
||||
(:require-macros [cljs.core.async.macros :refer [go]])
|
||||
(:require [re-frame.core :as re-frame]
|
||||
[auto-ap.views.components.paginator :refer [paginator]]
|
||||
[auto-ap.views.components.sorter :refer [sorted-column]]
|
||||
[reagent.core :as reagent]
|
||||
[auto-ap.subs :as subs]
|
||||
[auto-ap.events.admin.reminders :as events]
|
||||
@@ -10,24 +12,78 @@
|
||||
[auto-ap.routes :as routes]
|
||||
[bidi.bidi :as bidi]))
|
||||
|
||||
(re-frame/reg-sub
|
||||
::reminder-page
|
||||
(fn [db]
|
||||
(::reminder-page db)))
|
||||
|
||||
(re-frame/reg-sub
|
||||
::reminder-params
|
||||
(fn [db]
|
||||
(::reminder-params db)))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::mounted
|
||||
(fn [{:keys [db]} _]
|
||||
{:db (assoc db ::reminder-params {:start 0})
|
||||
:dispatch [::invalidated]}))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::params-changed
|
||||
(fn [{:keys [db]} [_ params]]
|
||||
{:db (update db ::reminder-params merge params)
|
||||
:dispatch [::invalidated]}))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::invalidated
|
||||
(fn [{:keys [db]}]
|
||||
{:graphql {:token (:user db)
|
||||
:query-obj {:venia/queries [[:reminder_page
|
||||
(::reminder-params db)
|
||||
|
||||
[[:reminders [:id :email :sent :scheduled :subject :body [:vendor [:name :id]] ]]
|
||||
:total
|
||||
:start
|
||||
:end]]]}
|
||||
|
||||
:on-success [::received]}}))
|
||||
|
||||
|
||||
(re-frame/reg-event-db
|
||||
::received
|
||||
(fn [db [_ reminders]]
|
||||
(assoc db ::reminder-page (first (:reminder-page reminders)))))
|
||||
|
||||
(defn reminders-table []
|
||||
(let [reminders (or @(re-frame/subscribe [::subs/reminders]) [])]
|
||||
[:table {:class "table", :style {:width "100%"}}
|
||||
[:thead
|
||||
[:tr
|
||||
[:th "Vendor"]
|
||||
[:th "Scheduled Date"]
|
||||
[:th "Status"]
|
||||
[:th "Email"]]]
|
||||
[:tbody (for [{:keys [id vendor scheduled sent email ]} reminders]
|
||||
^{:key id}
|
||||
[:tr
|
||||
[:td (:name vendor)]
|
||||
[:td (date->str scheduled)]
|
||||
[:td (when sent
|
||||
[:span [:span.icon [:i.fa.fa-check]] "Sent " (date-time->str sent)]) ]
|
||||
[:td email]])]]))
|
||||
(let [{:keys [reminders start end total count]} @(re-frame/subscribe [::reminder-page])
|
||||
{:keys [sort-by asc]} @(re-frame/subscribe [::reminder-params])
|
||||
reminders (or reminders [])]
|
||||
[:div
|
||||
[:div.is-pulled-right
|
||||
[paginator {:start start :end end :total total :count count :on-change (fn [params]
|
||||
(re-frame/dispatch [::params-changed params]))}]]
|
||||
[:table {:class "table", :style {:width "100%"}}
|
||||
[:thead
|
||||
[:tr
|
||||
(for [[sort-key name] [["vendor" "Vendor"]
|
||||
["scheduled" "Scheduled Date"]
|
||||
["sent" "Status"]
|
||||
["email" "Email"]]]
|
||||
^{:key name}
|
||||
[sorted-column {:on-sort (fn [params] (re-frame/dispatch [::params-changed params]))
|
||||
:style {:width "20%" :cursor "pointer"}
|
||||
:sort-key sort-key
|
||||
:sort-by sort-by
|
||||
:asc asc}
|
||||
name])]]
|
||||
[:tbody (for [{:keys [id vendor scheduled sent email ]} reminders]
|
||||
^{:key id}
|
||||
[:tr
|
||||
[:td (:name vendor)]
|
||||
[:td (date->str scheduled)]
|
||||
[:td (when sent
|
||||
[:span [:span.icon [:i.fa.fa-check]] "Sent " (date-time->str sent)]) ]
|
||||
[:td email]])]]]))
|
||||
|
||||
|
||||
(defn admin-reminders-page []
|
||||
@@ -37,4 +93,4 @@
|
||||
[:h1.title "Reminders"]
|
||||
[reminders-table]])
|
||||
{:component-did-mount (fn []
|
||||
(re-frame/dispatch [::events/mounted]))})])
|
||||
(re-frame/dispatch [::mounted]))})])
|
||||
|
||||
Reference in New Issue
Block a user