소스 검색

enhance(capacitor): add alert

charlie 5 달 전
부모
커밋
1a203596e9
2개의 변경된 파일29개의 추가작업 그리고 29개의 파일을 삭제
  1. 0 17
      src/main/capacitor/app.cljs
  2. 29 12
      src/main/capacitor/components/ui.cljs

+ 0 - 17
src/main/capacitor/app.cljs

@@ -42,23 +42,6 @@
           (ionic/tabler-icon "calendar")
           [:span.pl-1 (:block/title journal)]]))]))
 
-(rum/defc journals-calendar-modal
-  [{:keys [close!]}]
-  (ui/simple-modal
-    {:close! close!}
-    (fn []
-      (ionic/ion-datetime
-        {:presentation "date"
-         :onIonChange (fn [^js e]
-                        (let [val (.-value (.-detail e))]
-                          (let [page-name (frontend-date/journal-name (gdate/Date. (js/Date. val)))
-                                nav-to-journal! #(pages-util/nav-to-block! % {:reload-pages! (fn [] ())})]
-                            (if-let [journal (handler/local-page page-name)]
-                              (nav-to-journal! journal)
-                              (-> (handler/<create-page! page-name)
-                                (p/then #(nav-to-journal! (handler/local-page page-name)))))
-                            (close!))))}))))
-
 (rum/defc create-page-input
   [{:keys [close! reload-pages!]}]
   (ionic/ion-alert

+ 29 - 12
src/main/capacitor/components/ui.cljs

@@ -1,5 +1,6 @@
 (ns capacitor.components.ui
-  (:require [frontend.handler.notification :as notification]
+  (:require [cljs-bean.core :as bean]
+            [frontend.handler.notification :as notification]
             [frontend.rum :as r]
             [frontend.state :as fstate]
             [medley.core :as medley]
@@ -106,16 +107,32 @@
 (defonce ^:private *id (atom 0))
 (defonce ^:private gen-id #(reset! *id (inc @*id)))
 
-(rum/defc simple-modal
-  [{:keys [close! as-page? modal-props]} content]
-  (let [{:keys [class]} modal-props]
-    (ionic/ion-modal
-      (merge modal-props
-        {:is-open true
-         :onWillDismiss (fn [] (close!))
-         :class (str class (when (not (true? as-page?)) " ion-datetime-button-overlay"))})
-      (if (fn? content)
-        (content) content))))
+(rum/defc x-modal
+  [{:keys [close! as-page? type on-action title buttons inputs modal-props]} content]
+  (let [{:keys [class header]} modal-props]
+    (case type
+      :alert
+      (ionic/ion-alert
+        (merge modal-props
+          {:is-open true
+           :header (or title header)
+           :message content
+           :backdropDismiss false
+           :onWillDismiss (fn [^js e]
+                            (when on-action
+                              (on-action (bean/->clj (.-detail e))))
+                            (close!))
+           :buttons (bean/->js (or buttons (:buttons modal-props)))
+           :inputs (bean/->js (or inputs (:inputs modal-props) []))}))
+
+      ;; default
+      (ionic/ion-modal
+        (merge modal-props
+          {:is-open true
+           :onWillDismiss (fn [] (close!))
+           :class (str class (when (not (true? as-page?)) " ion-datetime-button-overlay"))})
+        (if (fn? content)
+          (content) content)))))
 
 (defn get-modal
   ([] (some-> @*modals last))
@@ -155,5 +172,5 @@
      (for [{:keys [id content] :as props} @*modals
            :let [close! #(close-modal! id)
                  props' (assoc props :close! close!)]]
-       (simple-modal props'
+       (x-modal props'
          (if (fn? content) (content props') content)))]))