83 lines
3.2 KiB
Clojure
83 lines
3.2 KiB
Clojure
(ns auto-ap.views.pages.admin.vendors
|
|
(:require-macros [cljs.core.async.macros :refer [go]])
|
|
(:require [re-frame.core :as re-frame]
|
|
[reagent.core :as reagent]
|
|
[clojure.string :as str]
|
|
[auto-ap.subs :as subs]
|
|
[auto-ap.events :as main-events]
|
|
[auto-ap.events.admin.vendors :as events]
|
|
[auto-ap.entities.vendors :as entity]
|
|
[auto-ap.views.components.address :refer [address-field]]
|
|
[auto-ap.views.components.modal :refer [modal]]
|
|
[auto-ap.views.components.admin.side-bar :refer [admin-side-bar]]
|
|
[auto-ap.views.components.layouts :refer [side-bar-layout]]
|
|
[clojure.spec.alpha :as s]
|
|
[auto-ap.views.utils :refer [login-url dispatch-value-change dispatch-event bind-field horizontal-field]]
|
|
|
|
[auto-ap.views.components.typeahead :refer [typeahead]]
|
|
[cljs.reader :as edn]
|
|
[auto-ap.routes :as routes]
|
|
[bidi.bidi :as bidi]))
|
|
|
|
(defn invalid-fields [spec v]
|
|
(set (mapcat :in (::s/problems (s/explain-data spec v)))))
|
|
|
|
(defn vendors-table []
|
|
(let [vendors (re-frame/subscribe [::subs/sorted-all-vendors])
|
|
editing-vendor (:editing @(re-frame/subscribe [::subs/admin]))]
|
|
|
|
[:table {:class "table", :style {:width "100%"}}
|
|
[:thead
|
|
[:tr
|
|
[:th "Name"]
|
|
[:th "Email"]
|
|
[:th "Invoice Reminders"]
|
|
[:th]]]
|
|
[:tbody (for [v @vendors]
|
|
^{:key (str (: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
|
|
(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
|
|
(when (not (s/valid? field (field subscription)))
|
|
" is-danger")))
|
|
keys (dissoc keys :field :subscription)]
|
|
(vec (concat [dom keys] rest))))
|
|
|
|
|
|
(defn admin-vendors-content []
|
|
[(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]
|
|
|
|
[:div.is-pulled-right
|
|
[:a.button.is-primary.is-large {:on-click (dispatch-event [::main-events/modal-status :auto-ap.views.main/user-editing-vendor {:visible? true}])} "New vendor"]]
|
|
|
|
])])
|
|
{:component-did-mount (fn []
|
|
(re-frame/dispatch [::events/mounted]))})])
|
|
|
|
(defn admin-vendors-page []
|
|
[side-bar-layout {:side-bar [admin-side-bar {}]
|
|
:main [admin-vendors-content]}])
|