52 lines
2.4 KiB
Clojure
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)"}}])])))))
|