Forráskód Böngészése

fix: add db requests for outliner core tx

Tienson Qin 2 éve
szülő
commit
2e1e3572df

+ 10 - 2
deps/db/src/logseq/db.cljs

@@ -70,6 +70,14 @@
                (when-let [callback (:callback (get new request-id))]
                (when-let [callback (:callback (get new request-id))]
                  (callback)))))
                  (callback)))))
 
 
+(defn get-next-request-id
+  []
+  (swap! *request-id inc))
+
+(defn add-request!
+  [request-id data]
+  (swap! *request-id->response assoc request-id (if (map? data) data {:response data})))
+
 (defn transact!
 (defn transact!
   "`repo-or-conn`: repo for UI thread and conn for worker/node"
   "`repo-or-conn`: repo for UI thread and conn for worker/node"
   ([repo-or-conn tx-data]
   ([repo-or-conn tx-data]
@@ -87,7 +95,7 @@
 
 
        (let [f (or @*transact-fn d/transact!)
        (let [f (or @*transact-fn d/transact!)
              sync? (= f d/transact!)
              sync? (= f d/transact!)
-             request-id (when-not sync? (swap! *request-id inc))
+             request-id (when-not sync? (get-next-request-id))
              tx-meta' (cond-> tx-meta
              tx-meta' (cond-> tx-meta
                         (not sync?)
                         (not sync?)
                         (assoc :request-id request-id))]
                         (assoc :request-id request-id))]
@@ -100,7 +108,7 @@
                            {:response resp}
                            {:response resp}
                            {:response resp
                            {:response resp
                             :callback #(f repo-or-conn tx-data tx-meta')})]
                             :callback #(f repo-or-conn tx-data tx-meta')})]
-               (swap! *request-id->response assoc request-id value))
+               (add-request! request-id value))
              resp)))))))
              resp)))))))
 
 
 (defn build-default-pages-tx
 (defn build-default-pages-tx

+ 6 - 5
deps/outliner/src/logseq/outliner/core.cljs

@@ -370,11 +370,12 @@
           m (if db-based? (dissoc m :block/tags) m)]
           m (if db-based? (dissoc m :block/tags) m)]
 
 
       ;; Ensure block UUID never changes
       ;; Ensure block UUID never changes
-      (when (and db-id block-uuid)
-        (let [uuid-not-changed? (= block-uuid (:block/uuid (d/entity db db-id)))]
-          (when-not uuid-not-changed?
-            (js/console.error "Block UUID shouldn't be changed once created"))
-          (assert uuid-not-changed? "Block UUID changed")))
+      (let [e (d/entity db db-id)]
+        (when (and e block-uuid)
+          (let [uuid-not-changed? (= block-uuid (:block/uuid e))]
+           (when-not uuid-not-changed?
+             (js/console.error "Block UUID shouldn't be changed once created"))
+           (assert uuid-not-changed? "Block UUID changed"))))
 
 
       (when eid
       (when eid
         ;; Retract attributes to prepare for tx which rewrites block attributes
         ;; Retract attributes to prepare for tx which rewrites block attributes

+ 6 - 2
src/main/frontend/modules/outliner/op.cljs

@@ -1,5 +1,6 @@
 (ns frontend.modules.outliner.op
 (ns frontend.modules.outliner.op
-  "Build outliner ops")
+  "Build outliner ops"
+  (:require [datascript.impl.entity :as de]))
 
 
 (def ^:private ^:dynamic *outliner-ops*
 (def ^:private ^:dynamic *outliner-ops*
   "Stores outliner ops that are generated by the following calls"
   "Stores outliner ops that are generated by the following calls"
@@ -16,7 +17,10 @@
 
 
 (defn save-block
 (defn save-block
   [block]
   [block]
-  [:save-block [block]])
+  (when-let [block' (if (de/entity? block)
+                      (assoc (.-kv ^js block) :db/id (:db/id block))
+                      block)]
+    [:save-block [block']]))
 
 
 (defn insert-blocks
 (defn insert-blocks
   [blocks target-block opts]
   [blocks target-block opts]

+ 3 - 3
src/main/frontend/modules/outliner/pipeline.cljs

@@ -105,6 +105,6 @@
 
 
     (when request-id
     (when request-id
       (when-let [deferred (ldb/get-deferred-response request-id)]
       (when-let [deferred (ldb/get-deferred-response request-id)]
-        (p/resolve! deferred {:tx-meta tx-meta
-                              :tx-data tx-data})
-        (swap! ldb/*request-id->response dissoc request-id)))))
+        (when (p/promise? deferred)
+          (p/resolve! deferred {:tx-meta tx-meta :tx-data tx-data})))
+      (swap! ldb/*request-id->response dissoc request-id))))

+ 6 - 1
src/main/frontend/modules/outliner/ui.cljc

@@ -16,4 +16,9 @@
            (let [r# (persistent! frontend.modules.outliner.op/*outliner-ops*)
            (let [r# (persistent! frontend.modules.outliner.op/*outliner-ops*)
                  worker# @state/*db-worker]
                  worker# @state/*db-worker]
              (when (and worker# (seq r#))
              (when (and worker# (seq r#))
-               (.apply-outliner-ops ^Object worker# (state/get-current-repo) (pr-str r#) (pr-str ~opts)))))))))
+               (let [request-id# (state/get-worker-next-request-id)
+                     response# (.apply-outliner-ops ^Object worker# (state/get-current-repo)
+                                                    (pr-str r#)
+                                                    (pr-str (assoc ~opts :request-id request-id#)))]
+                 (state/add-worker-request! request-id# :outliner-tx)
+                 response#))))))))

+ 4 - 0
src/main/frontend/state.cljs

@@ -16,6 +16,7 @@
             [goog.dom :as gdom]
             [goog.dom :as gdom]
             [goog.object :as gobj]
             [goog.object :as gobj]
             [logseq.common.config :as common-config]
             [logseq.common.config :as common-config]
+            [logseq.db :as ldb]
             [medley.core :as medley]
             [medley.core :as medley]
             [promesa.core :as p]
             [promesa.core :as p]
             [rum.core :as rum]
             [rum.core :as rum]
@@ -2371,3 +2372,6 @@ Similar to re-frame subscriptions"
 (defn update-favorites-updated!
 (defn update-favorites-updated!
   []
   []
   (update-state! :favorites/updated? inc))
   (update-state! :favorites/updated? inc))
+
+(def get-worker-next-request-id ldb/get-next-request-id)
+(def add-worker-request! ldb/add-request!)