0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-02-24 07:46:13 -05:00
penpot/frontend/src/uxbox/main/ui/lightbox.cljs

64 lines
1.6 KiB
Text
Raw Normal View History

(ns uxbox.main.ui.lightbox
2019-08-02 20:18:05 +02:00
"DEPRECATED: should be replaced by uxbox.main.ui.modal"
(:require
[goog.events :as events]
[lentes.core :as l]
[rumext.core :as mx]
[rumext.alpha :as mf]
[uxbox.main.data.lightbox :as udl]
[uxbox.main.store :as st]
[uxbox.main.ui.keyboard :as k]
[uxbox.util.data :refer [classnames]]
[uxbox.util.dom :as dom])
2015-12-14 09:50:19 +02:00
(:import goog.events.EventType))
;; --- Refs
2015-12-14 09:50:19 +02:00
2016-07-10 11:57:45 +03:00
(def ^:private lightbox-ref
(-> (l/key :lightbox)
(l/derive st/state)))
2015-12-14 09:50:19 +02:00
;; --- Lightbox (Component)
2015-12-14 09:50:19 +02:00
(defmulti render-lightbox :name)
2015-12-14 09:50:19 +02:00
(defmethod render-lightbox :default [_] nil)
(defn- on-esc-clicked
[event]
(when (k/esc? event)
(udl/close!)
(dom/stop-propagation event)))
(defn- on-out-clicked
[own event]
(let [parent (mf/ref-node (::parent own))
current (dom/get-target event)]
(when (dom/equals? parent current)
(st/emit! (udl/hide-lightbox)))))
(mf/def lightbox
:mixins #{mf/reactive}
:init
(fn [own props]
(let [key (events/listen js/document EventType.KEYDOWN on-esc-clicked)]
(assoc own
::key-listener key
::parent (mf/create-ref))))
:will-unmount
(fn [own]
(events/unlistenByKey (::key-listener own))
(dissoc own ::key-listener))
:render
(fn [own props]
(let [data (mf/react lightbox-ref)
classes (classnames
:hide (nil? data)
:transparent (:transparent? data))]
[:div.lightbox {:class classes
:ref (::parent own)
:on-click (partial on-out-clicked own)}
(render-lightbox data)])))