diff --git a/src/cljs/bulma/modal/events.cljs b/src/cljs/bulma/modal/events.cljs index b2d75d9..15cc644 100644 --- a/src/cljs/bulma/modal/events.cljs +++ b/src/cljs/bulma/modal/events.cljs @@ -10,3 +10,11 @@ (update db :bulma dissoc :visible-modal)) (rf/reg-event-db ::hide hide-modal) + +(defn toggle-modal [db [_ modal-id]] + (let [visible-modal (get-in db [:bulma :visible-modal])] + (if (= visible-modal modal-id) + (hide-modal db [::hide]) + (show-modal db [::show modal-id])))) + +(rf/reg-event-db ::toggle toggle-modal) diff --git a/test/cljs/bulma/modal_test.cljs b/test/cljs/bulma/modal_test.cljs index 0a85127..6079a99 100644 --- a/test/cljs/bulma/modal_test.cljs +++ b/test/cljs/bulma/modal_test.cljs @@ -23,6 +23,14 @@ (ev/hide-modal [::ev/hide]))] (is (not (some? (sub/visible-modal new-db [::sub/visible-modal])))))) (testing "Should tell us about the visibility of a modal with a predicate" - (is (-> (ev/show-modal {} [::ev/show :getting-repetitive]) - (sub/visible-modal [::sub/visible-modal]) - (sub/visible? [::sub/visible? :getting-repetitive]))))) + (is (true? (-> (ev/show-modal {} [::ev/show :getting-repetitive]) + (sub/visible-modal [::sub/visible-modal]) + (sub/visible? [::sub/visible? :getting-repetitive]))))) + (testing "Modal toggling" + (is (true? (-> (ev/toggle-modal {} [::ev/toggle :some-generic-modal]) + (sub/visible-modal [::sub/visible-modal]) + (sub/visible? [::sub/visible? :some-generic-modal])))) + (is (not (true? (-> (ev/toggle-modal {} [::ev/toggle :some-generic-modal]) + (ev/toggle-modal [::ev/toggle :some-generic-modal]) + (sub/visible-modal [::sub/visible-modal]) + (sub/visible? [::sub/visible? :some-generic-modal])))))))