diff --git a/src/cljs/auto_ap/effects.cljs b/src/cljs/auto_ap/effects.cljs index 1c34e97f..457715f3 100644 --- a/src/cljs/auto_ap/effects.cljs +++ b/src/cljs/auto_ap/effects.cljs @@ -21,19 +21,16 @@ (re-frame/reg-fx :set-uri-params (fn [uri-params] - (println "HERE?") (pushy/set-token! p/history (str (.-protocol (.-location js/window)) "//" (.-host (.-location js/window)) (.-pathname (.-location js/window)) "?" - (cemerick.url/map->query (into {} (filter (fn [[k v]] v) uri-params))) - #_(reduce-kv (fn [result k v] - (if v - (str (or result "?") - (when result "&") - (name k) "=" (js/encodeURI v)) - result)) - nil - uri-params))))) + (cemerick.url/map->query (->> uri-params + (filter (fn [[k v]] (not-empty v)) ) + (map + (fn [[k v]] + (if (string? v) + [k (str "\"" v "\"")]))) + (into {} ))))))) (re-frame/reg-fx :new-window diff --git a/src/cljs/auto_ap/views/pages/data_page.cljs b/src/cljs/auto_ap/views/pages/data_page.cljs index 4ee93036..fdc9b04f 100644 --- a/src/cljs/auto_ap/views/pages/data_page.cljs +++ b/src/cljs/auto_ap/views/pages/data_page.cljs @@ -50,14 +50,14 @@ (fn [[_ id]] [(re-frame/subscribe [::subs/client]) (re-frame/subscribe [::settled-filters id]) - (re-frame/subscribe [::table-params id]) - (re-frame/subscribe [::subs/query-params])]) + (re-frame/subscribe [::table-params id])]) (fn [[client filters table-params query-params]] - (cond-> {} - client (assoc :client-id (:id client)) - (seq query-params) (merge query-params) - (seq filters) (merge filters) - (seq table-params) (merge table-params)))) + (let [query-params (auto-ap.views.utils/query-params)] + (cond-> {} + client (assoc :client-id (:id client)) + (seq query-params) (merge query-params) + (seq filters) (merge filters) + (seq table-params) (merge table-params))))) (re-frame/reg-event-fx ::received diff --git a/src/cljs/auto_ap/views/pages/payments.cljs b/src/cljs/auto_ap/views/pages/payments.cljs index b0eaf720..6f782c76 100644 --- a/src/cljs/auto_ap/views/pages/payments.cljs +++ b/src/cljs/auto_ap/views/pages/payments.cljs @@ -21,36 +21,27 @@ [auto-ap.subs :as subs] [auto-ap.status :as status] [vimsical.re-frame.fx.track :as track] - [auto-ap.effects.forward :as forward])) + [auto-ap.effects.forward :as forward] + [auto-ap.views.pages.data-page :as data-page] + [clojure.set :as set])) - - -(re-frame/reg-sub - ::payment-page - (fn [db] - (-> db ::payment-page))) - - -(re-frame/reg-sub - ::params - :<- [::subs/client] - :<- [::side-bar/filter-params] - :<- [::table/table-params] - (fn [[ client filter-params table-params]] - (cond-> {} - client (assoc :client-id (:id client)) - (seq filter-params) (merge filter-params) - (seq table-params) (merge table-params)))) - (re-frame/reg-event-fx ::params-change [with-user] (fn [{:keys [user db ]}[_ params]] {:graphql {:token user - :owns-state {:single ::page} + :owns-state {:single [::data-page/page ::page]} :query-obj {:venia/queries [[:payment_page - params + {:start (:start params 0) + :sort (:sort params) + :client-id (:id @(re-frame/subscribe [::subs/client])) + :vendor-id (:id (:vendor params)) + :date-range (:date-range params) + :amount-gte (:amount-gte (:amount-range params)) + :amount-lte (:amount-lte (:amount-range params)) + :check-number-like (:check-number-like params) + :invoice-number (:invoice-number params)} [[:payments [:id :status :amount :type :check_number :s3_url [:bank-account [:name]] :date [:vendor [:name :id]] [:client [:name :id]] @@ -58,20 +49,16 @@ :total :start :end]]]} - :on-success [::received]} - :set-uri-params (dissoc params :client-id)})) + :on-success (fn [result] + (let [result (set/rename-keys (first (:payment-page result)) + {:payments :data})] + [::data-page/received ::page result]))}})) -(re-frame/reg-event-db - ::received - (fn [db [_ data]] - (-> db - (update ::payment-page merge (first (:payment-page data))) - (assoc-in [:status :loading] false)))) (re-frame/reg-event-fx ::unmounted (fn [{:keys [db]} _] - {:db (dissoc db ::last-params ::table/table-params ::side-bar/filters ::side-bar/settled-filters ::payment-page) + {:dispatch [::data-page/dispose ::page] ::track/dispose {:id ::params} ::forward/dispose {:id ::page}})) @@ -79,37 +66,26 @@ ::mounted (fn [{:keys [db]} _] {::track/register {:id ::params - :subscription [::params] - :event-fn (fn [params] [::params-change params])} + :subscription [::data-page/params ::page] + :event-fn (fn [params] + [::params-change params])} ::forward/register {:id ::page :events #{::table/payment-voided} - :event-fn (fn [[_ result]] - [::payment-voided result])}})) - -(re-frame/reg-event-db - ::payment-voided - [(re-frame/path [::payment-page :payments])] - (fn [db [_ {:keys [void-payment]}]] - (mapv (fn [c] - (if (= (:id c) (:id void-payment)) - (assoc void-payment :class "live-removed") - c)) - db))) + :event-fn (fn [[_ {:keys [void-payment]}]] + [::data-page/updated-entity ::page (assoc void-payment :class "live-removed")])}})) (defn content [] - (let [params @(re-frame/subscribe [::params])] - [:div - [:h1.title "Payments"] - [table/table {:id :payments - :payment-page @(re-frame/subscribe [::payment-page]) - :status @(re-frame/subscribe [::status/single ::page])}]])) + [:div + [:h1.title "Payments"] + [table/table {:id :payments + :data-page ::page}]]) (defn payments-page [] (reagent/create-class {:display-name "payments-page" - :component-will-unmount #(re-frame/dispatch [::unmounted]) + :component-will-unmount #(re-frame/dispatch-sync [::unmounted]) :component-did-mount #(re-frame/dispatch [::mounted]) :reagent-render (fn [] - [side-bar-layout {:side-bar [side-bar/side-bar] + [side-bar-layout {:side-bar [side-bar/side-bar {:data-page ::page}] :main [content]}])})) diff --git a/src/cljs/auto_ap/views/pages/payments/side_bar.cljs b/src/cljs/auto_ap/views/pages/payments/side_bar.cljs index 7732bf81..3ba2a5da 100644 --- a/src/cljs/auto_ap/views/pages/payments/side_bar.cljs +++ b/src/cljs/auto_ap/views/pages/payments/side_bar.cljs @@ -8,93 +8,11 @@ [auto-ap.views.components.bank-account-filter :refer [bank-account-filter]] [auto-ap.views.components.typeahead :refer [typeahead-entity]] [bidi.bidi :as bidi] - [re-frame.core :as re-frame])) + [re-frame.core :as re-frame] + [auto-ap.views.pages.data-page :as data-page])) -(re-frame/reg-sub - ::specific-filters - (fn [db ] - (::filters db {}))) -(re-frame/reg-sub - ::settled-filters - (fn [db ] - (::settled-filters db))) - -(re-frame/reg-sub - ::filters - :<- [::specific-filters] - :<- [::subs/vendors-by-id] - :<- [::subs/query-params] - (fn [[specific-filters vendors-by-id query-params] ] - (let [url-filters (-> query-params - (select-keys #{:vendor-id - :amount-gte - :amount-lte - :date-range - :check-number-like - :invoice-number})) - url-filters {:vendor (when-let [vendor-id (:vendor-id url-filters)] - {:id (str vendor-id) - :name (get-in vendors-by-id [(str vendor-id) :name] "Loading...")}) - :date-range (:date-range url-filters) - :amount-range {:amount-gte (:amount-gte url-filters) - :amount-lte (:amount-lte url-filters)} - :check-number-like (:check-number-like url-filters) - :invoice-number (:invoice-number url-filters)}] - - (merge url-filters specific-filters )))) - -(re-frame/reg-sub - ::filter - :<- [::filters] - (fn [filters [_ which]] - (filters which))) - -(re-frame/reg-sub - ::filter-params - :<- [::settled-filters] - :<- [::filters] - (fn [[settled-filters filters]] - (let [filters (or settled-filters filters)] - {:vendor-id (:id (:vendor filters)) - :date-range (:date-range filters) - :amount-gte (:amount-gte (:amount-range filters)) - :amount-lte (:amount-lte (:amount-range filters)) - :check-number-like (:check-number-like filters) - :invoice-number (:invoice-number filters)}))) - -(re-frame/reg-event-fx - ::filters-settled - (fn [{:keys [db]} [_ & params]] - - {:db (assoc db ::settled-filters @(re-frame/subscribe [::filters]))})) - -(re-frame/reg-event-fx - ::filter-changed - (fn [{:keys [db]} [_ & params]] - (let [[a b c] params - [which val] (if (= 3 (count params)) - [(into [a] b) c] - [[a] b])] - {:db (assoc-in db (into [::filters] which) val) - :dispatch-debounce - {:event [::filters-settled] - :time 800 - :key ::filters}}))) - -(defn check-number-filter [] - [:div.field - [:div.control [:input.input {:placeholder "10001" - :value @(re-frame/subscribe [::filter :check-number-like]) - :on-change (dispatch-value-change [::filter-changed :check-number-like])} ]]]) - -(defn invoice-number-filter [] - [:div.field - [:div.control [:input.input {:placeholder "SJ-12345" - :value @(re-frame/subscribe [::filter :invoice-number]) - :on-change (dispatch-value-change [::filter-changed :invoice-number])} ]]]) - -(defn side-bar [] +(defn side-bar [{:keys [data-page]}] (let [ap @(re-frame/subscribe [::subs/active-page]) user @(re-frame/subscribe [::subs/user])] [:div @@ -102,25 +20,32 @@ [:p.menu-label "Vendor"] [:div [typeahead-entity {:matches @(re-frame/subscribe [::subs/vendors]) - :on-change #(re-frame/dispatch [::filter-changed :vendor %]) + :on-change #(re-frame/dispatch [::data-page/filter-changed data-page :vendor %]) + :include-keys [:name :id] :match->text :name :type "typeahead-entity" - :value @(re-frame/subscribe [::filter :vendor])}]] + :value @(re-frame/subscribe [::data-page/filter data-page :vendor])}]] [:p.menu-label "Date Range"] [:div [date-range-filter - {:on-change-event [::filter-changed :date-range] - :value @(re-frame/subscribe [::filter :date-range])}]] + {:on-change-event [::data-page/filter-changed data-page :date-range] + :value @(re-frame/subscribe [::data-page/filter data-page :date-range])}]] [:p.menu-label "Amount"] [:div [number-filter - {:on-change-event [::filter-changed :amount-range] - :value @(re-frame/subscribe [::filter :amount-range])}]] + {:on-change-event [::data-page/filter-changed data-page :amount-range] + :value @(re-frame/subscribe [::data-page/filter data-page :amount-range])}]] [:p.menu-label "Check #"] - [:div [check-number-filter]] + [:div.field + [:div.control [:input.input {:placeholder "10001" + :value @(re-frame/subscribe [::data-page/filter data-page :check-number-like]) + :on-change (dispatch-value-change [::data-page/filter-changed data-page :check-number-like])} ]]] [:p.menu-label "Invoice #"] - [:div [invoice-number-filter]]]])) + [:div.field + [:div.control [:input.input {:placeholder "SJ-12345" + :value @(re-frame/subscribe [::data-page/filter data-page :invoice-number]) + :on-change (dispatch-value-change [::data-page/filter-changed data-page :invoice-number])} ]]]]])) diff --git a/src/cljs/auto_ap/views/pages/payments/table.cljs b/src/cljs/auto_ap/views/pages/payments/table.cljs index 70312be6..58211287 100644 --- a/src/cljs/auto_ap/views/pages/payments/table.cljs +++ b/src/cljs/auto_ap/views/pages/payments/table.cljs @@ -14,25 +14,9 @@ [re-frame.core :as re-frame] [auto-ap.views.components.grid :as grid] [auto-ap.views.components.buttons :as buttons] - [auto-ap.status :as status])) + [auto-ap.status :as status] + [auto-ap.views.pages.data-page :as data-page])) -(re-frame/reg-sub - ::specific-table-params - (fn [db] - (::table-params db))) - -(re-frame/reg-sub - ::table-params - :<- [::specific-table-params] - :<- [::subs/query-params] - (fn [[specific-table-params query-params]] - (merge (select-keys query-params #{:start :sort}) specific-table-params))) - -(re-frame/reg-event-fx - ::params-changed - [(re-frame/path [::table-params])] - (fn [{table-params :db} [_ params :as z]] - {:db (merge table-params params)})) (re-frame/reg-event-fx ::void-check @@ -76,7 +60,7 @@ [grid/cell {} status] [grid/button-cell {} [:div.buttons - (when (seq invoices) + (when (and (seq invoices) (not= :voided status)) [drop-down {:id [::invoices id] :header [:button.button.badge {:data-badge (str (clojure.core/count invoices)) :aria-haspopup true? @@ -91,7 +75,7 @@ ^{:key (:invoice-number (:invoice invoice))} [:a.dropdown-item {:href (str (bidi/path-for routes/routes :invoices ) "?" - (url/map->query {:invoice-number-like (:invoice-number (:invoice invoice))})) + (url/map->query {:invoice-number-like (str "\"" (:invoice-number (:invoice invoice)) "\"")})) :target "_new"} (str " " (:invoice-number (:invoice invoice)))])]]) [:span {:style {:margin-left "1em"}}] @@ -101,15 +85,13 @@ [buttons/sl-icon {:event [::void-check check] :icon :icon-bin-2 :class (status/class-for (get states (:id check)))}])]]])) -(defn table [{:keys [id payment-page status]}] +(defn table [{:keys [data-page]}] (let [selected-client @(re-frame/subscribe [::subs/client]) + {:keys [data status]} @(re-frame/subscribe [::data-page/page data-page]) states @(re-frame/subscribe [::status/multi ::void])] - [grid/grid {:on-params-change (fn [e] - (re-frame/dispatch [::params-changed e])) - :params @(re-frame/subscribe [::table-params]) - :status status + [grid/grid {:data-page data-page :column-count (if selected-client 7 8)} - [grid/controls payment-page] + [grid/controls data] [grid/table {:fullwidth true} [grid/header {} [grid/row {} @@ -123,7 +105,7 @@ [grid/sortable-header-cell {:sort-key "status" :sort-name "Status" :style {:width "7em"}} "Status"] [grid/header-cell {:style {:width "12em"}}]]] [grid/body - (for [check (:payments payment-page)] + (for [check (:data data)] ^{:key (:id check)} [row {:check check :selected-client selected-client diff --git a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs index 2230f4bc..43c52f46 100644 --- a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs +++ b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs @@ -1,12 +1,10 @@ (ns auto-ap.views.pages.unpaid-invoices - (:require [auto-ap.entities.invoice :as invoice] + (:require [auto-ap.effects.forward :as forward] [auto-ap.events :as events] [auto-ap.forms :as forms] [auto-ap.status :as status] [auto-ap.subs :as subs] - [auto-ap.utils :refer [by merge-by replace-if]] [auto-ap.views.components.dropdown :refer [drop-down]] - [auto-ap.effects.forward :as forward] [auto-ap.views.components.expense-accounts-dialog :as expense-accounts-dialog] @@ -19,15 +17,15 @@ [auto-ap.views.components.layouts :refer [appearing-side-bar side-bar-layout]] - [auto-ap.views.components.modal :as modal :refer [modal]] + [auto-ap.views.components.modal :as modal] [auto-ap.views.pages.data-page :as data-page] - [auto-ap.views.pages.invoices.advanced-print-checks :as advanced-print-checks] - [auto-ap.views.pages.invoices.handwritten-checks :as handwritten-checks] - [auto-ap.views.pages.invoices.common :refer [invoice-read does-amount-exceed-outstanding?]] + [auto-ap.views.pages.invoices.advanced-print-checks + :as + advanced-print-checks] + [auto-ap.views.pages.invoices.common :refer [invoice-read]] [auto-ap.views.pages.invoices.form :as form] - [auto-ap.views.utils - :refer - [date-picker dispatch-event horizontal-field with-user]] + [auto-ap.views.pages.invoices.handwritten-checks :as handwritten-checks] + [auto-ap.views.utils :refer [dispatch-event with-user]] [clojure.set :as set] [clojure.string :as str] [goog.string :as gstring] @@ -46,14 +44,12 @@ (let [result (set/rename-keys (first (:invoice-page result)) {:invoices :data})] - [::data-page/received :invoices result])) - :on-error [::events/page-failed]}})) + [::data-page/received :invoices result]))}})) (re-frame/reg-event-fx ::unmounted (fn [{:keys [db]} _] - {:db (dissoc db ::table/table-params ::side-bar/filters ::side-bar/settled-filters ::last-params) - :dispatch [::data-page/dispose :invoices] + {:dispatch [::data-page/dispose :invoices] ::forward/dispose [{:id ::updated} {:id ::checks-printed}] ::track/dispose [{:id ::params}]})) @@ -61,7 +57,6 @@ (re-frame/reg-event-fx ::mounted (fn [{:keys [db]} _] - (println "MOUNTING") {::track/register [{:id ::params :subscription [::data-page/params :invoices] :event-fn (fn [params] @@ -136,11 +131,11 @@ checked-invoices (vals @(re-frame/subscribe [::data-page/checked :invoices]))] [:div [:div.is-pulled-right - [:div.buttons + [:div.buttons [:button.button.is-success {:on-click (dispatch-event [::new-invoice-clicked])} "New Invoice"] (when current-client [drop-down {:header [:button.button.is-success {:aria-haspopup true - :on-click (dispatch-event [::events/toggle-menu ::print-checks ]) + :on-click (dispatch-event [::events/toggle-menu ::print-checks ]) :disabled (if (and (seq checked-invoices)) "" "disabled") @@ -148,7 +143,7 @@ :class (status/class-for @(re-frame/subscribe [::status/single ::print-checks]))} "Pay " (when (> (count checked-invoices )) - (str + (str (count checked-invoices) " invoices " "(" (->> checked-invoices @@ -160,7 +155,7 @@ [:span.icon.is-small [:i.fa.fa-angle-down {:aria-hidden "true"}]]] :id ::print-checks :is-right? true} - [:div + [:div (list (for [{:keys [id number name type]} (->> (:bank-accounts current-client) (filter :visible) (sort-by :sort-order))] (if (= :cash type)