From 74936001bafcdc58c017bc6274bfe3c8b0d6802b Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Tue, 26 Jan 2021 12:37:40 -0800 Subject: [PATCH] all kinds of linkability. --- src/cljs/auto_ap/events.cljs | 11 ++-- .../views/components/invoice_table.cljs | 1 + src/cljs/auto_ap/views/main.cljs | 13 +++-- src/cljs/auto_ap/views/pages/data_page.cljs | 18 +++++-- .../auto_ap/views/pages/unpaid_invoices.cljs | 53 ++++++++++++++----- 5 files changed, 67 insertions(+), 29 deletions(-) diff --git a/src/cljs/auto_ap/events.cljs b/src/cljs/auto_ap/events.cljs index e58c0e82..3575d4c4 100644 --- a/src/cljs/auto_ap/events.cljs +++ b/src/cljs/auto_ap/events.cljs @@ -135,16 +135,19 @@ (re-frame/reg-event-fx ::set-active-page (fn [{:keys [db]} [_ handler params]] + (if (and (not= :login handler) (not (:user db))) {:redirect "/login" :db (assoc db :active-page :login :page-failure nil :auto-ap.forms/forms nil)} - {:db (assoc db :active-page handler - :page-failure nil - :query-params params - :auto-ap.forms/forms nil)}))) + {:db (-> db + (assoc :active-page handler + :page-failure nil + :query-params params + :auto-ap.forms/forms nil) + (auto-ap.views.pages.data-page/dispose-all))}))) (re-frame/reg-event-db ::imported-invoices diff --git a/src/cljs/auto_ap/views/components/invoice_table.cljs b/src/cljs/auto_ap/views/components/invoice_table.cljs index 15bb71f2..15317959 100644 --- a/src/cljs/auto_ap/views/components/invoice_table.cljs +++ b/src/cljs/auto_ap/views/components/invoice_table.cljs @@ -170,6 +170,7 @@ [:td (:post-date (:transaction (:payment invoice-payment)))] [:td [buttons/fa-icon {:icon "fa-external-link" + :target "_blank" :href (str (bidi/path-for routes/routes :payments ) "?" (url/map->query {:exact-match-id (:id (:payment invoice-payment))}))}]]])]]]]] diff --git a/src/cljs/auto_ap/views/main.cljs b/src/cljs/auto_ap/views/main.cljs index 7d8f3955..3637815a 100644 --- a/src/cljs/auto_ap/views/main.cljs +++ b/src/cljs/auto_ap/views/main.cljs @@ -7,7 +7,7 @@ [auto-ap.events :as events] [auto-ap.views.utils :refer [active-when active-when= login-url dispatch-event]] [auto-ap.views.components.layouts :refer [side-bar-layout loading-layout]] - [auto-ap.views.pages.unpaid-invoices :refer [unpaid-invoices-page]] + [auto-ap.views.pages.unpaid-invoices :refer [unpaid-invoices-page paid-invoices-page all-invoices-page voided-invoices-page]] [auto-ap.views.pages.import-invoices :refer [import-invoices-page]] [auto-ap.views.pages.needs-activation :refer [needs-activation-page]] [auto-ap.views.pages.transactions :refer [transactions-page]] @@ -34,7 +34,7 @@ (defmulti page (fn [active-page] active-page)) (defmethod page :unpaid-invoices [_] - ^{:key :voided} + ^{:key :unpaid} [unpaid-invoices-page {:status :unpaid}]) (defmethod page :import-invoices [_] @@ -42,17 +42,16 @@ (defmethod page :paid-invoices [_] - ^{:key :voided} - [unpaid-invoices-page {:status :paid}] - ) + ^{:key :paid} + [paid-invoices-page {:status :paid}]) (defmethod page :voided-invoices [_] ^{:key :voided} - [unpaid-invoices-page {:status :voided}]) + [voided-invoices-page {:status :voided}]) (defmethod page :invoices [_] ^{:key :all} - [unpaid-invoices-page {}]) + [all-invoices-page {}]) (defmethod page :payments [_] [payments-page]) diff --git a/src/cljs/auto_ap/views/pages/data_page.cljs b/src/cljs/auto_ap/views/pages/data_page.cljs index 95d3e57f..810eb75f 100644 --- a/src/cljs/auto_ap/views/pages/data_page.cljs +++ b/src/cljs/auto_ap/views/pages/data_page.cljs @@ -57,10 +57,13 @@ (fn [db [_ which]] (get-in db [::additional-params which]))) + + (re-frame/reg-sub ::params (fn [[_ id]] - [(re-frame/subscribe [::subs/client]) + [ #_(re-frame/subscribe [::subs/active-page]) + (re-frame/subscribe [::subs/client]) (re-frame/subscribe [::settled-filters id]) (re-frame/subscribe [::table-params id]) (re-frame/subscribe [::additional-params id])]) @@ -76,9 +79,11 @@ (re-frame/reg-event-fx ::received (fn [{:keys [db]} [_ id data]] - (println @(re-frame/subscribe [::params id])) - {:db (assoc-in db [::data id] data) - :set-uri-params (dissoc @(re-frame/subscribe [::params id]) :client-id)})) + (let [uri-params (dissoc @(re-frame/subscribe [::params id]) :client-id) + current-uri-params (auto-ap.views.utils/query-params)] + (cond-> {:db (-> db (assoc-in [::data id] data) + (assoc :query-params uri-params))} + (not= uri-params current-uri-params) (assoc :set-uri-params uri-params))))) (re-frame/reg-event-db ::dispose @@ -90,6 +95,11 @@ (update ::filters dissoc id) (update ::settled-filters dissoc id)))) +(defn dispose-all [db] + (-> db + (dissoc ::data ::checked ::table-params ::filters ::settled-filters))) + + (re-frame/reg-sub ::data (fn [db [_ id]] diff --git a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs index 11d81c58..2c8f67f8 100644 --- a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs +++ b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs @@ -38,14 +38,17 @@ ::params-change [with-user] (fn [{:keys [user]} [_ params]] - {:graphql {:token user - :owns-state {:single [::data-page/page :invoices]} - :query-obj (table/query params ) - :on-success (fn [result] - (let [result (set/rename-keys (first (:invoice-page result)) - {:invoices :data})] + (try + {:graphql {:token user + :owns-state {:single [::data-page/page :invoices]} + :query-obj (table/query params ) + :on-success (fn [result] + (let [result (set/rename-keys (first (:invoice-page result)) + {:invoices :data})] - [::data-page/received :invoices result]))}})) + [::data-page/received :invoices result]))}} + (catch js/Error e + (println "Warning" e))))) (re-frame/reg-event-fx ::unmounted @@ -196,14 +199,36 @@ :checkable-fn (fn [i] (not (:scheduled-payment i))) :actions #{:edit :void :expense-accounts}}]])) +(defn layout [params] + (let [{invoice-bar-active? :active?} @(re-frame/subscribe [::forms/form ::form/form])] + [side-bar-layout {:side-bar [invoices-side-bar {:data-page :invoices}] + :main [unpaid-invoices-content params] + :right-side-bar [appearing-side-bar {:visible? invoice-bar-active?} [form/form {}]]}])) + (defn unpaid-invoices-page [params] (r/create-class - {:display-name "invoices-page" + {:display-name "unpaid-invoices-page" :component-will-unmount #(re-frame/dispatch-sync [::unmounted]) :component-did-mount #(re-frame/dispatch [::mounted]) - :reagent-render - (fn [] - (let [{invoice-bar-active? :active?} @(re-frame/subscribe [::forms/form ::form/form])] - [side-bar-layout {:side-bar [invoices-side-bar {:data-page :invoices}] - :main [unpaid-invoices-content params] - :right-side-bar [appearing-side-bar {:visible? invoice-bar-active?} [form/form {}]]}]))})) + :reagent-render layout})) + +(defn paid-invoices-page [params] + (r/create-class + {:display-name "paid-invoices-page" + :component-will-unmount #(re-frame/dispatch-sync [::unmounted]) + :component-did-mount #(re-frame/dispatch [::mounted]) + :reagent-render layout})) + +(defn voided-invoices-page [params] + (r/create-class + {:display-name "voided-invoices-page" + :component-will-unmount #(re-frame/dispatch-sync [::unmounted]) + :component-did-mount #(re-frame/dispatch [::mounted]) + :reagent-render layout})) + +(defn all-invoices-page [params] + (r/create-class + {:display-name "all-invoices-page" + :component-will-unmount #(re-frame/dispatch-sync [::unmounted]) + :component-did-mount #(re-frame/dispatch [::mounted]) + :reagent-render layout}))