Adding more filters, for fun.
This commit is contained in:
@@ -58,7 +58,7 @@
|
|||||||
(defn raw-graphql-ids [db args]
|
(defn raw-graphql-ids [db args]
|
||||||
(let [query (cond-> {:query {:find ['?e]
|
(let [query (cond-> {:query {:find ['?e]
|
||||||
:in ['$ ]
|
:in ['$ ]
|
||||||
:where ['[?e :transaction/id]]}
|
:where []}
|
||||||
:args [db]}
|
:args [db]}
|
||||||
|
|
||||||
(:sort-by args) (add-sorter-field {"client" ['[?e :transaction/client ?c]
|
(:sort-by args) (add-sorter-field {"client" ['[?e :transaction/client ?c]
|
||||||
@@ -73,16 +73,25 @@
|
|||||||
(merge-query {:query {:in ['[?xx ...]]
|
(merge-query {:query {:in ['[?xx ...]]
|
||||||
:where ['[?e :transaction/client ?xx]]}
|
:where ['[?e :transaction/client ?xx]]}
|
||||||
:args [(set (map :db/id (limited-clients (:id args))))]})
|
: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)
|
(:client-id args)
|
||||||
(merge-query {:query {:in ['?client-id]
|
(merge-query {:query {:in ['?client-id]
|
||||||
:where ['[?e :transaction/client ?client-id]]}
|
:where ['[?e :transaction/client ?client-id]]}
|
||||||
:args [(:client-id args)]})
|
:args [(:client-id args)]})
|
||||||
|
|
||||||
|
|
||||||
(:original-id args)
|
(:original-id args)
|
||||||
(merge-query {:query {:in ['?original-id]
|
(merge-query {:query {:in ['?original-id]
|
||||||
:where ['[?e :transaction/client ?c]
|
:where ['[?e :transaction/client ?c]
|
||||||
'[?c :client/original-id ?original-id]]}
|
'[?c :client/original-id ?original-id]]}
|
||||||
:args [(:original-id args)]}))]
|
:args [(:original-id args)]})
|
||||||
|
|
||||||
|
true
|
||||||
|
(merge-query {:query {:where ['[?e :transaction/id]]}}))]
|
||||||
(cond->> query
|
(cond->> query
|
||||||
true (d/query)
|
true (d/query)
|
||||||
(:sort-by args) (apply-sort args second)
|
(:sort-by args) (apply-sort args second)
|
||||||
|
|||||||
@@ -225,6 +225,7 @@
|
|||||||
|
|
||||||
:transaction_page {:type '(list :transaction_page)
|
:transaction_page {:type '(list :transaction_page)
|
||||||
:args {:client_id {:type :id}
|
:args {:client_id {:type :id}
|
||||||
|
:bank_account_id {:type :id}
|
||||||
:start {:type 'Int}
|
:start {:type 'Int}
|
||||||
:sort_by {:type 'String}
|
:sort_by {:type 'String}
|
||||||
:asc {:type 'Boolean}}
|
:asc {:type 'Boolean}}
|
||||||
|
|||||||
@@ -15,6 +15,19 @@
|
|||||||
(when (:user db)
|
(when (:user db)
|
||||||
(vals (:clients 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
|
(re-frame/reg-sub
|
||||||
::clients-by-id
|
::clients-by-id
|
||||||
(fn [db]
|
(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.modal :refer [action-modal]]
|
||||||
[auto-ap.views.components.paginator :refer [paginator]]
|
[auto-ap.views.components.paginator :refer [paginator]]
|
||||||
[auto-ap.views.components.layouts :refer [side-bar-layout]]
|
[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.events :as events]
|
||||||
[auto-ap.views.utils :refer [dispatch-event date->str bind-field]]
|
[auto-ap.views.utils :refer [dispatch-event date->str bind-field]]
|
||||||
[auto-ap.utils :refer [by]]
|
[auto-ap.utils :refer [by]]
|
||||||
@@ -61,20 +62,30 @@
|
|||||||
(fn [cofx [_ params]]
|
(fn [cofx [_ params]]
|
||||||
{:dispatch [::params-change @(re-frame/subscribe [::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]}]
|
(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 {}))
|
(let [opc (fn [p]
|
||||||
opc (fn [p]
|
(on-params-change (merge @params p )))]
|
||||||
(swap! state merge p)
|
|
||||||
(on-params-change p))]
|
|
||||||
(fn [{:keys [id transaction-page status on-params-change vendors checked]}]
|
(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
|
{:keys [transactions start end count total]} @transaction-page
|
||||||
selected-client @(re-frame/subscribe [::subs/client])
|
selected-client @(re-frame/subscribe [::subs/client])
|
||||||
percentage-size (if selected-client "25%" "33%")]
|
percentage-size (if selected-client "25%" "33%")]
|
||||||
[:div
|
[:div
|
||||||
[paginator {:start start :end end :count count :total total
|
[paginator {:start start :end end :count count :total total
|
||||||
:on-change (fn [p ]
|
:on-change (fn [p ]
|
||||||
(on-params-change (swap! state merge p)))}]
|
(on-params-change (merge @params p)))}]
|
||||||
"Showing " (inc start) "-" end "/" total
|
"Showing " (inc start) "-" end "/" total
|
||||||
|
|
||||||
[:table.table.is-fullwidth
|
[:table.table.is-fullwidth
|
||||||
@@ -237,6 +248,12 @@
|
|||||||
[manual-yodlee-import-modal]]))
|
[manual-yodlee-import-modal]]))
|
||||||
{:component-will-mount #(re-frame/dispatch-sync [::params-change {}]) }))
|
{:component-will-mount #(re-frame/dispatch-sync [::params-change {}]) }))
|
||||||
(defn transactions-page []
|
(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]}])
|
:main [transactions-content]}])
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user