Adding more filters, for fun.

This commit is contained in:
BC
2019-01-27 09:52:06 -08:00
parent 35710bbcbf
commit 152cad487e
5 changed files with 68 additions and 9 deletions

View File

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

View File

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

View File

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

View 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}]]]])

View File

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