Explorar o código

enhance(capacitor): support login state

charlie hai 5 meses
pai
achega
68ffa9699b
Modificáronse 2 ficheiros con 82 adicións e 45 borrados
  1. 43 38
      shadow-cljs.edn
  2. 39 7
      src/main/capacitor/components/settings.cljs

+ 43 - 38
shadow-cljs.edn

@@ -101,7 +101,12 @@
                                                 :redef false}
                                      :cross-chunk-method-motion false}
                   :build-hooks [(shadow.hooks/git-revision-hook "--long --always --dirty")]
-                  :closure-defines {} ;; set by git-revision-hook
+                  :closure-defines
+                  {
+                   ;; Set to switch file sync server to dev, set this to false in `yarn watch`
+                   frontend.config/ENABLE-FILE-SYNC-PRODUCTION #shadow/env ["ENABLE_FILE_SYNC_PRODUCTION" :as :bool :default true]
+                   frontend.config/ENABLE-RTC-SYNC-PRODUCTION #shadow/env ["ENABLE_RTC_SYNC_PRODUCTION" :as :bool :default true]
+                   }
 
                   ;; NOTE: electron, browser/mobile-app use different asset-paths.
                   ;;   For browser/mobile-app devs, assets are located in /static/js(via HTTP root).
@@ -154,48 +159,48 @@
 
   :publishing {:target :browser
                :module-loader true
-               :js-options    {;; handle `require(xxx.css)`
-                               :ignore-asset-requires true
-                               :resolve {"react" {:target :global
-                                                  :global "React"}
-                                         "react-dom" {:target :global
-                                                      :global "ReactDOM"}}}
-               :modules       {:shared
-                               {:entries []}
-                               :main
-                               {:init-fn    frontend.publishing/init
-                                :depends-on #{:shared}}
-                               :code-editor
-                               {:entries    [frontend.extensions.code]
-                                :depends-on #{:main}}
-                               :excalidraw
-                               {:entries    [frontend.extensions.excalidraw]
-                                :depends-on #{:main}}
-                               :tldraw
-                               {:entries    [frontend.extensions.tldraw]
-                                :depends-on #{:main}}
-                               :db-worker
-                               {:init-fn   frontend.worker.db-worker/init
-                                :depends-on #{:shared}
-                                :web-worker true}}
-
-               :output-dir       "./static/js/publishing"
-               :asset-path       "static/js"
-               :closure-defines  {logseq.common.config/PUBLISHING true
-                                  goog.debug.LOGGING_ENABLED true}
-               :compiler-options {:infer-externs      :auto
+               :js-options {;; handle `require(xxx.css)`
+                            :ignore-asset-requires true
+                            :resolve {"react" {:target :global
+                                               :global "React"}
+                                      "react-dom" {:target :global
+                                                   :global "ReactDOM"}}}
+               :modules {:shared
+                         {:entries []}
+                         :main
+                         {:init-fn frontend.publishing/init
+                          :depends-on #{:shared}}
+                         :code-editor
+                         {:entries [frontend.extensions.code]
+                          :depends-on #{:main}}
+                         :excalidraw
+                         {:entries [frontend.extensions.excalidraw]
+                          :depends-on #{:main}}
+                         :tldraw
+                         {:entries [frontend.extensions.tldraw]
+                          :depends-on #{:main}}
+                         :db-worker
+                         {:init-fn frontend.worker.db-worker/init
+                          :depends-on #{:shared}
+                          :web-worker true}}
+
+               :output-dir "./static/js/publishing"
+               :asset-path "static/js"
+               :closure-defines {logseq.common.config/PUBLISHING true
+                                 goog.debug.LOGGING_ENABLED true}
+               :compiler-options {:infer-externs :auto
                                   :output-feature-set :es-next
                                   :source-map true
-                                  :externs            ["datascript/externs.js"
-                                                       "externs.js"]
-                                  :warnings           {:fn-deprecated false
-                                                       :redef false}
+                                  :externs ["datascript/externs.js"
+                                            "externs.js"]
+                                  :warnings {:fn-deprecated false
+                                             :redef false}
                                   ;; https://github.com/thheller/shadow-cljs/issues/611#issuecomment-620845276
                                   ;; fixes cljs.spec bug with code splitting
                                   :cross-chunk-method-motion false}
-               :devtools         {:before-load frontend.core/stop
-                                  :after-load  frontend.core/start
-                                  :preloads    [devtools.preload]}}
+               :devtools {:before-load frontend.core/stop
+                          :after-load frontend.core/start
+                          :preloads [devtools.preload]}}
 
   :stories-dev {:target :npm-module
                 :entries [logseq.shui.storybook]

+ 39 - 7
src/main/capacitor/components/settings.cljs

@@ -2,12 +2,49 @@
   (:require [capacitor.ionic :as ion]
             [capacitor.state :as state]
             [frontend.components.user.login :as login]
+            [frontend.handler.db-based.rtc :as rtc-handler]
+            [frontend.handler.user :as user-handler]
+            [frontend.state :as fstate]
+            [logseq.shui.ui :as ui]
             [logseq.shui.ui :as shui]
             [rum.core :as rum]))
 
 (rum/defc all-pages
   [])
 
+(rum/defc all-graphs < rum/reactive
+  []
+  (let [graphs (fstate/sub :rtc/graphs)]
+    [:div.py-4
+     [:div.flex.justify-between.items-center
+      [:h2.text-xl.font-medium.my-3.flex.gap-2.items-center.opacity-80
+       (ui/tabler-icon "server" {:size 22}) "Your RTC graphs"]
+
+      (ion/button
+        {:mode "ios" :size "small" :color "secondary"
+         :on-click (fn [] (rtc-handler/<get-remote-graphs))} "refresh")]
+
+     [:ul
+      (for [{:keys [url GraphName GraphSchemaVersion]} graphs]
+        [:li
+         [:p.inline-flex.items-center.gap-1
+          [:a.text-lg.mr-2 GraphName]] [:code "ver." GraphSchemaVersion]])]]))
+
+(rum/defc user-profile < rum/reactive
+  []
+  (let [login? (and (fstate/sub :auth/id-token) (user-handler/logged-in?))]
+    (if-not login?
+      [:h1.text-3xl.font-bold.underline
+       [:a {:on-click #(shui/dialog-open! login/page-impl
+                         {:close-btn? false
+                          :align :top
+                          :content-props {:class "app-login-modal"}})} "login"]]
+      [:div.py-2
+       [:h2.py-3.flex.justify-between.items-center
+        [:strong.text-4xl.font-semibold (user-handler/username)]
+        (ion/button {:size "small" :mode "ios" :fill "outline" :color "danger"} "logout")]
+       [:code (user-handler/email)]])))
+
 (rum/defc page
   []
   (let [[^js nav] (state/use-nav-root)]
@@ -31,10 +68,5 @@
                                #(.complete (.-detail e))
                                3000))}
           (ion/refresher-content))
-
-        [:h1.text-3xl.font-bold.underline
-         [:a {:on-click #(shui/dialog-open! login/page-impl
-                           {:close-btn? false
-                            :align :top
-                            :content-props {:class "app-login-modal"}})} "login"]]
-        ))))
+        (user-profile)
+        (all-graphs)))))