Skip to content

Commit 5fa28a2

Browse files
committed
Fix reg-global-interceptor code reloading
Fixes #655
1 parent e713705 commit 5fa28a2

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

src/re_frame/settings.cljc

+20-4
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,31 @@
1717
[]
1818
(:loaded? @store))
1919

20+
(defn -replace-global-interceptor
21+
[global-interceptors interceptor]
22+
(reduce
23+
(fn [ret existing-interceptor]
24+
(if (= (:id interceptor)
25+
(:id existing-interceptor))
26+
(do
27+
(when interop/debug-enabled?
28+
(when (not (loaded?))
29+
(console :warn "re-frame: replacing duplicate global interceptor id: " (:id interceptor))))
30+
(conj ret interceptor))
31+
(conj ret existing-interceptor)))
32+
interop/empty-queue
33+
global-interceptors))
34+
2035
(defn reg-global-interceptor
2136
[{:keys [id] :as interceptor}]
2237
(swap! store update :global-interceptors
2338
(fn [global-interceptors]
2439
(let [ids (map :id global-interceptors)]
25-
(when interop/debug-enabled?
26-
(when (and (not (loaded?)) (some #{id} ids))
27-
(console :warn "re-frame: duplicate global interceptor id: " id)))
28-
(conj global-interceptors interceptor)))))
40+
(if (some #{id} ids)
41+
;; If the id already exists we replace it in-place to maintain the ordering of
42+
;; global interceptors esp during hot-code reloading in development.
43+
(-replace-global-interceptor global-interceptors interceptor)
44+
(conj global-interceptors interceptor))))))
2945

3046
(defn get-global-interceptors
3147
[]

0 commit comments

Comments
 (0)