Files
integreat/src/cljs/auto_ap/views/components/modal.cljs
2018-07-30 09:23:56 -07:00

56 lines
2.5 KiB
Clojure

(ns auto-ap.views.components.modal
(:require [re-frame.core :as re-frame]
[reagent.core :as r]
[auto-ap.events :as events]
[auto-ap.subs :as subs]
[auto-ap.views.utils :refer [with-keys]]))
(defn modal [{:keys [title foot hide-event]} & body]
[:div.modal.is-active
[:div.modal-background {:on-click (fn [] (re-frame/dispatch hide-event ))}]
[:div.modal-card
[:header.modal-card-head
[:p.modal-card-title
title]
[:button.delete {:on-click (fn [] (re-frame/dispatch hide-event))}]]
(into [:section.modal-card-body]
(r/children (r/current-component)))
(when foot
[:footer.modal-card-foot
foot])]])
(defn action-modal [{:keys [title action-text id save-event can-submit?] :or {can-submit? true}} & rest]
(let [{:keys [visible? saving? error-message]} @(re-frame/subscribe [::subs/modal-state id])]
(when visible?
(-> [modal {:title [:span title
]
:foot [:input.button.is-primary {:type "submit"
:tab-index "0"
:form id
:disabled (cond saving?
"disabled"
(not can-submit?)
"disabled"
:else
"")
:class (when saving?
"is-loading")
:value action-text}
]
:id id
:hide-event [::events/modal-status id {:visible? false}]}
(into [:form {:id id
:on-submit (fn [e]
(.preventDefault e)
(re-frame/dispatch [::events/modal-status id {:saving? true :error-message nil}])
(re-frame/dispatch save-event))}
(when error-message
[:div.notification.is-warning error-message])]
(r/children (r/current-component)) )]
(into [(when saving? [:div.is-overlay {:style {"backgroundColor" "rgba(150,150,150, 0.5)"}}])])))))