Procházet zdrojové kódy

Merge branch 'master' into feat/worker-sync

Gabriel Horner před 2 týdny
rodič
revize
4fbd147f08

+ 1 - 1
.github/workflows/deploy-sync-test.yml

@@ -72,7 +72,7 @@ jobs:
         with:
           apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
           accountId: 2553ea8236c11ea0f88de28fce1cbfee
-          projectName: "sync"
+          projectName: "test-sync"
           directory: "public"
           gitHubToken: ${{ secrets.GITHUB_TOKEN }}
           branch: ${{ inputs.branch }}

+ 1 - 0
deps/graph-parser/src/logseq/graph_parser/exporter.cljs

@@ -2169,6 +2169,7 @@
                    (-> (select-keys options [:notify-user :default-config :<save-config-file])
                        (set/rename-keys {:<save-config-file :<save-file})))]
      (let [files (common-config/remove-hidden-files *files config rpath-key)
+           ;; Path normalization is needed just for windows
            normalized-rpath (fn [f]
                               (some-> (get f rpath-key) path/path-normalize))
            logseq-file? #(string/starts-with? (normalized-rpath %) "logseq/")

+ 3 - 1
deps/graph-parser/test/resources/exporter-test-graph/journals/2026_01_27.md

@@ -1 +1,3 @@
-- 2nd instance of block w/ longer ns tag #n1/n2/n3
+- 2nd instance of block w/ longer ns tag #n1/n2/n3
+- property pages with '/' should be valid
+key/value:: 1

+ 1 - 0
src/main/frontend/components/imports.cljs

@@ -68,6 +68,7 @@
 (defn- finished-cb
   [& {:keys [reload?]
       :or {reload? true}}]
+  (state/pub-event! [:graph/sync-context])
   (notification/show! "Import finished!" :success)
   (shui/dialog-close! :import-indicator)
   (route-handler/redirect-to-home!)

+ 47 - 38
src/main/frontend/components/settings.cljs

@@ -910,6 +910,7 @@
 (rum/defc settings-rtc-members
   []
   (let [[invite-email set-invite-email!] (hooks/use-state "")
+        [loading? set-loading!] (hooks/use-state true)
         current-repo (state/get-current-repo)
         manager? (user-handler/manager? current-repo)
         [users-info] (hooks/use-atom (:rtc/users-info @state/state))
@@ -920,7 +921,10 @@
                            (when graph-uuid
                              (rtc-handler/<rtc-invite-email graph-uuid invite-email)))))]
     (hooks/use-effect!
-     #(c.m/run-task* (m/sp (c.m/<? (rtc-handler/<rtc-get-users-info))))
+     #(c.m/run-task*
+       (m/sp
+        (c.m/<? (rtc-handler/<rtc-get-users-info))
+        (set-loading! false)))
      [])
     [:div.flex.flex-col.gap-2.mt-4
      {:on-key-press (fn [e]
@@ -928,43 +932,48 @@
                         (invite-user!)))}
      [:h2.opacity-50.font-medium "Members:"]
      [:div.users.flex.flex-col.gap-1
-      (for [{user-name :user/name
-             user-email :user/email
-             user-uuid :user/uuid
-             graph<->user-user-type :graph<->user/user-type} users]
-        (let [member? (= :member graph<->user-user-type)
-              can-remove? (and manager? member?)]
-          [:div.flex.flex-row.items-center.gap-2
-           {:key (str "user-" (or user-uuid user-name))}
-           [:div user-name]
-           (when user-email [:div.opacity-50.text-sm user-email])
-           (when graph<->user-user-type [:div.opacity-50.text-sm (name graph<->user-user-type)])
-           (when can-remove?
-             (shui/dropdown-menu
-              (shui/dropdown-menu-trigger
-               {:asChild true}
-               (shui/button
-                {:variant "ghost"
-                 :size :sm
-                 :class "px-1 h-7"}
-                (ui/icon "dots" {:size 14})))
-              (shui/dropdown-menu-content
-               {:align "end"}
-               (shui/dropdown-menu-item
-                {:class "remove-member-menu-item"
-                 :on-click (fn []
-                             (let [graph-uuid (ldb/get-graph-rtc-uuid (db/get-db))
-                                   member-id user-uuid]
-                               (when (and graph-uuid member-id)
-                                 (-> (rtc-handler/<rtc-remove-member! graph-uuid member-id)
-                                     (p/then (fn []
-                                               (rtc-handler/<rtc-get-users-info)))
-                                     (p/catch (fn [e]
-                                                (notification/show! "Failed to remove member." :error)
-                                                (log/error :db-sync/remove-member-failed {:error e
-                                                                                          :graph-uuid graph-uuid
-                                                                                          :member-id member-id})))))))}
-                "Remove access"))))]))]
+      (if loading?
+        (for [i (range 2)]
+          [:div.flex.flex-row.items-center.gap-2.pr-4 {:key (str "skeleton-" i)}
+           (shui/skeleton {:class "h-4 w-32"})
+           (shui/skeleton {:class "h-4 w-full"})])
+        (for [{user-name :user/name
+               user-email :user/email
+               user-uuid :user/uuid
+               graph<->user-user-type :graph<->user/user-type} users]
+          (let [member? (= :member graph<->user-user-type)
+                can-remove? (and manager? member?)]
+            [:div.flex.flex-row.items-center.gap-2
+             {:key (str "user-" (or user-uuid user-name))}
+             [:div user-name]
+             (when user-email [:div.opacity-50.text-sm user-email])
+             (when graph<->user-user-type [:div.opacity-50.text-sm (name graph<->user-user-type)])
+             (when can-remove?
+               (shui/dropdown-menu
+                (shui/dropdown-menu-trigger
+                 {:asChild true}
+                 (shui/button
+                  {:variant "ghost"
+                   :size :sm
+                   :class "px-1 h-7"}
+                  (ui/icon "dots" {:size 14})))
+                (shui/dropdown-menu-content
+                 {:align "end"}
+                 (shui/dropdown-menu-item
+                  {:class "remove-member-menu-item"
+                   :on-click (fn []
+                               (let [graph-uuid (ldb/get-graph-rtc-uuid (db/get-db))
+                                     member-id user-uuid]
+                                 (when (and graph-uuid member-id)
+                                   (-> (rtc-handler/<rtc-remove-member! graph-uuid member-id)
+                                       (p/then (fn []
+                                                 (rtc-handler/<rtc-get-users-info)))
+                                       (p/catch (fn [e]
+                                                  (notification/show! "Failed to remove member." :error)
+                                                  (log/error :db-sync/remove-member-failed {:error e
+                                                                                            :graph-uuid graph-uuid
+                                                                                            :member-id member-id})))))))}
+                  "Remove access"))))])))]
      [:div.flex.flex-col.gap-4.mt-4
       (shui/input
        {:placeholder   "Email address"

+ 6 - 5
src/main/frontend/state.cljs

@@ -1115,11 +1115,6 @@ Similar to re-frame subscriptions"
   (when (empty? (:sidebar/blocks @state))
     (sidebar-add-block! (get-current-repo) "contents" :contents)))
 
-(defn toggle-sidebar-open?!
-  []
-  (when-not (:ui/sidebar-open? @state)
-    (sidebar-add-content-when-open!))
-  (swap! state update :ui/sidebar-open? not))
 
 (defn open-right-sidebar!
   []
@@ -1130,6 +1125,12 @@ Similar to re-frame subscriptions"
   []
   (swap! state assoc :ui/sidebar-open? false))
 
+(defn toggle-sidebar-open?!
+  []
+  (if (:ui/sidebar-open? @state)
+    (hide-right-sidebar!)
+    (open-right-sidebar!)))
+
 (defn sidebar-move-block!
   [from to]
   (update-state! :sidebar/blocks (fn [blocks]