From 86a117f7393a344db520d10260a6a821356fedaa Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Sat, 22 Aug 2020 09:16:16 -0700 Subject: [PATCH] another step in cleaning up modals. --- .../auto_ap/views/pages/admin/vendors.cljs | 92 ++++--------------- .../pages/admin/vendors/merge_dialog.cljs | 76 +++++++++++++++ src/cljs/auto_ap/views/pages/ledger.cljs | 3 +- .../views/pages/ledger/profit_and_loss.cljs | 3 +- 4 files changed, 99 insertions(+), 75 deletions(-) create mode 100644 src/cljs/auto_ap/views/pages/admin/vendors/merge_dialog.cljs diff --git a/src/cljs/auto_ap/views/pages/admin/vendors.cljs b/src/cljs/auto_ap/views/pages/admin/vendors.cljs index 89ffc3bf..c21284d6 100644 --- a/src/cljs/auto_ap/views/pages/admin/vendors.cljs +++ b/src/cljs/auto_ap/views/pages/admin/vendors.cljs @@ -18,28 +18,38 @@ [clojure.spec.alpha :as s] [auto-ap.views.utils :refer [login-url dispatch-value-change dispatch-event bind-field horizontal-field action-cell-width]] [auto-ap.views.pages.admin.vendors.table :as table] + [auto-ap.views.pages.admin.vendors.merge-dialog :as merge-dialog] [auto-ap.views.components.typeahead :refer [typeahead]] [cljs.reader :as edn] [auto-ap.routes :as routes] [bidi.bidi :as bidi] [auto-ap.status :as status] - [vimsical.re-frame.fx.track :as track]) + [vimsical.re-frame.fx.track :as track] + [auto-ap.effects.forward :as forward]) (:require-macros [cljs.core.async.macros :refer [go]] [auto-ap.entities.vendors :as vendor])) +(re-frame/reg-event-fx + ::invalidated + (fn [{:keys [db]}] + {:graphql {:token (:user db) + :owns-state {:single ::vendor-page} + :query-obj {:venia/queries [[:vendor events/vendor-query]]} + :on-success [::received-vendors]}})) (re-frame/reg-event-fx ::mounted (fn [{:keys [db]} _] - {:graphql {:token (:user db) - :owns-state {:single ::vendor-page} - :query-obj {:venia/queries [[:vendor events/vendor-query]]} - :on-success [::received-vendors]} + {:dispatch [::invalidated] ::track/register {:id ::params :subscription [::params] - :event-fn (fn [params] [::params-change params])}})) + :event-fn (fn [params] [::params-change params])} + ::forward/register {:id ::merge-complete + :events #{::merge-dialog/complete} + :event-fn (fn [_] + [::invalidated])}})) (re-frame/reg-event-db ::received-vendors @@ -51,6 +61,7 @@ ::unmounted (fn [{:keys [db]} _] {:db (dissoc db ::table/params ::side-bar/filter-params) + ::forward/dispose {:id ::merge-complete} ::track/dispose {:id ::params}})) (re-frame/reg-sub @@ -79,71 +90,7 @@ :data (grid/virtual-paginate (:start params) matching-vendors))))) -(re-frame/reg-event-fx - ::merge-clicked - (fn [{:keys [db]} _] - {:db (forms/start-form db ::merge-vendors {}) - :dispatch [::events/modal-status ::merge-vendors {:visible? true :saving? false}]})) -(re-frame/reg-event-fx - ::merge-vendors-complete - (fn [{:keys [db]} _] - {:db (forms/stop-form db ::merge-vendors) - :dispatch-n (list [::events/modal-status ::merge-vendors {:visible? false}] - [::mounted])})) - -(re-frame/reg-event-fx - ::merge-submit-clicked - [(forms/in-form ::merge-vendors)] - (fn [{{{:keys [from-id to-id]} :data :as merge-vendors-form} :db :as g} _] - (let [user @(re-frame/subscribe [::subs/token])] - (if (and from-id to-id) - {:db (-> merge-vendors-form - (assoc :status :loading) - (assoc :error nil)) - :graphql - {:token user - :query-obj {:venia/operation {:operation/type :mutation - :operation/name "MergeVendors"} - :venia/queries [{:query/data [:merge-vendors - {:from from-id :to to-id} - []]}]} - :on-success [::merge-vendors-complete] - :on-error [::forms/save-error ::merge-vendors]}} - {:db merge-vendors-form})))) - -(defn merge-vendors-dialog [] - (let [{:keys [data active? error id]} @(re-frame/subscribe [::forms/form ::merge-vendors]) - change-event [::forms/change ::merge-vendors]] - - [action-modal {:id ::merge-vendors - :title "Merge Vendors" - :action-text "Merge" - :save-event [::merge-submit-clicked] - :status-from ::merge-vendors} - [:div.field - [:label.label - "From Vendor (will be deleted)"] - [:div.control - [bind-field - [typeahead {:matches (map (fn [x] [(:id x) (:name x)]) @(re-frame/subscribe [::subs/vendors])) - :type "typeahead" - :auto-focus true - :field [:from-id] - :text-field [:from-name] - :event change-event - :subscription data}]]]] - [:div.field - [:label.label - "To Vendor"] - [:div.control - [bind-field - [typeahead {:matches (map (fn [x] [(:id x) (:name x)]) @(re-frame/subscribe [::subs/vendors])) - :type "typeahead" - :field [:to-id] - :text-field [:to-name] - :event change-event - :subscription data}]]]]])) (defn admin-vendors-content [] @@ -156,10 +103,9 @@ editing-vendor (:vendor @(re-frame/subscribe [::subs/admin]))] [:div [:h1.title "Vendors"] - [:div.is-pulled-right [:a.button.is-primary.is-outlined {:on-click (dispatch-event [::merge-clicked])} "Merge vendors"]] + [:div.is-pulled-right [:a.button.is-primary.is-outlined {:on-click (dispatch-event [::merge-dialog/show])} "Merge vendors"]] [table/vendors-table {:page @(re-frame/subscribe [::vendor-page]) - :status @(re-frame/subscribe [::status/single ::vendor-page])}] - [merge-vendors-dialog]])]) + :status @(re-frame/subscribe [::status/single ::vendor-page])}]])]) {:component-did-mount #(re-frame/dispatch [::mounted]) :component-will-unmount #(re-frame/dispatch-sync [::unmounted])})]) diff --git a/src/cljs/auto_ap/views/pages/admin/vendors/merge_dialog.cljs b/src/cljs/auto_ap/views/pages/admin/vendors/merge_dialog.cljs new file mode 100644 index 00000000..8f384b69 --- /dev/null +++ b/src/cljs/auto_ap/views/pages/admin/vendors/merge_dialog.cljs @@ -0,0 +1,76 @@ +(ns auto-ap.views.pages.admin.vendors.merge-dialog + (:require [auto-ap.forms :as forms] + [auto-ap.status :as status] + [auto-ap.subs :as subs] + [auto-ap.views.components.modal :as modal] + [auto-ap.views.components.typeahead :refer [typeahead-entity]] + [auto-ap.views.utils :refer [dispatch-event]] + [re-frame.core :as re-frame])) + +(re-frame/reg-sub + ::can-submit + :<- [::forms/form ::form] + (fn [{:keys [data]}] + (println data) + (and (:from data) + (:to data)))) + +(def merge-form (forms/vertical-form {:submit-event [::save] + :change-event [::forms/change ::form] + :can-submit [::can-submit] + :id ::form})) + +(defn form [] + (let [{:keys [data active? error id]} @(re-frame/subscribe [::forms/form ::form]) + {:keys [form-inline horizontal-field field raw-field error-notification submit-button]} merge-form] + + + (form-inline {} + [:<> + (field "Form Vendor (will be deleted)" + [typeahead-entity {:matches @(re-frame/subscribe [::subs/vendors]) + :type "typeahead-entity" + :auto-focus true + :match->text :name + :field [:from]}]) + + (field "To Vendor" + [typeahead-entity {:matches @(re-frame/subscribe [::subs/vendors]) + :type "typeahead-entity" + :match->text :name + :field [:to]}])]))) + +(re-frame/reg-event-fx + ::show + (fn [{:keys [db]} _] + {:dispatch [::modal/modal-requested {:title "Merge Vendors" + :body [form] + :confirm {:value "Merge" + :status-from [::status/single ::form] + :class "is-primary" + :on-click (dispatch-event [::save]) + :can-submit [::can-submit] + :close-event [::status/completed ::form]}}] + :db (forms/start-form db ::form {})} + )) + +(re-frame/reg-event-fx + ::complete + (fn [{:keys [db]} _] + {:db (forms/stop-form db ::form) + :dispatch [::modal/modal-closed ]})) + +(re-frame/reg-event-fx + ::save + [(forms/in-form ::form)] + (fn [{{{:keys [from to]} :data :as merge-vendors-form} :db :as g} _] + (let [user @(re-frame/subscribe [::subs/token])] + {:graphql + {:token user + :owns-state {:single ::form} + :query-obj {:venia/operation {:operation/type :mutation + :operation/name "MergeVendors"} + :venia/queries [{:query/data [:merge-vendors + {:from (:id from) :to (:id to)} []]}]} + :on-success [::complete]}}))) + diff --git a/src/cljs/auto_ap/views/pages/ledger.cljs b/src/cljs/auto_ap/views/pages/ledger.cljs index 7a4ec84e..1c55bad9 100644 --- a/src/cljs/auto_ap/views/pages/ledger.cljs +++ b/src/cljs/auto_ap/views/pages/ledger.cljs @@ -66,7 +66,8 @@ (re-frame/reg-event-fx ::unmounted (fn [{:keys [db]} _] - {::track/dispose {:id ::params}})) + {:dispatch [::data-page/dispose ::page] + ::track/dispose {:id ::params}})) (re-frame/reg-event-fx ::mounted diff --git a/src/cljs/auto_ap/views/pages/ledger/profit_and_loss.cljs b/src/cljs/auto_ap/views/pages/ledger/profit_and_loss.cljs index 44336170..42e08110 100644 --- a/src/cljs/auto_ap/views/pages/ledger/profit_and_loss.cljs +++ b/src/cljs/auto_ap/views/pages/ledger/profit_and_loss.cljs @@ -593,7 +593,8 @@ (re-frame/reg-event-fx ::unmounted (fn [{:keys [db]} _] - {::track/dispose {:id ::ledger-params}})) + {:dispatch [::data-page/dispose ::ledger] + ::track/dispose {:id ::ledger-params}})) (re-frame/reg-event-fx ::mounted