Adding more filters, for fun.
This commit is contained in:
@@ -58,7 +58,7 @@
|
||||
(defn raw-graphql-ids [db args]
|
||||
(let [query (cond-> {:query {:find ['?e]
|
||||
:in ['$ ]
|
||||
:where ['[?e :transaction/id]]}
|
||||
:where []}
|
||||
:args [db]}
|
||||
|
||||
(:sort-by args) (add-sorter-field {"client" ['[?e :transaction/client ?c]
|
||||
@@ -73,16 +73,25 @@
|
||||
(merge-query {:query {:in ['[?xx ...]]
|
||||
:where ['[?e :transaction/client ?xx]]}
|
||||
:args [(set (map :db/id (limited-clients (:id args))))]})
|
||||
(:bank-account-id args)
|
||||
(merge-query {:query {:in ['?bank-account-id]
|
||||
:where ['[?e :transaction/bank-account ?bank-account-id]]}
|
||||
:args [(:bank-account-id args)]})
|
||||
|
||||
(:client-id args)
|
||||
(merge-query {:query {:in ['?client-id]
|
||||
:where ['[?e :transaction/client ?client-id]]}
|
||||
:args [(:client-id args)]})
|
||||
|
||||
|
||||
(:original-id args)
|
||||
(merge-query {:query {:in ['?original-id]
|
||||
:where ['[?e :transaction/client ?c]
|
||||
'[?c :client/original-id ?original-id]]}
|
||||
:args [(:original-id args)]}))]
|
||||
:args [(:original-id args)]})
|
||||
|
||||
true
|
||||
(merge-query {:query {:where ['[?e :transaction/id]]}}))]
|
||||
(cond->> query
|
||||
true (d/query)
|
||||
(:sort-by args) (apply-sort args second)
|
||||
|
||||
@@ -225,6 +225,7 @@
|
||||
|
||||
:transaction_page {:type '(list :transaction_page)
|
||||
:args {:client_id {:type :id}
|
||||
:bank_account_id {:type :id}
|
||||
:start {:type 'Int}
|
||||
:sort_by {:type 'String}
|
||||
:asc {:type 'Boolean}}
|
||||
|
||||
@@ -15,6 +15,19 @@
|
||||
(when (:user db)
|
||||
(vals (:clients db)))))
|
||||
|
||||
(re-frame/reg-sub
|
||||
::bank-accounts
|
||||
:<- [::clients]
|
||||
:<- [::client]
|
||||
(fn [[clients client]]
|
||||
(println client)
|
||||
(if client
|
||||
(:bank-accounts client)
|
||||
(reduce (fn [result {:keys [bank-accounts]}]
|
||||
(into result bank-accounts))
|
||||
[]
|
||||
clients))))
|
||||
|
||||
(re-frame/reg-sub
|
||||
::clients-by-id
|
||||
(fn [db]
|
||||
|
||||
19
src/cljs/auto_ap/views/components/bank_account_filter.cljs
Normal file
19
src/cljs/auto_ap/views/components/bank_account_filter.cljs
Normal file
@@ -0,0 +1,19 @@
|
||||
(ns auto-ap.views.components.bank-account-filter
|
||||
(:require
|
||||
[clojure.spec.alpha :as s]
|
||||
[auto-ap.entities.invoice :as invoice]
|
||||
[auto-ap.views.components.typeahead :refer [typeahead]]
|
||||
[auto-ap.views.utils :refer [bind-field]]))
|
||||
|
||||
(defn bank-account-filter [{:keys [value on-change-event bank-accounts]}]
|
||||
[:div.field
|
||||
[:div.control
|
||||
[bind-field
|
||||
[typeahead {:matches (map (fn [x] [(:id x) (:name x)]) bank-accounts)
|
||||
:type "typeahead"
|
||||
:auto-focus true
|
||||
:field [:id]
|
||||
:text-field [:name]
|
||||
:event on-change-event
|
||||
:spec (s/nilable ::invoice/vendor-id)
|
||||
:subscription value}]]]])
|
||||
@@ -8,6 +8,7 @@
|
||||
[auto-ap.views.components.modal :refer [action-modal]]
|
||||
[auto-ap.views.components.paginator :refer [paginator]]
|
||||
[auto-ap.views.components.layouts :refer [side-bar-layout]]
|
||||
[auto-ap.views.components.bank-account-filter :refer [bank-account-filter]]
|
||||
[auto-ap.events :as events]
|
||||
[auto-ap.views.utils :refer [dispatch-event date->str bind-field]]
|
||||
[auto-ap.utils :refer [by]]
|
||||
@@ -61,20 +62,30 @@
|
||||
(fn [cofx [_ params]]
|
||||
{:dispatch [::params-change @(re-frame/subscribe [::params])]}))
|
||||
|
||||
(re-frame/reg-event-db
|
||||
::change-selected-bank-account
|
||||
(fn [db [_ key value]]
|
||||
(let [[key] key
|
||||
updated (assoc-in db [::transaction-page :bank-account-filter key] value)]
|
||||
(if (and (= key :id)
|
||||
(not= value (get-in db [::params :bank-account-id])))
|
||||
(do
|
||||
(re-frame/dispatch [::params-change (assoc (::params updated) :bank-account-id value)])
|
||||
(assoc-in updated [::params :bank-account-id] value))
|
||||
updated))))
|
||||
|
||||
(defn transaction-table [{:keys [id transaction-page status on-params-change vendors params check-boxes checked on-check-changed expense-event]}]
|
||||
(let [state (reagent/atom (or @params {}))
|
||||
opc (fn [p]
|
||||
(swap! state merge p)
|
||||
(on-params-change p))]
|
||||
(let [opc (fn [p]
|
||||
(on-params-change (merge @params p )))]
|
||||
(fn [{:keys [id transaction-page status on-params-change vendors checked]}]
|
||||
(let [{:keys [sort-by asc]} @state
|
||||
(let [{:keys [sort-by asc]} @params
|
||||
{:keys [transactions start end count total]} @transaction-page
|
||||
selected-client @(re-frame/subscribe [::subs/client])
|
||||
percentage-size (if selected-client "25%" "33%")]
|
||||
[:div
|
||||
[paginator {:start start :end end :count count :total total
|
||||
:on-change (fn [p ]
|
||||
(on-params-change (swap! state merge p)))}]
|
||||
(on-params-change (merge @params p)))}]
|
||||
"Showing " (inc start) "-" end "/" total
|
||||
|
||||
[:table.table.is-fullwidth
|
||||
@@ -237,6 +248,12 @@
|
||||
[manual-yodlee-import-modal]]))
|
||||
{:component-will-mount #(re-frame/dispatch-sync [::params-change {}]) }))
|
||||
(defn transactions-page []
|
||||
[side-bar-layout {:side-bar [:div]
|
||||
[side-bar-layout {:side-bar [:div
|
||||
[:p.menu-label "Bank Account"]
|
||||
|
||||
[:div
|
||||
[bank-account-filter {:on-change-event [::change-selected-bank-account]
|
||||
:value (:bank-acount-filter @(re-frame/subscribe [::transaction-page]))
|
||||
:bank-accounts @(re-frame/subscribe [::subs/bank-accounts])}]]]
|
||||
:main [transactions-content]}])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user