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]}))