Update reagent6/events.cljs to use interceptors

This commit is contained in:
Evan Rubinton 2016-10-01 17:58:41 -04:00
parent 243d9112ce
commit 1fe4fcd77a
1 changed files with 20 additions and 17 deletions

View File

@ -1,12 +1,12 @@
(ns $PROJECT_NAME_HYPHENATED$.events (ns $PROJECT_NAME_HYPHENATED$.events
(:require (:require
[re-frame.core :refer [reg-event-db after]] [re-frame.core :refer [reg-event-db ->interceptor]]
[clojure.spec :as s] [clojure.spec :as s]
[$PROJECT_NAME_HYPHENATED$.db :as db :refer [app-db]])) [$PROJECT_NAME_HYPHENATED$.db :as db :refer [app-db]]))
;; -- Middleware ------------------------------------------------------------ ;; -- Interceptors ------------------------------------------------------------
;; ;;
;; See https://github.com/Day8/re-frame/wiki/Using-Handler-Middleware ;; See https://github.com/Day8/re-frame/blob/master/docs/Interceptors.md
;; ;;
(defn check-and-throw (defn check-and-throw
"Throw an exception if db doesn't have a valid spec." "Throw an exception if db doesn't have a valid spec."
@ -15,21 +15,24 @@
(let [explain-data (s/explain-data spec db)] (let [explain-data (s/explain-data spec db)]
(throw (ex-info (str "Spec check failed: " explain-data) explain-data))))) (throw (ex-info (str "Spec check failed: " explain-data) explain-data)))))
(def validate-spec-mw (def validate-spec
(if goog.DEBUG (->interceptor
(after (partial check-and-throw ::db/app-db)) :id :validate-spec
[])) :after (fn [context]
(if goog.DEBUG
(check-and-throw ::db/app-db (get-in context [:effects :db])))
context)))
;; -- Handlers -------------------------------------------------------------- ;; -- Handlers --------------------------------------------------------------
(reg-event-db (reg-event-db
:initialize-db :initialize-db
validate-spec-mw validate-spec
(fn [_ _] (fn [_ _]
app-db)) app-db))
(reg-event-db (reg-event-db
:set-greeting :set-greeting
validate-spec-mw validate-spec
(fn [db [_ value]] (fn [db [_ value]]
(assoc db :greeting value))) (assoc db :greeting value)))