another step in cleaning up modals.
This commit is contained in:
@@ -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])})])
|
||||
|
||||
|
||||
76
src/cljs/auto_ap/views/pages/admin/vendors/merge_dialog.cljs
vendored
Normal file
76
src/cljs/auto_ap/views/pages/admin/vendors/merge_dialog.cljs
vendored
Normal 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]}})))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user