From 6db1b1c36177cecb13cf754592eed2af72a99cec Mon Sep 17 00:00:00 2001 From: Miguel de Benito Delgado Date: Tue, 17 Jun 2025 11:19:37 +0200 Subject: [PATCH] Add ability to pass options to addEventListener in from-event --- src/beicon/v2/core.cljs | 10 +++++++--- test/beicon/tests/v2_test.cljs | 12 ++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/beicon/v2/core.cljs b/src/beicon/v2/core.cljs index 2c84f4f..23ca622 100644 --- a/src/beicon/v2/core.cljs +++ b/src/beicon/v2/core.cljs @@ -129,9 +129,13 @@ (fn [] (remove-watch atm key))))))) (defn from-event - "Creates an Observable by attaching an event listener to an event target" - [et ev] - (rx/fromEvent et ev)) + "Creates an Observable by attaching an event listener to an event target + Args: + et: the event target (e.g., a DOM element or window) + ev: the event type (e.g., 'click', 'mousemove') + opts: optional options for the event listener (e.g., {passive: true})" + ([et ev & [opts]] + (rx/fromEvent et ev (clj->js (or opts {}))))) (def ^function timer "Returns an observable sequence that produces a value after diff --git a/test/beicon/tests/v2_test.cljs b/test/beicon/tests/v2_test.cljs index d639f1f..00eb8ab 100644 --- a/test/beicon/tests/v2_test.cljs +++ b/test/beicon/tests/v2_test.cljs @@ -89,6 +89,18 @@ (t/is (= % ["once"])) (done))))))) +(t/deftest observable-from-event-args + (t/async done + (let [target #js {:addEventListener (fn [type listener opts] + (t/is (= type "poked")) + (listener (.-passive opts))) + :removeEventListener #()} + s (rx/from-event target "poked" {:passive false})] + (t/is (rx/observable? s)) + (rx/end! (drain! s #(do + (t/is (= % [false])) + (done))))))) + (t/deftest observable-with-timeout (t/async done (let [s (->> (rx/timer 200)