2015-02-25 11:03:02 +00:00
|
|
|
(ns re-frame.core
|
|
|
|
(:require
|
2016-07-07 04:52:13 +00:00
|
|
|
[re-frame.events :as events]
|
2015-02-25 11:03:25 +00:00
|
|
|
[re-frame.subs :as subs]
|
2016-07-13 06:28:15 +00:00
|
|
|
[re-frame.fx :as fx]
|
2015-03-04 13:00:36 +00:00
|
|
|
[re-frame.router :as router]
|
2016-06-24 12:09:07 +00:00
|
|
|
[re-frame.loggers :as loggers]
|
2016-08-03 02:53:01 +00:00
|
|
|
[re-frame.registrar :as registrar]
|
2016-08-03 07:35:49 +00:00
|
|
|
[re-frame.interceptor :as interceptor :refer [base ->interceptor
|
|
|
|
db-handler->interceptor fx-handler->interceptor
|
|
|
|
ctx-handler->interceptor]]))
|
2015-02-25 11:03:02 +00:00
|
|
|
|
|
|
|
|
2016-07-13 14:32:36 +00:00
|
|
|
;; -- dispatch
|
2015-03-04 13:00:36 +00:00
|
|
|
(def dispatch router/dispatch)
|
|
|
|
(def dispatch-sync router/dispatch-sync)
|
2015-02-25 11:03:02 +00:00
|
|
|
|
2016-07-13 14:32:36 +00:00
|
|
|
|
2016-08-03 02:53:01 +00:00
|
|
|
;; XXX move API functions up here
|
|
|
|
|
2016-07-13 14:32:36 +00:00
|
|
|
;; -- subscribe
|
2016-07-24 07:08:09 +00:00
|
|
|
(def reg-sub-raw subs/register)
|
|
|
|
(def reg-sub subs/register-pure)
|
2015-04-24 23:50:46 +00:00
|
|
|
(def subscribe subs/subscribe)
|
2015-02-25 11:03:02 +00:00
|
|
|
|
2016-07-15 01:32:44 +00:00
|
|
|
;; -- effects
|
2016-08-03 02:53:01 +00:00
|
|
|
(def reg-fx fx/register)
|
|
|
|
(def clear-fx (partial registrar/clear-handlers fx/kind))
|
2016-07-13 14:32:36 +00:00
|
|
|
|
2016-08-03 02:53:01 +00:00
|
|
|
;; XXX add a clear all handlers:
|
|
|
|
;; XXX add a push handlers for testing purposes
|
2016-07-13 14:32:36 +00:00
|
|
|
|
2016-07-15 01:32:44 +00:00
|
|
|
;; -- middleware
|
2016-08-03 02:53:01 +00:00
|
|
|
|
|
|
|
; (def fx fx/fx)
|
|
|
|
(def debug interceptor/debug)
|
|
|
|
(def path interceptor/path)
|
|
|
|
(def enrich interceptor/enrich)
|
|
|
|
(def trim-v interceptor/trim-v)
|
|
|
|
(def after interceptor/after)
|
|
|
|
(def on-changes interceptor/on-changes)
|
2015-04-24 14:06:51 +00:00
|
|
|
|
2016-07-13 14:32:36 +00:00
|
|
|
;; -- Events
|
|
|
|
|
2016-08-03 02:53:01 +00:00
|
|
|
;; usage (clear-event! :some-id)
|
|
|
|
(def clear-event! (partial registrar/clear-handlers events/kind)) ;; XXX name with !
|
2016-07-24 08:14:43 +00:00
|
|
|
|
2016-07-13 14:32:36 +00:00
|
|
|
|
2016-08-03 02:53:01 +00:00
|
|
|
(defn reg-event-db
|
|
|
|
"Register the given `id`, typically a kewyword, with the combination of
|
|
|
|
`db-handler` and an interceptor chain.
|
|
|
|
`db-handler` is a function: (db event) -> db
|
|
|
|
`interceptors` is a collection of interceptors, possibly nested (needs flattenting).
|
|
|
|
`db-handler` is wrapped in an interceptor and added to the end of the chain, so in the end
|
|
|
|
there is only a chain."
|
|
|
|
([id db-handler]
|
|
|
|
(reg-event-db id nil db-handler))
|
|
|
|
|
|
|
|
([id interceptors db-handler]
|
|
|
|
(events/register id [base interceptors (db-handler->interceptor db-handler)]))) ;; XXX add a base-interceptor
|
|
|
|
|
|
|
|
|
2016-07-24 07:08:09 +00:00
|
|
|
(defn reg-event-fx
|
2016-08-03 02:53:01 +00:00
|
|
|
([id fx-handler]
|
|
|
|
(reg-event-fx id nil fx-handler))
|
|
|
|
|
|
|
|
([id interceptors fx-handler]
|
|
|
|
(events/register id [base interceptors (fx-handler->interceptor fx-handler)]))) ;; XXX add a base-interceptor
|
|
|
|
|
|
|
|
|
2016-08-03 07:35:49 +00:00
|
|
|
(defn reg-event-ctx
|
2016-07-13 14:32:36 +00:00
|
|
|
([id handler]
|
2016-08-03 07:35:49 +00:00
|
|
|
(reg-event-ctx id nil handler))
|
2016-08-03 02:53:01 +00:00
|
|
|
|
|
|
|
([id interceptors handler]
|
2016-08-03 07:35:49 +00:00
|
|
|
(events/register id [base interceptors (ctx-handler->interceptor handler)])))
|
2016-07-13 06:28:15 +00:00
|
|
|
|
|
|
|
|
2015-04-26 21:38:37 +00:00
|
|
|
;; -- Logging -----
|
2016-06-24 13:15:00 +00:00
|
|
|
;; Internally, re-frame uses the logging functions: warn, log, error, group and groupEnd
|
2016-06-11 12:23:53 +00:00
|
|
|
;; By default, these functions map directly to the js/console implementations,
|
2016-06-24 13:15:00 +00:00
|
|
|
;; but you can override with your own fns (set or subset).
|
2016-06-03 02:58:06 +00:00
|
|
|
;; Example Usage:
|
2016-08-03 02:53:01 +00:00
|
|
|
;; (defn my-fn [& args] (post-it-somewhere (apply str args))) ;; here is my alternative
|
|
|
|
;; (re-frame.core/set-loggers! {:warn my-fn :log my-fn}) ;; override the defaults with mine
|
2016-06-24 12:09:07 +00:00
|
|
|
(def set-loggers! loggers/set-loggers!)
|
2016-07-19 04:33:52 +00:00
|
|
|
|
|
|
|
;; If you are writing an extension to re-frame, like perhaps
|
|
|
|
;; an effeects handler, you may want to use re-frame logging.
|
|
|
|
;;
|
|
|
|
;; usage: (console :error "this is bad: " a-variable " and " anotherv)
|
|
|
|
;; (console :warn "possible breach of containment wall at: " dt)
|
2016-07-18 09:37:01 +00:00
|
|
|
(def console loggers/console)
|
2015-05-02 00:46:05 +00:00
|
|
|
|
2015-03-02 12:02:56 +00:00
|
|
|
|
2015-12-07 21:19:59 +00:00
|
|
|
;; -- Event Procssing Callbacks
|
|
|
|
|
|
|
|
(defn add-post-event-callback
|
2016-08-03 02:53:01 +00:00
|
|
|
"Registers a function `f` to be called after each event is procecessed
|
2016-07-29 04:31:31 +00:00
|
|
|
`f` will be called with two arguments:
|
|
|
|
- `event`: a vector. The event just processed.
|
|
|
|
- `queue`: a PersistentQueue, possibly empty, of events yet to be processed.
|
|
|
|
|
|
|
|
This is useful in advanced cases like:
|
|
|
|
- you are implementing a complex bootstrap pipeline
|
|
|
|
- you want to create your own handling infrastructure, with perhaps multiple
|
|
|
|
handlers for the one event, etc. Hook in here.
|
|
|
|
- libraries providing 'isomorphic javascript' rendering on Nodejs or Nashorn.
|
|
|
|
|
2016-08-03 02:53:01 +00:00
|
|
|
'id' is typically a keyword. Supplied at \"add time\" so it can subsequently
|
|
|
|
be used at \"remove time\" to get rid of the right callback.
|
2015-12-07 21:19:59 +00:00
|
|
|
"
|
2016-07-28 04:50:39 +00:00
|
|
|
([f]
|
2016-08-03 02:53:01 +00:00
|
|
|
(add-post-event-callback f f)) ;; use f as its own identifier
|
2016-07-28 04:50:39 +00:00
|
|
|
([id f]
|
|
|
|
(router/add-post-event-callback re-frame.router/event-queue id f)))
|
2015-12-07 21:19:59 +00:00
|
|
|
|
2016-06-03 02:49:49 +00:00
|
|
|
|
|
|
|
(defn remove-post-event-callback
|
2016-07-28 04:50:39 +00:00
|
|
|
[id]
|
|
|
|
(router/remove-post-event-callback re-frame.router/event-queue id))
|
2016-07-24 08:14:43 +00:00
|
|
|
|
|
|
|
|
2016-07-28 04:50:39 +00:00
|
|
|
;; -- Deprecation Messages
|
|
|
|
;; Assisting the v0.0.7 -> v0.0.8 tranistion.
|
2016-07-24 08:14:43 +00:00
|
|
|
(defn register-handler
|
|
|
|
[& args]
|
2016-08-03 08:09:53 +00:00
|
|
|
(console :warn "re-frame: \"register-handler\" has been renamed \"reg-event-db\" (look for registration of " (str (first args)) ")")
|
2016-08-03 02:53:01 +00:00
|
|
|
(apply reg-event-db args))
|
2016-07-24 08:14:43 +00:00
|
|
|
|
2016-08-03 07:35:17 +00:00
|
|
|
(defn reg-event
|
|
|
|
[& args]
|
2016-08-03 08:09:53 +00:00
|
|
|
(console :warn "re-frame: \"reg-event\" has been renamed \"reg-event-db\" (look for registration of " (str (first args)) ")")
|
2016-08-03 07:35:17 +00:00
|
|
|
(apply reg-event-db args))
|
|
|
|
|
2016-07-24 08:14:43 +00:00
|
|
|
(defn register-sub
|
|
|
|
[& args]
|
2016-08-03 08:09:53 +00:00
|
|
|
(console :warm "re-frame: \"register-sub\" is deprecated. Use \"reg-sub-raw\" (look for registration of " (str (first args)) ")")
|
2016-07-28 04:01:03 +00:00
|
|
|
(apply reg-sub-raw args))
|
2016-07-24 08:14:43 +00:00
|
|
|
|