Check/Expense accounts much cleaner

This commit is contained in:
BC
2018-07-06 15:32:57 -07:00
parent a58f1f2c60
commit f232ca264c
7 changed files with 95 additions and 20 deletions

View File

@@ -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) ) ")")]))]]])
]]))]]]))))

View File

@@ -31,7 +31,7 @@
(do
(select [nil "" nil])
true)
true))}
false))}
[:div.control
[:div.tags.has-addons
[:span.tag @text]

View File

@@ -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))}))

View File

@@ -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)