Browse Source

fix: :batch/txs should be vector not nil

rcmerci 1 year ago
parent
commit
cccb4fcb0b

+ 2 - 2
src/main/frontend/worker/batch_tx.cljs

@@ -37,10 +37,10 @@
 
 (defn conj-batch-txs!
   [tx-data]
-  (swap! worker-state/*state update :batch/txs (fn [data] (into data tx-data))))
+  (swap! worker-state/*state update :batch/txs (fn [data] ((fnil into []) data tx-data))))
 
 (defn exit-batch-txs-mode!
   []
-  (swap! worker-state/*state assoc :batch/txs nil)
+  (swap! worker-state/*state assoc :batch/txs [])
   (swap! worker-state/*state assoc :batch/db-before nil)
   (swap! worker-state/*state assoc :batch/opts nil))

+ 21 - 8
src/main/frontend/worker/db_listener.cljs

@@ -7,7 +7,8 @@
             [frontend.worker.state :as worker-state]
             [frontend.worker.util :as worker-util]
             [promesa.core :as p]
-            [frontend.worker.batch-tx :as batch-tx]))
+            [frontend.worker.batch-tx :as batch-tx]
+            [frontend.schema-register :as sr]))
 
 
 (defn- entity-datoms=>attr->datom
@@ -34,6 +35,18 @@
 (defmulti listen-db-changes
   (fn [listen-key & _] listen-key))
 
+(sr/defkeyword :sync-db-to-main-thread
+  "DB-listener key.
+sync worker-db changes to main-thread")
+
+(sr/defkeyword :gen-rtc-ops
+  "DB-listener key.
+generate rtc ops.")
+
+(sr/defkeyword :gen-undo-ops
+  "DB-listener key.
+generate undo ops.")
+
 (defmethod listen-db-changes :sync-db-to-main-thread
   [_ {:keys [tx-meta repo conn] :as tx-report}]
   (let [{:keys [from-disk?]} tx-meta
@@ -50,13 +63,13 @@
 
       (when-not from-disk?
         (p/do!
-         (let [{:keys [blocks-to-remove-set blocks-to-add]} (search/sync-search-indice repo tx-report')
-               ^js wo (worker-state/get-worker-object)]
-           (when wo
-             (when (seq blocks-to-remove-set)
-               (.search-delete-blocks wo repo (bean/->js blocks-to-remove-set)))
-             (when (seq blocks-to-add)
-               (.search-upsert-blocks wo repo (bean/->js blocks-to-add))))))))))
+          (let [{:keys [blocks-to-remove-set blocks-to-add]} (search/sync-search-indice repo tx-report')
+                ^js wo (worker-state/get-worker-object)]
+            (when wo
+              (when (seq blocks-to-remove-set)
+                (.search-delete-blocks wo repo (bean/->js blocks-to-remove-set)))
+              (when (seq blocks-to-add)
+                (.search-upsert-blocks wo repo (bean/->js blocks-to-add))))))))))
 
 
 (defn listen-db-changes!

+ 8 - 6
src/main/frontend/worker/rtc/core.cljs

@@ -486,14 +486,16 @@
 (defn- move-all-blocks-to-another-page
   [repo conn from-page-name to-page-name]
   (let [blocks (ldb/get-page-blocks @conn from-page-name {})
+        from-page-block (some-> (first blocks) :block/page)
         target-page-block (d/entity @conn [:block/name to-page-name])]
     (when (and (seq blocks) target-page-block)
-      (outliner-tx/transact!
-       {:persist-op? true
-        :gen-undo-ops? false
-        :transact-opts {:repo repo
-                        :conn conn}}
-       (outliner-core/move-blocks! repo conn blocks target-page-block false)))))
+      (let [blocks* (ldb/sort-by-left blocks from-page-block)]
+        (outliner-tx/transact!
+         {:persist-op? true
+          :gen-undo-ops? false
+          :transact-opts {:repo repo
+                          :conn conn}}
+         (outliner-core/move-blocks! repo conn blocks* target-page-block false))))))
 
 (defn- empty-page?
   "1. page has no child-block

+ 13 - 0
src/test/frontend/worker/fixtures.cljs

@@ -18,3 +18,16 @@
 
     (f)
     (d/unlisten! test-db-conn :frontend.worker.db-listener/listen-db-changes!)))
+
+
+(defn listen-test-db-fixture
+  [handler-keys]
+  (fn [f]
+    (let [test-db-conn (conn/get-db test-helper/test-db-name-db-version false)]
+      (assert (some? test-db-conn))
+      (worker-undo-redo/clear-undo-redo-stack)
+      (worker-db-listener/listen-db-changes! test-helper/test-db-name-db-version test-db-conn
+                                             {:handler-keys handler-keys})
+
+      (f)
+      (d/unlisten! test-db-conn :frontend.worker.db-listener/listen-db-changes!))))

+ 5 - 3
src/test/frontend/worker/rtc/rtc_fns_test.cljs

@@ -12,11 +12,13 @@
             [logseq.common.config :as common-config]
             [logseq.db :as ldb]
             [logseq.outliner.core :as outliner-core]
-            [logseq.outliner.transaction :as outliner-tx]))
+            [logseq.outliner.transaction :as outliner-tx]
+            [frontend.worker.fixtures :as worker-fixtures]))
 
 
 (use-fixtures :each
-  test-helper/db-based-start-and-destroy-db-map-fixture)
+  test-helper/db-based-start-and-destroy-db
+  (worker-fixtures/listen-test-db-fixture [:sync-db-to-main-thread]))
 
 (deftest filter-remote-data-by-local-unpushed-ops-test
   (testing "case1"
@@ -477,7 +479,7 @@ server: ;; remove 2
         (is (nil? (d/entity @conn [:block/uuid page1-uuid])))))))
 
 
-(deftest same-name-two-pages-merge-test
+(deftest ^:wip same-name-two-pages-merge-test
   (let [repo (state/get-current-repo)
         conn (conn/get-db repo false)
         date-formatter (common-config/get-date-formatter (worker-state/get-config repo))