82 lines
2.4 KiB
Clojure
82 lines
2.4 KiB
Clojure
(ns auto-ap.events.admin.vendors
|
|
(:require [re-frame.core :as re-frame]
|
|
[clojure.spec.alpha :as s]
|
|
[auto-ap.db :as db]
|
|
[auto-ap.routes :as routes]
|
|
[auto-ap.effects :as effects]
|
|
[auto-ap.entities.vendors :as entity]
|
|
|
|
[bidi.bidi :as bidi]))
|
|
|
|
(re-frame/reg-event-db
|
|
::edit
|
|
(fn [db [_ vendor-id]]
|
|
(assoc-in db [:admin :vendor]
|
|
(get (:vendors db) vendor-id))))
|
|
|
|
(re-frame/reg-event-db
|
|
::new
|
|
(fn [db _]
|
|
(assoc-in db [:admin :vendor]
|
|
{})))
|
|
|
|
(re-frame/reg-event-fx
|
|
::save
|
|
(fn [{:keys [db]} _]
|
|
(let [edited-vendor (get-in db [:admin :vendor])
|
|
fx {:db (assoc-in db [:admin :vendor :saving?] true)}]
|
|
(when (s/valid? ::entity/vendor edited-vendor)
|
|
(if (:id edited-vendor)
|
|
(assoc fx :http {:method :put
|
|
:token (:user db)
|
|
:body (pr-str edited-vendor)
|
|
:headers {"Content-Type" "application/edn"}
|
|
:uri (str "/api/vendors/" (:id edited-vendor))
|
|
:on-success [::save-complete]
|
|
:on-error [::save-error]})
|
|
(assoc fx :http {:method :post
|
|
:token (:user db)
|
|
:body (pr-str edited-vendor)
|
|
:headers {"Content-Type" "application/edn"}
|
|
:uri (str "/api/vendors")
|
|
:on-success [::save-complete]
|
|
:on-error [::save-error]}))))))
|
|
|
|
(re-frame/reg-event-db
|
|
::save-complete
|
|
(fn [db [_ vendor]]
|
|
(-> db
|
|
|
|
(assoc-in [:admin :vendor] nil)
|
|
(assoc-in [:vendors (:id vendor)] vendor))))
|
|
|
|
(re-frame/reg-event-db
|
|
::save-error
|
|
(fn [db [_ vendor]]
|
|
(-> db
|
|
(assoc-in [:admin :vendor :error] true)
|
|
(assoc-in [:admin :vendor :saving?] false))))
|
|
|
|
(re-frame/reg-event-db
|
|
::change
|
|
(fn [db [_ path value]]
|
|
(assoc-in db (concat [:admin :vendor] path)
|
|
value)))
|
|
|
|
(re-frame/reg-event-fx
|
|
::mounted
|
|
(fn [{:keys [db]} _]
|
|
{:http {:method :get
|
|
:token (:user db)
|
|
:uri "/api/vendors"
|
|
:on-success [::received-vendors]}}))
|
|
|
|
(re-frame/reg-event-db
|
|
::received-vendors
|
|
(fn [db [_ vendors]]
|
|
|
|
(assoc db :vendors (reduce (fn [vendors vendor]
|
|
(assoc vendors (:id vendor) vendor))
|
|
{}
|
|
vendors))))
|