Skip to content

Commit 52fb9c4

Browse files
committed
Add unpack interceptor
See #644
1 parent 9638bbf commit 52fb9c4

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

src/re_frame/core.cljc

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
[re-frame.registrar :as registrar]
1313
[re-frame.interceptor :as interceptor]
1414
[re-frame.std-interceptors :as std-interceptors :refer [db-handler->interceptor
15-
fx-handler->interceptor
16-
ctx-handler->interceptor]]
15+
fx-handler->interceptor
16+
ctx-handler->interceptor]]
1717
[re-frame.utils :as utils]
1818
[clojure.set :as set]))
1919

@@ -674,6 +674,21 @@
674674
[f]
675675
(std-interceptors/enrich f))
676676

677+
(def ^{:api-docs/heading "Interceptors"} unpack
678+
"An interceptor which provides the second element of the event vector to the
679+
event handler as the event, intended to be used with the second element as a
680+
map.
681+
682+
Your event handlers will look like this:
683+
684+
(reg-event-fx
685+
:event-id
686+
[... unpack ...] ;; <-- added to the interceptors
687+
(fn [{:keys [db]} {:keys [x y z]}] ;; <-- instead of [_ {:keys [x y z]}]
688+
...)
689+
"
690+
std-interceptors/unpack)
691+
677692
(def ^{:api-docs/heading "Interceptors"} trim-v
678693
"An interceptor which removes the first element of the event vector,
679694
before it is supplied to the event handler, allowing you to write more

src/re_frame/std_interceptors.cljc

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,31 @@
3636
(console :log "No app-db changes resulted from:" event))))
3737
context))))
3838

39+
(def unpack
40+
(->interceptor
41+
:id :unpack
42+
:before (fn unpack-before
43+
[context]
44+
(let [[event-id payload :as event] (get-coeffect context :event)]
45+
(-> context
46+
(assoc-coeffect :event (with-meta payload {:event-id event-id}))
47+
(assoc-coeffect ::packed-event event))))
48+
:after (fn unpack-after
49+
[context]
50+
(-> context
51+
(utils/dissoc-in [:coeffects ::packed-event])
52+
(assoc-coeffect :event (get-coeffect context ::packed-event))))))
53+
3954

4055
(def trim-v
4156
(->interceptor
4257
:id :trim-v
43-
:before (fn trimv-before
58+
:before (fn trim-v-before
4459
[context]
4560
(-> context
4661
(update-coeffect :event subvec 1)
4762
(assoc-coeffect ::untrimmed-event (get-coeffect context :event))))
48-
:after (fn trimv-after
63+
:after (fn trim-v-after
4964
[context]
5065
(-> context
5166
(utils/dissoc-in [:coeffects ::untrimmed-event])

0 commit comments

Comments
 (0)