Browse Source

enhance(capacitor): journals calendar

charlie 6 months ago
parent
commit
56fbdec8a2
2 changed files with 37 additions and 4 deletions
  1. 34 4
      src/main/capacitor/app.cljs
  2. 3 0
      src/main/capacitor/handler.cljs

+ 34 - 4
src/main/capacitor/app.cljs

@@ -14,6 +14,8 @@
             [frontend.db-mixins :as db-mixins]
             [frontend.state :as fstate]
             [frontend.db.utils :as db-util]
+            [frontend.date :as frontend-date]
+            [goog.date :as gdate]
             [logseq.db :as ldb]
             [capacitor.pages.settings :as settings]))
 
@@ -38,6 +40,24 @@
           (ionic/tabler-icon "calendar")
           [:span.pl-1 (:block/title journal)]]))]))
 
+(rum/defc journals-calendar-modal
+  [{:keys [close!]}]
+  (ionic/ion-modal
+    {:is-open true
+     :mode "ios"
+     :onWillDismiss (fn [] (close!))
+     :class "journals-calendar-modal ion-datetime-button-overlay"}
+    (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
@@ -65,6 +85,7 @@
   (let [[all-pages set-all-pages!] (rum/use-state [])
         [reload set-reload!] (rum/use-state 0)
         [page-input-open? set-page-input-open?] (rum/use-state false)
+        [journal-calendar-open? set-journal-calendar-open?] (rum/use-state false)
         [filtered-pages set-filtered-pages!] (rum/use-state [])]
 
     (rum/use-effect!
@@ -91,9 +112,17 @@
        [:h1.text-3xl.font-mono.font-bold.py-2 "Current graph"]
        [:h2.py-1.text-lg (fstate/get-current-repo)]
 
-       [:h1.text-3xl.font-mono.font-bold.py-2.mt-4 "Journals"]
+       [:div.flex.justify-between.items-center.mt-4
+        [:h1.text-3xl.font-mono.font-bold.py-2 "Journals"]
+        [:flex.gap-1
+         (ionic/ion-button {:size "small" :fill "clear" :on-click #(set-journal-calendar-open? true)}
+           [:span {:slot "icon-only"} (ionic/tabler-icon "calendar" {:size 22})])]]
+
        (journals-list)
 
+       (when journal-calendar-open?
+         (journals-calendar-modal {:close! #(set-journal-calendar-open? false)}))
+
        [:div.flex.justify-between.items-center.pt-4
         [:h1.text-3xl.font-mono.font-bold.py-2
          "All pages"
@@ -101,9 +130,10 @@
 
         [:div.flex.gap-1
          (ionic/ion-button {:size "small" :fill "clear" :on-click #(set-page-input-open? true)}
-           [:span {:slot "icon-only"} (ionic/tabler-icon "plus")])
-         (ionic/ion-button {:size "small" :fill "clear" :on-click #(set-reload! (inc reload))}
-           [:span {:slot "icon-only"} (ionic/tabler-icon "refresh")])]]
+           [:span {:slot "icon-only"} (ionic/tabler-icon "file-plus" {:size 22})])
+         ;(ionic/ion-button {:size "small" :fill "clear" :on-click #(set-reload! (inc reload))}
+         ;  [:span {:slot "icon-only"} (ionic/tabler-icon "refresh")])
+         ]]
        [:ul.mb-24.pt-2
         (for [page filtered-pages]
           (let [ident (some-> (:block/tags page) first :db/ident)]

+ 3 - 0
src/main/capacitor/handler.cljs

@@ -24,6 +24,9 @@
 (defn local-all-pages []
   (some->> (local-db) (ldb/get-all-pages) (sort-by :block/created-at) (reverse)))
 
+(defn local-page [name]
+  (ldb/get-page (local-db) name))
+
 (defn sub-journals
   []
   (-> (react/q (fstate/get-current-repo)