Improve error handling on user events.

This commit is contained in:
Andrey Antukh 2016-04-15 23:27:38 +03:00
parent 8353f92ea7
commit 2649f4bed2
No known key found for this signature in database
GPG key ID: 4DFEBCB8316A8B95

View file

@ -31,13 +31,9 @@
(defrecord FetchProfile [] (defrecord FetchProfile []
rs/WatchEvent rs/WatchEvent
(-apply-watch [_ state s] (-apply-watch [_ state s]
(letfn [(on-error [err] (->> (rp/req :fetch/profile)
(uum/error (tr "errors.profile-fetch")) (rx/map :payload)
(rx/empty))] (rx/map profile-fetched))))
(->> (rp/req :fetch/profile)
(rx/catch on-error)
(rx/map :payload)
(rx/map profile-fetched)))))
(defn fetch-profile (defn fetch-profile
[] []
@ -48,13 +44,9 @@
(defrecord UpdateProfile [data] (defrecord UpdateProfile [data]
rs/WatchEvent rs/WatchEvent
(-apply-watch [_ state s] (-apply-watch [_ state s]
(letfn [(on-error [err] (->> (rp/req :update/profile data)
(uum/error (tr "errors.update-profile")) (rx/map :payload)
(rx/empty))] (rx/map profile-fetched))))
(->> (rp/req :update/profile data)
(rx/catch on-error)
(rx/map :payload)
(rx/map profile-fetched)))))
(defn update-profile (defn update-profile
[data] [data]
@ -69,27 +61,24 @@
rs/EffectEvent rs/EffectEvent
(-apply-effect [_ state] (-apply-effect [_ state]
(uum/info (tr "profile.password-saved")))) (udm/info! (tr "profile.password-saved"))))
;; --- Update Password ;; --- Update Password
(defrecord UpdatePassword [data] (defrecord UpdatePassword [data]
rs/WatchEvent rs/WatchEvent
(-apply-watch [_ state s] (-apply-watch [_ state s]
(letfn [(on-error [{payload :payload :as data}] (letfn [(on-error [{payload :payload}]
(if (= (:type payload) :form/validation) (->> (:payload payload)
(rx/of (udf/assign-errors :profile/password)
(forms/assign-errors :profile/password (:payload payload))) (rx/of)))]
(do
(uum/error (tr "errors.profile.update-password") {:timeout 3000})
(rx/empty))))]
(let [params {:old-password (:old-password data) (let [params {:old-password (:old-password data)
:password (:password-1 data)}] :password (:password-1 data)}]
(->> (rp/req :update/password params) (->> (rp/req :update/password params)
(rx/map #(->PasswordUpdated)) (rx/catch rp/client-error? on-error)
(rx/catch on-error)))))) (rx/map #(->PasswordUpdated)))))))
(def update-password-schema (def ^:private update-password-schema
[[:password-1 sc/required sc/string [sc/min-len 6]] [[:password-1 sc/required sc/string [sc/min-len 6]]
[:password-2 sc/required sc/string [:password-2 sc/required sc/string
[sc/identical-to :password-1 :message "errors.form.password-not-match"]] [sc/identical-to :password-1 :message "errors.form.password-not-match"]]
@ -99,5 +88,5 @@
[data] [data]
(let [[errors data] (sc/validate data update-password-schema)] (let [[errors data] (sc/validate data update-password-schema)]
(if errors (if errors
(forms/assign-errors :profile/password errors) (udf/assign-errors :profile/password errors)
(UpdatePassword. data)))) (UpdatePassword. data))))