another step in cleaning up modals.

This commit is contained in:
Bryce Covert
2020-08-22 09:16:16 -07:00
parent b508d8d8b8
commit 86a117f739
4 changed files with 99 additions and 75 deletions

View File

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

View File

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

View File

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

View File

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