From 30e029aad0f13c33a2684b257bdea8d469ceb49e Mon Sep 17 00:00:00 2001 From: Kimo Knowles Date: Wed, 26 Jun 2024 14:28:16 +0200 Subject: [PATCH] Calculate flow interceptors earlier than user interceptors --- docs/releases/2024.md | 12 ++++++++++++ src/re_frame/alpha.cljc | 12 ++++++------ src/re_frame/flow/alpha.cljc | 12 +++++++----- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/docs/releases/2024.md b/docs/releases/2024.md index 7005d9e4..c00ac780 100644 --- a/docs/releases/2024.md +++ b/docs/releases/2024.md @@ -6,6 +6,18 @@ > The re-frame [Clojars page](https://clojars.org/re-frame/) contains dependency coordinates for Maven/deps/Lein. +## 1.4.4 (2024-06-24) + +#### Changed + + - Changed flows to calculate the new app-db earlier in the chain. + - Benefit: user-defined interceptors can access post-flow app-db value. + - Drawback: they can't access the value of app-db directly resulting from the event handler. + - Drawback: they can't access flow-related effects like `:reg-flow`. + + - Added a :re-frame/pre-flow-db key to the context + - This way, user-defined interceptors can still access the app-db value resulting directly from the event handler. + ## 1.4.3 (2024-01-25) #### Fixed diff --git a/src/re_frame/alpha.cljc b/src/re_frame/alpha.cljc index b16a1168..23416645 100644 --- a/src/re_frame/alpha.cljc +++ b/src/re_frame/alpha.cljc @@ -423,10 +423,10 @@ ([id interceptors handler] (events/register id [cofx/inject-db fx/do-fx - flow/interceptor - flow/do-fx std-interceptors/inject-global-interceptors interceptors + flow/interceptor + flow/do-fx (db-handler->interceptor handler)]))) (defn reg-event-fx @@ -463,10 +463,10 @@ ([id interceptors handler] (events/register id [cofx/inject-db fx/do-fx - flow/interceptor - flow/do-fx std-interceptors/inject-global-interceptors interceptors + flow/interceptor + flow/do-fx (fx-handler->interceptor handler)]))) (defn reg-event-ctx @@ -500,10 +500,10 @@ ([id interceptors handler] (events/register id [cofx/inject-db fx/do-fx - flow/interceptor - flow/do-fx std-interceptors/inject-global-interceptors interceptors + flow/interceptor + flow/do-fx (ctx-handler->interceptor handler)]))) (defn clear-event diff --git a/src/re_frame/flow/alpha.cljc b/src/re_frame/flow/alpha.cljc index 2f704fdd..dffdf995 100644 --- a/src/re_frame/flow/alpha.cljc +++ b/src/re_frame/flow/alpha.cljc @@ -165,8 +165,10 @@ (def interceptor (->interceptor - {:id :flow - :after (fn [ctx] - (let [all-flows (with-cleared @flows)] - (swap! flows vary-meta dissoc ::cleared) - (reduce run ctx ((memoize topsort) all-flows))))})) + {:id :flow + :after (comp (fn [ctx] + (let [all-flows (with-cleared @flows)] + (swap! flows vary-meta dissoc ::cleared) + (reduce run ctx ((memoize topsort) all-flows)))) + (fn [{{:keys [db]} :effects :as ctx}] + (assoc ctx :re-frame/pre-flow-db db)))}))