mirror of
https://github.com/penpot/penpot.git
synced 2025-05-12 06:26:37 +02:00
Minor structure refactor.
Make forms and messages modules independent of store location (making them plugables).
This commit is contained in:
parent
8c28a8c0a7
commit
08b0a096eb
87 changed files with 573 additions and 505 deletions
|
@ -1,91 +1,16 @@
|
|||
(ns uxbox.main.ui.messages
|
||||
(:require [sablono.core :as html :refer-macros [html]]
|
||||
[rum.core :as rum]
|
||||
[lentes.core :as l]
|
||||
[uxbox.store :as st]
|
||||
[uxbox.main.data.messages :as udm]
|
||||
[uxbox.main.ui.icons :as i]
|
||||
[uxbox.util.timers :as ts]
|
||||
[uxbox.util.mixins :as mx :include-macros true]
|
||||
[uxbox.util.data :refer (classnames)]
|
||||
[uxbox.util.dom :as dom]))
|
||||
|
||||
;; --- Lenses
|
||||
(:require [lentes.core :as l]
|
||||
[uxbox.main.store :as st]
|
||||
[uxbox.util.messages :as uum]
|
||||
[uxbox.util.mixins :as mx :include-macros true]))
|
||||
|
||||
(def ^:private message-ref
|
||||
(-> (l/key :message)
|
||||
(l/derive st/state)))
|
||||
|
||||
;; --- Notification Component
|
||||
|
||||
(defn notification-render
|
||||
[own {:keys [type] :as message}]
|
||||
(let [classes (classnames :error (= type :error)
|
||||
:info (= type :info)
|
||||
:hide-message (= (:state message) :hide)
|
||||
:quick true)
|
||||
close #(udm/close!)]
|
||||
(html
|
||||
[:div.message {:class classes}
|
||||
[:div.message-body
|
||||
[:span.close {:on-click close}
|
||||
i/close]
|
||||
[:span (:content message)]]])))
|
||||
|
||||
(def ^:private notification-box
|
||||
(mx/component
|
||||
{:render notification-render
|
||||
:name "notification"
|
||||
:mixins [mx/static]}))
|
||||
|
||||
;; --- Dialog Component
|
||||
|
||||
(defn dialog-render
|
||||
[own {:keys [on-accept on-cancel] :as message}]
|
||||
(let [classes (classnames :info true
|
||||
:hide-message (= (:state message) :hide))]
|
||||
(letfn [(accept [event]
|
||||
(dom/prevent-default event)
|
||||
(on-accept)
|
||||
(ts/schedule 0 udm/close!))
|
||||
|
||||
(cancel [event]
|
||||
(dom/prevent-default event)
|
||||
(when on-cancel
|
||||
(on-cancel))
|
||||
(ts/schedule 0 udm/close!))]
|
||||
(html
|
||||
[:div.message {:class classes}
|
||||
[:div.message-body
|
||||
[:span.close {:on-click cancel} i/close]
|
||||
[:span (:content message)]
|
||||
[:div.message-action
|
||||
[:a.btn-transparent.btn-small
|
||||
{:on-click accept}
|
||||
"Accept"]
|
||||
[:a.btn-transparent.btn-small
|
||||
{:on-click cancel}
|
||||
"Cancel"]]]]))))
|
||||
|
||||
(def ^:private dialog-box
|
||||
(mx/component
|
||||
{:render dialog-render
|
||||
:name "dialog"
|
||||
:mixins [mx/static]}))
|
||||
|
||||
;; --- Main Component (entry point)
|
||||
|
||||
(defn messages-render
|
||||
[own]
|
||||
(let [message (mx/react message-ref)]
|
||||
(case (:type message)
|
||||
:error (notification-box message)
|
||||
:info (notification-box message)
|
||||
:dialog (dialog-box message)
|
||||
nil)))
|
||||
|
||||
(def messages
|
||||
(mx/component
|
||||
{:render messages-render
|
||||
:name "messages"
|
||||
:mixins [mx/static mx/reactive]}))
|
||||
(mx/defc messages-widget
|
||||
{:mixins [mx/static mx/reactive]}
|
||||
[]
|
||||
(let [message (mx/react message-ref)
|
||||
on-close #(st/emit! (uum/hide))]
|
||||
(uum/messages-widget (assoc message :on-close on-close))))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue