penpot/frontend/src/uxbox/main/ui/messages.cljs
2020-04-08 16:40:10 +02:00

57 lines
1.5 KiB
Clojure

(ns uxbox.main.ui.messages
(:require
[lentes.core :as l]
[rumext.alpha :as mf]
[uxbox.builtins.icons :as i]
[uxbox.main.data.messages :as dm]
[uxbox.main.store :as st]
[uxbox.util.dom :as dom]
[uxbox.util.timers :as ts]
[uxbox.util.i18n :as i18n :refer [t]]
[uxbox.util.data :refer [classnames]]))
;; --- Main Component (entry point)
(declare notification)
(def ^:private message-iref
(-> (l/key :message)
(l/derive st/state)))
(mf/defc messages
[]
(let [message (mf/deref message-iref)
;; message {:type :error
;; :content "Hello world!"}
]
(when message
[:& notification {:type (:type message)
:status (:status message)
:content (:content message)}])))
(mf/defc messages-widget
[]
(let [message (mf/deref message-iref)
message {:type :error
:content "Hello world!"}]
[:& notification {:type (:type message)
:status (:status message)
:content (:content message)}]))
;; --- Notification Component
(mf/defc notification
[{:keys [type status content] :as props}]
(let [on-close #(st/emit! dm/hide)
klass (classnames
:error (= type :error)
:info (= type :info)
:hide-message (= status :hide)
:success (= type :success)
:quick false)]
[:div.message {:class klass}
[:a.close-button {:on-click on-close} i/close]
[:div.message-content
[:span content]]]))