Преглед на файлове

fix(rtc): ignore pre-configured attrs when remote-op-value->tx-data

rcmerci преди 7 месеца
родител
ревизия
58dd5a8f19
променени са 2 файла, в които са добавени 17 реда и са изтрити 9 реда
  1. 7 3
      src/main/frontend/worker/rtc/remote_update.cljs
  2. 10 6
      src/test/frontend/worker/rtc/remote_update_test.cljs

+ 7 - 3
src/main/frontend/worker/rtc/remote_update.cljs

@@ -440,11 +440,14 @@ so need to pull earlier remote-data from websocket."})
     (concat tx-data1 tx-data2)))
 
 (defn- remote-op-value->tx-data
-  [db ent op-value]
+  "ignore-attr-set: don't update local attrs in this set"
+  [db ent op-value ignore-attr-set]
   (assert (some? (:db/id ent)) ent)
   (let [db-schema (d/schema db)
         local-block-map (->> ent
-                             (filter (comp update-op-watched-attr? first))
+                             (filter (fn [[attr _]]
+                                       (and (update-op-watched-attr? attr)
+                                            (not (contains? ignore-attr-set attr)))))
                              (keep (fn [[k v]]
                                      (when-let [[ref? card-many?] (get-schema-ref+cardinality db-schema k)]
                                        [k
@@ -496,7 +499,8 @@ so need to pull earlier remote-data from websocket."})
           (upsert-whiteboard-block repo conn op-value)
           (do (when-let [schema-tx-data (remote-op-value->schema-tx-data block-uuid op-value)]
                 (ldb/transact! conn schema-tx-data {:persist-op? false :gen-undo-ops? false}))
-              (when-let [tx-data (seq (remote-op-value->tx-data @conn ent (dissoc op-value :client/schema)))]
+              (when-let [tx-data (seq (remote-op-value->tx-data @conn ent (dissoc op-value :client/schema)
+                                                                rtc-const/ignore-attrs-when-syncing))]
                 (ldb/transact! conn (concat tx-data update-block-order-tx-data)
                                {:persist-op? false :gen-undo-ops? false}))))))))
 

+ 10 - 6
src/test/frontend/worker/rtc/remote_update_test.cljs

@@ -15,7 +15,7 @@
                                :block/title "local-content"}])
             op-value {:block/title (ldb/write-transit-str "remote-content")}]
         (is (= [[:db/add (:db/id (d/entity db [:block/uuid block-uuid])) :block/title "remote-content"]]
-               (#'subject/remote-op-value->tx-data db (d/entity db [:block/uuid block-uuid]) op-value)))))
+               (#'subject/remote-op-value->tx-data db (d/entity db [:block/uuid block-uuid]) op-value nil)))))
 
     (testing ":block/tags (1)"
       (let [db (d/db-with db [{:block/uuid block-uuid}
@@ -26,7 +26,7 @@
                                                                     [:block/uuid ref-uuid1]
                                                                     [:block/uuid ref-uuid2]]))]
         (is (= #{[:db/add db-id :block/tags ref1] [:db/add db-id :block/tags ref2]}
-               (set (#'subject/remote-op-value->tx-data db (d/entity db [:block/uuid block-uuid]) op-value))))))
+               (set (#'subject/remote-op-value->tx-data db (d/entity db [:block/uuid block-uuid]) op-value nil))))))
 
     (testing ":block/tags (2)"
       (let [db (d/db-with db [{:db/id "ref1"
@@ -39,7 +39,7 @@
                                                                [:block/uuid ref-uuid2]]))]
         (is (= #{[:db/retract db-id :block/tags [:block/uuid ref-uuid1]]
                  [:db/add db-id :block/tags ref2]}
-               (set (#'subject/remote-op-value->tx-data db (d/entity db [:block/uuid block-uuid]) op-value))))))
+               (set (#'subject/remote-op-value->tx-data db (d/entity db [:block/uuid block-uuid]) op-value nil))))))
 
     (testing ":block/tags (3): ref2 not exist"
       (let [db (d/db-with db [{:db/id "ref1"
@@ -48,13 +48,13 @@
                                :block/tags ["ref1"]}])
             op-value {:block/tags [ref-uuid2]}]
         (is (= #{[:db/retract (:db/id (d/entity db [:block/uuid block-uuid])) :block/tags [:block/uuid ref-uuid1]]}
-               (set (#'subject/remote-op-value->tx-data db (d/entity db [:block/uuid block-uuid]) op-value))))))
+               (set (#'subject/remote-op-value->tx-data db (d/entity db [:block/uuid block-uuid]) op-value nil))))))
     (testing ":block/updated-at"
       (let [db (d/db-with db [{:block/uuid block-uuid
                                :block/updated-at 1}])
             ent (d/entity db [:block/uuid block-uuid])]
         (is (= [[:db/retract (:db/id ent) :block/updated-at]]
-               (#'subject/remote-op-value->tx-data db ent {})))))
+               (#'subject/remote-op-value->tx-data db ent {} nil)))))
     (testing ":logseq.task/status, op-value don't have this attr, means remove this attr"
       (let [db (d/db-with db [{:db/id "ref1"
                                :block/uuid ref-uuid1}
@@ -63,4 +63,8 @@
             op-value {}
             ent (d/entity db [:block/uuid block-uuid])]
         (is (= [[:db/retract (:db/id ent) :logseq.task/status]]
-               (#'subject/remote-op-value->tx-data db ent op-value)))))))
+               (#'subject/remote-op-value->tx-data db ent op-value nil)))))
+    (testing "dont update ignored attrs"
+      ;; TODO
+      )
+    ))