added support for merging vendors.

This commit is contained in:
Bryce Covert
2020-01-05 10:28:10 -08:00
parent 2913f05479
commit 2a708f1990
7 changed files with 144 additions and 38 deletions

View File

@@ -4,11 +4,13 @@
[reagent.core :as reagent]
[clojure.string :as str]
[auto-ap.subs :as subs]
[auto-ap.events :as e]
[auto-ap.forms :as forms]
[auto-ap.events.admin.vendors :as events]
[auto-ap.entities.vendors :as entity]
[auto-ap.views.components.address :refer [address-field]]
[auto-ap.views.components.vendor-dialog :refer [vendor-dialog]]
[auto-ap.views.components.modal :refer [modal]]
[auto-ap.views.components.modal :refer [modal action-modal]]
[auto-ap.views.components.admin.side-bar :refer [admin-side-bar]]
[auto-ap.views.components.layouts :refer [side-bar-layout]]
[clojure.spec.alpha :as s]
@@ -56,6 +58,72 @@
keys (dissoc keys :field :subscription)]
(vec (concat [dom keys] rest))))
(re-frame/reg-event-fx
::merge-clicked
(fn [{:keys [db]} _]
{:db (forms/start-form db ::merge-vendors {})
:dispatch [::e/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 [::e/modal-status ::merge-vendors {:visible? false}]
[::events/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 []
[(with-meta
@@ -65,15 +133,15 @@
[:div.notification banner])
(let [vendors (re-frame/subscribe [::subs/vendors])
editing-vendor (:vendor @(re-frame/subscribe [::subs/admin]))]
[:div
[:h1.title "Vendors"]
[:a.button.is-primary.is-large {:on-click (dispatch-event [::merge-clicked])} "Merge vendors"]
[vendors-table]
[:div.is-pulled-right
[:a.button.is-primary.is-large {:on-click (dispatch-event [::events/new])} "New vendor"]]
[merge-vendors-dialog]
[vendor-dialog {:vendor editing-vendor
:save-event [::events/save]
:change-event ::events/change