Browse Source

fix(rtc): sync blocks in whiteboards

rcmerci 2 years ago
parent
commit
083618a427
1 changed files with 20 additions and 11 deletions
  1. 20 11
      src/main/frontend/db/rtc/core.cljs

+ 20 - 11
src/main/frontend/db/rtc/core.cljs

@@ -142,7 +142,7 @@
         (prn :apply-remote-remove-ops (:block-uuid op))))))
 
 (defn- insert-or-move-block
-  [repo block-uuid remote-parents remote-left-uuid move?]
+  [repo block-uuid remote-parents remote-left-uuid move? op-value]
   (when (and (seq remote-parents) remote-left-uuid)
     (let [first-remote-parent (first remote-parents)
           local-parent (db/pull repo '[*] [:block/uuid first-remote-parent])
@@ -179,10 +179,22 @@
                           :block/format :markdown}]
                         local-parent {:sibling? false :keep-uuid? true}))
 
-        ([true true false] [true true true])
         ;; Don't need to insert-whiteboard-block here,
         ;; will do :upsert-whiteboard-block in `update-block-attrs`
-        nil
+        [true true false]
+        (when (nil? (:properties op-value))
+          ;; when :properties is nil, this block should be treat as normal block
+          (if move?
+            (transact-db! :move-blocks [b] local-parent false)
+            (transact-db! :insert-blocks [{:block/uuid block-uuid :block/content "" :block/format :markdown}]
+                          local-parent {:sibling? false :keep-uuid? true})))
+        [true true true]
+        (when (nil? (:properties op-value))
+          (let [sibling? (not= (:block/uuid local-parent) (:block/uuid local-left))]
+            (if move?
+              (transact-db! :move-blocks [b] local-left sibling?)
+              (transact-db! :insert-blocks [{:block/uuid block-uuid :block/content "" :block/format :markdown}]
+                            local-left {:sibling? sibling? :keep-uuid? true}))))
 
         (throw (ex-info "Don't know where to insert" {:block-uuid block-uuid :remote-parents remote-parents
                                                       :remote-left remote-left-uuid}))))))
@@ -247,7 +259,7 @@
         (transact-db! :upsert-whiteboard-block repo [(whiteboard-handler/shape->block shape page-name)])))))
 
 (defn- update-block-attrs
-  [repo block-uuid {:keys [parents properties] :as op-value}]
+  [repo block-uuid {:keys [parents properties content] :as op-value}]
   (let [key-set (set/intersection
                  (conj rtc-const/general-attr-set :content)
                  (set (keys op-value)))]
@@ -259,9 +271,6 @@
           (and whiteboard-page-block? properties)
           (upsert-whiteboard-block repo op-value)
 
-          whiteboard-page-block?
-          nil
-
           :else
           (let [b-ent (db/pull repo '[*] [:block/uuid block-uuid])
                 new-block
@@ -301,9 +310,9 @@
     (let [r (check-block-pos repo self parents left)]
       (case r
         :not-exist
-        (insert-or-move-block repo self parents left false)
+        (insert-or-move-block repo self parents left false op-value)
         :wrong-pos
-        (insert-or-move-block repo self parents left true)
+        (insert-or-move-block repo self parents left true op-value)
         nil                             ; do nothing
         nil)
       (update-block-attrs repo self op-value)
@@ -318,9 +327,9 @@
       (let [r (check-block-pos repo self parents left)]
         (case r
           :not-exist
-          (insert-or-move-block repo self parents left false)
+          (insert-or-move-block repo self parents left false op-value)
           :wrong-pos
-          (insert-or-move-block repo self parents left true)
+          (insert-or-move-block repo self parents left true op-value)
           nil)))
     (update-block-attrs repo self op-value)
     (prn :apply-remote-update-ops self)))