mirror of
https://github.com/penpot/penpot.git
synced 2025-06-13 03:41:38 +02:00
97 lines
3.7 KiB
Clojure
97 lines
3.7 KiB
Clojure
;; This Source Code Form is subject to the terms of the Mozilla Public
|
|
;; License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
;;
|
|
;; Copyright (c) KALEIDOS INC
|
|
|
|
(ns app.main.ui.messages
|
|
(:require-macros [app.main.style :as stl])
|
|
(:require
|
|
[app.common.data :as d]
|
|
[app.common.data.macros :as dm]
|
|
[app.common.uuid :as uuid]
|
|
[app.main.data.messages :as dmsg]
|
|
[app.main.refs :as refs]
|
|
[app.main.store :as st]
|
|
[app.main.ui.components.link-button :as lb]
|
|
[app.main.ui.icons :as i]
|
|
[rumext.v2 :as mf]))
|
|
|
|
(mf/defc banner
|
|
[{:keys [type position status controls content links actions on-close data-test role] :as props}]
|
|
[:div {:class (stl/css-case :banner true
|
|
:warning (= type :warning)
|
|
:error (= type :error)
|
|
:success (= type :success)
|
|
:info (= type :info)
|
|
:fixed (= position :fixed)
|
|
:floating (= position :floating)
|
|
:inline (= position :inline)
|
|
:hide (= status :hide))}
|
|
[:div {:class (stl/css :wrapper)}
|
|
[:div {:class (stl/css :icon)}
|
|
(case type
|
|
:warning i/msg-warning-refactor
|
|
:error i/msg-error-refactor
|
|
:success i/msg-success-refactor
|
|
:info i/msg-neutral-refactor
|
|
i/msg-error-refactor)]
|
|
|
|
[:div {:class (stl/css-case :content true
|
|
:inline-actions (= controls :inline-actions)
|
|
:bottom-actions (= controls :bottom-actions))
|
|
:data-test data-test
|
|
:role role}
|
|
[:span {:class (stl/css :text)}
|
|
content
|
|
(for [[index link] (d/enumerate links)]
|
|
[:* {:key (dm/str "link-" index)}
|
|
" " [:& lb/link-button {:class (stl/css :link)
|
|
:on-click (:callback link)
|
|
:value (:label link)}]])]
|
|
|
|
(when (or (= controls :bottom-actions) (= controls :inline-actions))
|
|
|
|
[:div {:class (stl/css :actions)}
|
|
(for [action actions]
|
|
[:button {:key (uuid/next)
|
|
:class (stl/css-case :action-btn true
|
|
:primary (= :primary (:type action))
|
|
:secondary (= :secondary (:type action))
|
|
:danger (= :danger (:type action)))
|
|
:on-click (:callback action)}
|
|
(:label action)])])]
|
|
|
|
(when (= controls :close)
|
|
[:button {:class (stl/css :btn-close)
|
|
:on-click on-close} i/close-refactor])]])
|
|
|
|
(mf/defc notifications
|
|
[]
|
|
(let [message (mf/deref refs/message)
|
|
on-close #(st/emit! dmsg/hide)]
|
|
(when message
|
|
[:& banner (assoc message
|
|
:position (or (:position message) :fixed)
|
|
:controls (if (some? (:controls message))
|
|
(:controls message)
|
|
:close)
|
|
:on-close on-close)])))
|
|
|
|
(mf/defc inline-banner
|
|
{::mf/wrap [mf/memo]}
|
|
[{:keys [type content on-close actions data-test role] :as props}]
|
|
[:& banner {:type type
|
|
:position :inline
|
|
:status :visible
|
|
:controls (if (some? on-close)
|
|
:close
|
|
(if (some? actions)
|
|
:bottom-actions
|
|
:none))
|
|
:content content
|
|
:on-close on-close
|
|
:actions actions
|
|
:data-test data-test
|
|
:role role}])
|
|
|