|  | @@ -13,6 +13,7 @@
 | 
	
		
			
				|  |  |              [capacitor.handler :as handler]
 | 
	
		
			
				|  |  |              [capacitor.pages.utils :as pages-util]
 | 
	
		
			
				|  |  |              [capacitor.components.ui :as ui]
 | 
	
		
			
				|  |  | +            [frontend.db.conn :as db-conn]
 | 
	
		
			
				|  |  |              [frontend.db-mixins :as db-mixins]
 | 
	
		
			
				|  |  |              [frontend.state :as fstate]
 | 
	
		
			
				|  |  |              [frontend.db.utils :as db-util]
 | 
	
	
		
			
				|  | @@ -22,6 +23,38 @@
 | 
	
		
			
				|  |  |              [logseq.db :as ldb]
 | 
	
		
			
				|  |  |              [capacitor.pages.settings :as settings]))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +(rum/defc app-graphs-select
 | 
	
		
			
				|  |  | +  []
 | 
	
		
			
				|  |  | +  (let [current-repo (fstate/get-current-repo)
 | 
	
		
			
				|  |  | +        graphs (fstate/get-repos)
 | 
	
		
			
				|  |  | +        short-repo-name (if current-repo
 | 
	
		
			
				|  |  | +                          (db-conn/get-short-repo-name current-repo)
 | 
	
		
			
				|  |  | +                          "Select a Graph")]
 | 
	
		
			
				|  |  | +    [:<>
 | 
	
		
			
				|  |  | +     (ionic/ion-button
 | 
	
		
			
				|  |  | +       {:fill "clear" :mode "ios"
 | 
	
		
			
				|  |  | +        :class "border-none w-full rounded-lg font-semibold"
 | 
	
		
			
				|  |  | +        :on-click (fn []
 | 
	
		
			
				|  |  | +                    (ui/open-modal! "Switch graph"
 | 
	
		
			
				|  |  | +                      {:type :action-sheet
 | 
	
		
			
				|  |  | +                       :buttons (for [repo graphs]
 | 
	
		
			
				|  |  | +                                  {:text (some-> (:url repo) (string/replace #"^logseq_db_" ""))
 | 
	
		
			
				|  |  | +                                   :role (:url repo)})
 | 
	
		
			
				|  |  | +                       :inputs []
 | 
	
		
			
				|  |  | +                       :on-action (fn [e]
 | 
	
		
			
				|  |  | +                                    (when-let [url (:role e)]
 | 
	
		
			
				|  |  | +                                      (when (string/starts-with? url "logseq_db_")
 | 
	
		
			
				|  |  | +                                        (fstate/pub-event! [:graph/switch url]))))}))}
 | 
	
		
			
				|  |  | +       short-repo-name)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +     (ionic/ion-button
 | 
	
		
			
				|  |  | +       {:on-click (fn []
 | 
	
		
			
				|  |  | +                    (when-let [db-name (js/prompt "Create new db")]
 | 
	
		
			
				|  |  | +                      (when-not (string/blank? db-name)
 | 
	
		
			
				|  |  | +                        (-> (repo-handler/new-db! db-name)
 | 
	
		
			
				|  |  | +                          (p/then #())))))}
 | 
	
		
			
				|  |  | +       (ionic/tabler-icon "plus"))]))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  (rum/defc app-sidebar []
 | 
	
		
			
				|  |  |    (ionic/ion-menu {:content-id "app-main-content"
 | 
	
		
			
				|  |  |                     :type "push"}
 | 
	
	
		
			
				|  | @@ -32,6 +65,19 @@
 | 
	
		
			
				|  |  |        [:div.p-4
 | 
	
		
			
				|  |  |         [:strong "hello, logseq?"]])))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +(rum/defc app-tabbar []
 | 
	
		
			
				|  |  | +  (ionic/ion-tab-bar {:color "light"
 | 
	
		
			
				|  |  | +                      :class "w-full fixed bottom-4"}
 | 
	
		
			
				|  |  | +    (ionic/ion-tab-button {:tab "tab1"
 | 
	
		
			
				|  |  | +                           :selected true
 | 
	
		
			
				|  |  | +                           :on-click #(js/alert "home")}
 | 
	
		
			
				|  |  | +      (ionic/tabler-icon "home" {:size 22}) "Journals")
 | 
	
		
			
				|  |  | +    (ionic/ion-tab-button {:tab "tab0"
 | 
	
		
			
				|  |  | +                           :selected false}
 | 
	
		
			
				|  |  | +      (ionic/tabler-icon "circle-plus" {:size 24}) "Capture New")
 | 
	
		
			
				|  |  | +    (ionic/ion-tab-button {:tab "tab2"}
 | 
	
		
			
				|  |  | +      (ionic/tabler-icon "settings" {:size 22}) "Settings")))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  (rum/defc journals-list < rum/reactive db-mixins/query
 | 
	
		
			
				|  |  |    []
 | 
	
		
			
				|  |  |    (let [journals (handler/sub-journals)]
 | 
	
	
		
			
				|  | @@ -105,56 +151,9 @@
 | 
	
		
			
				|  |  |          (create-page-input {:close! #(set-page-input-open? false)
 | 
	
		
			
				|  |  |                              :reload-pages! #(set-reload! (inc reload))}))
 | 
	
		
			
				|  |  |        [:div.pt-6.px-6
 | 
	
		
			
				|  |  | -       [:div.flex.justify-between.items-center
 | 
	
		
			
				|  |  | -        [:h1.text-3xl.font-mono.font-bold.py-2 "Current graph"]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        (ionic/ion-button {:size "small"
 | 
	
		
			
				|  |  | -                           :fill "clear"
 | 
	
		
			
				|  |  | -                           :on-click (fn []
 | 
	
		
			
				|  |  | -                                       (when-let [db-name (js/prompt "Create new db")]
 | 
	
		
			
				|  |  | -                                         (when-not (string/blank? db-name)
 | 
	
		
			
				|  |  | -                                           (-> (repo-handler/new-db! db-name)
 | 
	
		
			
				|  |  | -                                             (p/then #(set-reload! (inc reload)))))))}
 | 
	
		
			
				|  |  | -          [:span {:slot "icon-only"} (ionic/tabler-icon "plus" {:size 22})])]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -       [:h2.py-1.text-lg
 | 
	
		
			
				|  |  | -        (let [graphs (fstate/get-repos)]
 | 
	
		
			
				|  |  | -          (ionic/ion-button
 | 
	
		
			
				|  |  | -            {:fill "clear" :mode "ios"
 | 
	
		
			
				|  |  | -             :class "border w-full rounded-lg"
 | 
	
		
			
				|  |  | -             :on-click (fn []
 | 
	
		
			
				|  |  | -                         (ui/open-modal! "Switch graph"
 | 
	
		
			
				|  |  | -                           {:type :action-sheet
 | 
	
		
			
				|  |  | -                            :buttons (for [repo graphs]
 | 
	
		
			
				|  |  | -                                       {:text (some-> (:url repo) (string/replace #"^logseq_db_" ""))
 | 
	
		
			
				|  |  | -                                        :role (:url repo)})
 | 
	
		
			
				|  |  | -                            :inputs []
 | 
	
		
			
				|  |  | -                            :on-action (fn [e]
 | 
	
		
			
				|  |  | -                                         (when-let [url (:role e)]
 | 
	
		
			
				|  |  | -                                           (when (string/starts-with? url "logseq_db_")
 | 
	
		
			
				|  |  | -                                             (fstate/pub-event! [:graph/switch url]))))}))}
 | 
	
		
			
				|  |  | -            (fstate/get-current-repo)))]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |         [: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 (fn []
 | 
	
		
			
				|  |  | -                        (ui/open-modal!
 | 
	
		
			
				|  |  | -                          (fn [{:keys [close!]}]
 | 
	
		
			
				|  |  | -                            (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!))))}))))}
 | 
	
		
			
				|  |  | -           [:span {:slot "icon-only"} (ionic/tabler-icon "calendar" {:size 22})])]]
 | 
	
		
			
				|  |  | +        [:flex.gap-1]]
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |         (journals-list)
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -186,17 +185,7 @@
 | 
	
		
			
				|  |  |               [:code.opacity-30.scale-75 (.toLocaleDateString (js/Date. (:block/created-at page)))]]))]]
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        ;; tabbar
 | 
	
		
			
				|  |  | -      ;(ionic/ion-tab-bar {:color "light"
 | 
	
		
			
				|  |  | -      ;                    :class "w-full fixed bottom-4"}
 | 
	
		
			
				|  |  | -      ;  (ionic/ion-tab-button {:tab "tab1"
 | 
	
		
			
				|  |  | -      ;                         :selected true
 | 
	
		
			
				|  |  | -      ;                         :on-click #(js/alert "home")}
 | 
	
		
			
				|  |  | -      ;    (ionic/tabler-icon "home" {:size 22}) "Home")
 | 
	
		
			
				|  |  | -      ;  (ionic/ion-tab-button {:tab "tab0"
 | 
	
		
			
				|  |  | -      ;                         :selected false}
 | 
	
		
			
				|  |  | -      ;    (ionic/tabler-icon "circle-plus" {:size 24}) "Capture New")
 | 
	
		
			
				|  |  | -      ;  (ionic/ion-tab-button {:tab "tab2"}
 | 
	
		
			
				|  |  | -      ;    (ionic/tabler-icon "settings" {:size 22}) "Settings"))
 | 
	
		
			
				|  |  | +      ;(app-tabbar)
 | 
	
		
			
				|  |  |        )
 | 
	
		
			
				|  |  |      ))
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -204,23 +193,39 @@
 | 
	
		
			
				|  |  |    []
 | 
	
		
			
				|  |  |    (let [db-restoring? (fstate/sub :db/restoring?)]
 | 
	
		
			
				|  |  |      [:<>
 | 
	
		
			
				|  |  | -     (app-sidebar)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |       (ionic/ion-page
 | 
	
		
			
				|  |  |         {:id "app-main-content"}
 | 
	
		
			
				|  |  |         (ionic/ion-header
 | 
	
		
			
				|  |  |           (ionic/ion-toolbar
 | 
	
		
			
				|  |  |             (ionic/ion-buttons {:slot "start"}
 | 
	
		
			
				|  |  | -             (ionic/ion-menu-button)
 | 
	
		
			
				|  |  | -             (ionic/ion-button {:class "opacity-90"} (ionic/tabler-icon "search" {:size 22 :stroke 2})))
 | 
	
		
			
				|  |  | +             (app-graphs-select))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |             (ionic/ion-buttons {:slot "end"}
 | 
	
		
			
				|  |  | +             (ionic/ion-button
 | 
	
		
			
				|  |  | +               {:size "small" :fill "clear"
 | 
	
		
			
				|  |  | +                :on-click (fn []
 | 
	
		
			
				|  |  | +                            (ui/open-modal!
 | 
	
		
			
				|  |  | +                              (fn [{:keys [close!]}]
 | 
	
		
			
				|  |  | +                                (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!))))}))))}
 | 
	
		
			
				|  |  | +               [:span {:slot "icon-only"} (ionic/tabler-icon "calendar-month" {:size 22})])
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |               (ionic/ion-button {:fill "clear"}
 | 
	
		
			
				|  |  |                 (ionic/ion-nav-link
 | 
	
		
			
				|  |  |                   {:routerDirection "forward"
 | 
	
		
			
				|  |  |                    :class "w-full"
 | 
	
		
			
				|  |  |                    :component settings/page}
 | 
	
		
			
				|  |  | -                 (ionic/tabler-icon "upload" {:size 24 :class "opacity-70"}))))))
 | 
	
		
			
				|  |  | +                 (ionic/tabler-icon "dots-circle-horizontal" {:size 24}))))))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |         ;; main content
 | 
	
		
			
				|  |  |         (if db-restoring?
 | 
	
		
			
				|  |  |           (ionic/ion-content
 |