diff --git a/src/cljs/auto_ap/views/components/vendor_filter.cljs b/src/cljs/auto_ap/views/components/vendor_filter.cljs new file mode 100644 index 00000000..c3ef3253 --- /dev/null +++ b/src/cljs/auto_ap/views/components/vendor_filter.cljs @@ -0,0 +1,19 @@ +(ns auto-ap.views.components.vendor-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 vendor-filter [{:keys [value on-change-event vendors]}] + [:div.field + [:div.control + [bind-field + [typeahead {:matches (map (fn [x] [(:id x) (:name x)]) vendors) + :type "typeahead" + :auto-focus true + :field [:vendor-id] + :text-field [:vendor-name] + :event on-change-event + :spec (s/nilable ::invoice/vendor-id) + :subscription value}]]]]) diff --git a/src/cljs/auto_ap/views/pages/checks.cljs b/src/cljs/auto_ap/views/pages/checks.cljs index dd178f53..6fcdde0e 100644 --- a/src/cljs/auto_ap/views/pages/checks.cljs +++ b/src/cljs/auto_ap/views/pages/checks.cljs @@ -7,6 +7,7 @@ [goog.string :as gstring] [clojure.spec.alpha :as s] [auto-ap.views.components.sorter :refer [sorted-column]] + [auto-ap.views.components.vendor-filter :refer [vendor-filter]] [auto-ap.views.components.layouts :refer [side-bar-layout]] [auto-ap.views.components.typeahead :refer [typeahead]] [auto-ap.views.components.paginator :refer [paginator]] @@ -95,20 +96,20 @@ updated)))) (defn check-table [{:keys [id payment-page status on-params-change vendors params check-boxes checked on-check-changed expense-event]}] - (let [state (reagent/atom (or @params {})) + (let [#_#_state (reagent/atom (or @params {})) selected-client @(re-frame/subscribe [::subs/client]) opc (fn [p] - (swap! state merge p) - (on-params-change p))] + + (on-params-change (merge @params p)))] (fn [{:keys [id payment-page status on-params-change vendors checked]}] - (let [{:keys [sort-by asc]} @state + (let [{:keys [sort-by asc]} @params {:keys [payments start end count total]} @payment-page selected-client @(re-frame/subscribe [::subs/client]) percentage-size (if selected-client "50%" "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 @@ -203,23 +204,13 @@ (re-frame/dispatch [::params-change params]))}]])) {:component-will-mount #(re-frame/dispatch-sync [::params-change {}]) })) -(defn vendor-filter [] - (let [{:keys [vendor-filter]} @(re-frame/subscribe [::payment-page])] - [:div.field - [:div.control - [bind-field - [typeahead {:matches (map (fn [x] [(:id x) (:name x)]) @(re-frame/subscribe [::subs/vendors])) - :type "typeahead" - :auto-focus true - :field [:vendor-id] - :text-field [:vendor-name] - :event [::change-selected-vendor] - :spec (s/nilable ::invoice/vendor-id) - :subscription vendor-filter}]]]])) + (defn checks-page [] [side-bar-layout {:side-bar [:div [:p.menu-label "Vendor"] - [:div [vendor-filter]]] + [:div [vendor-filter {:on-change-event [::change-selected-vendor] + :value (:vendor-filter @(re-frame/subscribe [::payment-page])) + :vendors @(re-frame/subscribe [::subs/vendors])}]]] :main [checks-content]}]) diff --git a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs index 55a15c63..ec502e5c 100644 --- a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs +++ b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs @@ -13,6 +13,7 @@ [auto-ap.routes :as routes] [auto-ap.views.components.expense-accounts-dialog :as expense-accounts-dialog] [auto-ap.views.components.vendor-dialog :refer [vendor-dialog]] + [auto-ap.views.components.vendor-filter :refer [vendor-filter]] [auto-ap.views.components.invoices.side-bar :refer [invoices-side-bar]] [auto-ap.expense-accounts :as expense-accounts] [auto-ap.entities.invoices-expense-accounts :as invoices-expense-accounts] @@ -678,21 +679,6 @@ (assoc-in updated [::params :vendor-id] value)) updated)))) - -(defn vendor-filter [] - (let [{:keys [vendor-filter]} @(re-frame/subscribe [::invoice-page])] - [:div.field - [:div.control - [bind-field - [typeahead {:matches (map (fn [x] [(:id x) (:name x)]) @(re-frame/subscribe [::subs/vendors])) - :type "typeahead" - :auto-focus true - :field [:vendor-id] - :text-field [:vendor-name] - :event [::change-selected-vendor] - :spec (s/nilable ::invoice/vendor-id) - :subscription vendor-filter}]]]])) - (defn invoice-number-filter [] (let [{:keys [invoice-number-like] :as params} @(re-frame/subscribe [::params])] [:div.field @@ -794,7 +780,9 @@ ^{:key "extra-filter"} [:div [:p.menu-label "Vendor"] - [:div [vendor-filter]] + [:div [vendor-filter {:on-change-event [::change-selected-vendor] + :value (:vendor-filter @(re-frame/subscribe [::invoice-page])) + :vendors @(re-frame/subscribe [::subs/vendors])}]] [:p.menu-label "Invoice #"] [:div [invoice-number-filter]]]]