Files
integreat/src/cljs/auto_ap/views/components/modal.cljs
2018-07-06 18:48:57 -07:00

52 lines
2.4 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?]} @(re-frame/subscribe [::subs/modal-state id])]
(when visible?
(-> [modal {:title 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}])
(re-frame/dispatch save-event))}]
(r/children (r/current-component)) )]
(into [(when saving? [:div.is-overlay {:style {"backgroundColor" "rgba(150,150,150, 0.5)"}}])])))))