From 08e02800d294ce79a929f5c9ae703f2e5ad2141c Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Thu, 24 Dec 2015 19:36:15 +0200 Subject: [PATCH] Add the ability to pass parameters to lightboxes. --- frontend/uxbox/ui/lightbox.cljs | 40 +++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/frontend/uxbox/ui/lightbox.cljs b/frontend/uxbox/ui/lightbox.cljs index 926c2401f..1f2aa457f 100644 --- a/frontend/uxbox/ui/lightbox.cljs +++ b/frontend/uxbox/ui/lightbox.cljs @@ -12,9 +12,11 @@ (defonce +current+ (atom nil)) -(defn set! - [kind] - (reset! +current+ kind)) +(defn open! + ([kind] + (open! kind nil)) + ([kind params] + (reset! +current+ (merge {:name kind} params)))) (defn close! [] @@ -24,7 +26,7 @@ ;; UI ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(defmulti render-lightbox identity) +(defmulti render-lightbox :name) (defmethod render-lightbox :default [_] nil) (defn- on-esc-clicked @@ -33,30 +35,34 @@ (close!))) (defn- lightbox-will-mount - [state] - (events/listen js/document - EventType.KEYDOWN - on-esc-clicked) - state) + [own] + (let [key (events/listen js/document + EventType.KEYDOWN + on-esc-clicked)] + (assoc own ::eventkey key))) (defn- lightbox-will-umount - [state] - (events/unlisten js/document - EventType.KEYDOWN - on-esc-clicked) - state) + [own] + (let [key (::eventkey own)] + (events/unlistenByKey key) + (dissoc own ::eventkey))) + +(defn- lightbox-transfer-state + [old-own own] + (assoc own ::eventkey (::eventkey old-own))) (defn- lightbox-render [own] - (let [name (rum/react +current+)] + (let [params (rum/react +current+)] (html - [:div.lightbox {:class (when (nil? name) "hide")} - (render-lightbox name)]))) + [:div.lightbox {:class (when (nil? params) "hide")} + (render-lightbox params)]))) (def ^:static lightbox (util/component {:name "lightbox" :render lightbox-render + :transfer-state lightbox-transfer-state :will-mount lightbox-will-mount :will-unmount lightbox-will-umount :mixins [rum/reactive]}))