Check/Expense accounts much cleaner
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
(ns auto-ap.views.components.invoice-table
|
||||
(:require [re-frame.core :as re-frame]
|
||||
[auto-ap.subs :as subs]
|
||||
[auto-ap.views.utils :refer [date->str dispatch-event]]
|
||||
[auto-ap.views.utils :refer [date->str dispatch-event delayed-dispatch]]
|
||||
[auto-ap.views.components.paginator :refer [paginator]]
|
||||
[auto-ap.views.components.sorter :refer [sorted-column]]
|
||||
[reagent.core :as reagent]
|
||||
@@ -14,6 +14,28 @@
|
||||
;; TODO performance
|
||||
;; TODO refactor graphql
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::toggle-checks
|
||||
(fn [{:keys [db] } [_ invoice-id]]
|
||||
{:db
|
||||
(update-in db [::visible-checks] (fn [i] (if (= i invoice-id) nil invoice-id) ))}))
|
||||
|
||||
(re-frame/reg-sub
|
||||
::visible-checks
|
||||
(fn [db]
|
||||
(::visible-checks db)))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::toggle-expense-accounts
|
||||
(fn [{:keys [db] } [_ invoice-id]]
|
||||
{:db
|
||||
(update-in db [::visible-expense-accounts] (fn [i] (if (= i invoice-id) nil invoice-id) ))}))
|
||||
|
||||
(re-frame/reg-sub
|
||||
::visible-expense-accounts
|
||||
(fn [db]
|
||||
(::visible-expense-accounts db)))
|
||||
|
||||
|
||||
|
||||
(defn query [params]
|
||||
@@ -35,12 +57,18 @@
|
||||
|
||||
(defn invoice-table [{:keys [id invoice-page status on-params-change vendors params check-boxes checked on-check-changed expense-event]}]
|
||||
(let [state (reagent/atom (or @params {}))
|
||||
visible-checks @(re-frame/subscribe [::visible-checks])
|
||||
visible-expense-accounts @(re-frame/subscribe [::visible-expense-accounts])
|
||||
opc (fn [p]
|
||||
(swap! state merge p)
|
||||
(on-params-change p))]
|
||||
(fn [{:keys [id invoice-page status on-params-change vendors checked]}]
|
||||
(let [{:keys [sort-by asc]} @state
|
||||
{:keys [invoices start end count total]} @invoice-page]
|
||||
{:keys [invoices start end count total]} @invoice-page
|
||||
visible-checks @(re-frame/subscribe [::visible-checks])
|
||||
|
||||
visible-expense-accounts @(re-frame/subscribe [::visible-expense-accounts])
|
||||
]
|
||||
[:div
|
||||
[paginator {:start start :end end :count count :total total
|
||||
:on-change (fn [p ]
|
||||
@@ -96,13 +124,12 @@
|
||||
:asc asc}
|
||||
"Outstanding"]
|
||||
|
||||
[sorted-column {:on-sort opc
|
||||
:style {:width "8em" :cursor "pointer"}
|
||||
:sort-key "total"
|
||||
:sort-by sort-by
|
||||
:asc asc}
|
||||
"Expense Accounts"]
|
||||
[:th {:style {:width "10em"}} "" ]]]
|
||||
[:th {
|
||||
:style {:width "15em" :cursor "pointer"}
|
||||
|
||||
|
||||
}
|
||||
""]]]
|
||||
[:tbody
|
||||
(if (:loading @status)
|
||||
[:tr
|
||||
@@ -126,13 +153,51 @@
|
||||
|
||||
[:td (gstring/format "$%.2f" total )]
|
||||
[:td (gstring/format "$%.2f" outstanding-balance )]
|
||||
[:td (for [e expense-accounts]
|
||||
^{:key (:id e)}
|
||||
[:a.tag {:on-click (dispatch-event (conj expense-event id))} (:name (:expense-account e)) " "(gstring/format "$%.2f" (:amount e) ) ])]
|
||||
[:td (for [check checks]
|
||||
(if (:s3-url (:check check))
|
||||
^{:key (:id check)}
|
||||
[:a.tag {:href (:s3-url (:check check)) :target "_new"} [:i.fa.fa-money-check] [:span.icon [:i.fa.fa-money]] (str " " (:check-number (:check check)) " (" (gstring/format "$%.2f" (:amount check) ) ")")]
|
||||
[:td.expandable
|
||||
(when (seq expense-accounts)
|
||||
|
||||
^{:key (:id check)}
|
||||
[:span.tag [:i.fa.fa-money-check] [:span.icon [:i.fa.fa-money]] (str " " (:check-number (:check check)) " (" (gstring/format "$%.2f" (:amount check) ) ")")]))]]))]]]))))
|
||||
[:div.dropdown.is-right {:class (if (= id visible-expense-accounts)
|
||||
"is-active"
|
||||
"")}
|
||||
[:div.dropdown-trigger
|
||||
[:a.button.badge {:data-badge (str (clojure.core/count expense-accounts))
|
||||
:aria-haspopup true
|
||||
:tab-index "0"
|
||||
|
||||
:on-blur (delayed-dispatch [::toggle-expense-accounts id])
|
||||
:on-focus (dispatch-event [::toggle-expense-accounts id])
|
||||
} "Accounts"]]
|
||||
[:div.dropdown-menu {:role "menu"}
|
||||
[:div.dropdown-content
|
||||
(for [e expense-accounts]
|
||||
^{:key (:id e)}
|
||||
[:span.dropdown-item (:name (:expense-account e)) " "(gstring/format "$%.2f" (:amount e) ) ])
|
||||
|
||||
[:hr.dropdown-divider]
|
||||
|
||||
[:a.dropdown-item.is-primary {:on-click (dispatch-event (conj expense-event id))} "Change"]]]])
|
||||
[:span {:style {:margin-left "1em"}}]
|
||||
(when (seq checks)
|
||||
|
||||
[:div.dropdown.is-right {:class (if (= id visible-checks)
|
||||
"is-active"
|
||||
"")}
|
||||
[:div.dropdown-trigger
|
||||
[:a.button.badge {:data-badge (str (clojure.core/count checks))
|
||||
:aria-haspopup true
|
||||
:tab-index "0"
|
||||
|
||||
:on-blur (delayed-dispatch [::toggle-checks id])
|
||||
:on-focus (dispatch-event [::toggle-checks id])
|
||||
} "Checks"]]
|
||||
[:div.dropdown-menu {:role "menu"}
|
||||
[:div.dropdown-content
|
||||
(for [check checks]
|
||||
(if (:s3-url (:check check))
|
||||
^{:key (:id check)}
|
||||
[:a.dropdown-item {:href (:s3-url (:check check)) :target "_new"} [:i.fa.fa-money-check] [:span.icon [:i.fa.fa-money]] (str " " (:check-number (:check check)) " (" (gstring/format "$%.2f" (:amount check) ) ")")]
|
||||
|
||||
^{:key (:id check)}
|
||||
[:span.dropdown-item [:i.fa.fa-money-check] [:span.icon [:i.fa.fa-money]] (str " " (:check-number (:check check)) " (" (gstring/format "$%.2f" (:amount check) ) ")")]))]]])
|
||||
|
||||
]]))]]]))))
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
(do
|
||||
(select [nil "" nil])
|
||||
true)
|
||||
true))}
|
||||
false))}
|
||||
[:div.control
|
||||
[:div.tags.has-addons
|
||||
[:span.tag @text]
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
(re-frame/reg-event-fx
|
||||
::change-expense-accounts
|
||||
(fn [{:keys [db]} [_ id]]
|
||||
(println "HELLLO")
|
||||
{:dispatch [::events/modal-status ::change-expense-accounts {:visible? true}]
|
||||
:db (assoc-in db [::change-expense-accounts :invoice] (get (by :id (get-in db [::invoice-page :invoices])) id))}))
|
||||
|
||||
|
||||
@@ -20,6 +20,11 @@
|
||||
(.preventDefault e)
|
||||
(re-frame/dispatch (conj event (.. e -target -value)))))
|
||||
|
||||
(defn delayed-dispatch [e]
|
||||
(fn [x]
|
||||
(js/setTimeout #(re-frame/dispatch e) 150)
|
||||
false))
|
||||
|
||||
(defn dispatch-event [event]
|
||||
(fn [e]
|
||||
(when (.-stopPropagation e)
|
||||
|
||||
Reference in New Issue
Block a user