Skip to content

Commit 1af9c39

Browse files
kennethkalmersuperstructor
authored andcommitted
proof-of-concept: :on-request handler
If you need a handle on the raw goog.net.XhrIo object request object, use the optional `:on-request` handler. It will be called with the request object as the last value.
1 parent 93efa5f commit 1af9c39

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

src/day8/re_frame/http_fx.cljs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@
1414
;; :handler - not supported, see :on-success and :on-failure
1515
;; :on-success - event vector dispatched with result
1616
;; :on-failure - event vector dispatched with result
17+
;; :on-request - event vector dispatched with raw xhrio object
1718
;;
1819
;; NOTE: if you need tokens or other values for your handlers,
19-
;; provide them in the on-success and on-failure event e.g.
20+
;; provide them in the on-success, on-failure & on-request events e.g.
2021
;; [:success-event "my-token"] your handler will get event-v
2122
;; [:success-event "my-token" result]
2223

@@ -51,7 +52,11 @@
5152
#(dispatch (conj on-success %))
5253
#(dispatch (conj on-failure %))
5354
api))
54-
(dissoc :on-success :on-failure))))
55+
(dissoc :on-success :on-failure :on-request))))
56+
57+
(defn dispatch-on-request [request xhrio]
58+
(if-let [on-request (:on-request request)]
59+
(dispatch (conj on-request xhrio))))
5560

5661
;; Specs commented out until ClojureScript has a stable release of spec.
5762
;
@@ -66,8 +71,9 @@
6671
;
6772
;(s/def ::on-success vector?)
6873
;(s/def ::on-failure vector?)
74+
;(s/def ::on-request vector?)
6975
;
70-
;(s/def ::request-map (s/and (s/keys :req-un [::method ::uri ::response-format ::on-success ::on-failure]
76+
;(s/def ::request-map (s/and (s/keys :req-un [::method ::uri ::response-format ::on-success ::on-failure ::on-request]
7177
; :opt-un [::format ::timeout ::params ::headers ::with-credentials])
7278
; (fn [m] (if (contains? m :params)
7379
; (contains? m :format)
@@ -85,6 +91,7 @@
8591
#_ #_ seq-request-maps (if (= :seq-request-maps conform-val) v [v])
8692
seq-request-maps (if (sequential? request) request [request])]
8793
(doseq [request seq-request-maps]
88-
(-> request request->xhrio-options ajax/ajax-request))))
94+
(let [xhrio (-> request request->xhrio-options ajax/ajax-request)]
95+
(dispatch-on-request request xhrio)))))
8996

9097
(reg-fx :http-xhrio http-effect)

test/day8/re_frame/http_fx_test.cljs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,15 @@
7272
(done)
7373
db))
7474

75+
;; setup request handler
76+
(re-frame/reg-event-db
77+
::on-http-request
78+
(fn [db [_ id req]]
79+
(is (= (type req) goog.net.XhrIo) "expected: request passed through")
80+
(is (= id "my-id") "expected: id passed through")
81+
(done)
82+
db))
83+
7584
(re-frame/reg-event-fx
7685
::http-test
7786
(fn [_world [_ val]]
@@ -89,6 +98,7 @@
8998
:uri "https://api.github.com/rate_limit"
9099
:timeout 5000
91100
:response-format (ajax/json-response-format {:keywords? true})
101+
:on-request [::on-http-request "my-id"]
92102
:on-success [::good-http-result done "test-token1"]
93103
:on-failure [::bad-http-result done "test-token1"]}])))
94104

0 commit comments

Comments
 (0)