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

fix(rtc): skip insert-or-move-block when parent and order both missing

rcmerci 4 hónapja
szülő
commit
24e9896fb7
1 módosított fájl, 35 hozzáadás és 31 törlés
  1. 35 31
      src/main/frontend/worker/rtc/remote_update.cljs

+ 35 - 31
src/main/frontend/worker/rtc/remote_update.cljs

@@ -192,37 +192,41 @@ so need to pull earlier remote-data from websocket."})
 
 (defn- insert-or-move-block
   [repo conn block-uuid remote-parents remote-block-order move? op-value]
-  (let [first-remote-parent (first remote-parents)
-        local-parent (when first-remote-parent (d/entity @conn [:block/uuid first-remote-parent]))
-        whiteboard-page-block? (ldb/whiteboard? local-parent)
-        b (d/entity @conn [:block/uuid block-uuid])]
-    (case [whiteboard-page-block? (some? local-parent) (some? remote-block-order)]
-      [false true true]
-      (do (if move?
-            (transact-db! :move-blocks repo conn [b] local-parent {:sibling? false})
-            (transact-db! :insert-blocks repo conn
-                          [{:block/uuid block-uuid
-                            :block/title ""}]
-                          local-parent {:sibling? false :keep-uuid? true}))
-          (transact-db! :update-block-order-directly repo conn block-uuid first-remote-parent remote-block-order))
-
-      [false true false]
-      (if move?
-        (transact-db! :move-blocks repo conn [b] local-parent
-                      {:sibling? false})
-        (transact-db! :insert-no-order-blocks conn [[block-uuid first-remote-parent]]))
-
-      [false false true]              ;no parent, only update order. e.g. udpate property's order
-      (when (and (empty? remote-parents) move?)
-        (transact-db! :update-block-order-directly repo conn block-uuid nil remote-block-order))
-
-      ([true false false] [true false true] [true true false] [true true true])
-      (throw (ex-info "Not implemented yet for whiteboard" {:op-value op-value}))
-
-      (throw (ex-info "Don't know where to insert" {:block-uuid block-uuid
-                                                    :remote-parents remote-parents
-                                                    :remote-block-order remote-block-order
-                                                    :op-value op-value})))))
+  (when (or (seq remote-parents) remote-block-order) ;at least one of parent|order exists
+    (let [first-remote-parent (first remote-parents)
+          local-parent (when first-remote-parent (d/entity @conn [:block/uuid first-remote-parent]))
+          whiteboard-page-block? (ldb/whiteboard? local-parent)
+          b (d/entity @conn [:block/uuid block-uuid])]
+      (case [whiteboard-page-block? (some? local-parent) (some? remote-block-order)]
+        [false true true]
+        (do (if move?
+              (transact-db! :move-blocks repo conn [b] local-parent {:sibling? false})
+              (transact-db! :insert-blocks repo conn
+                            [{:block/uuid block-uuid
+                              :block/title ""}]
+                            local-parent {:sibling? false :keep-uuid? true}))
+            (transact-db! :update-block-order-directly repo conn block-uuid first-remote-parent remote-block-order))
+
+        [false true false]
+        (if move?
+          (transact-db! :move-blocks repo conn [b] local-parent
+                        {:sibling? false})
+          (transact-db! :insert-no-order-blocks conn [[block-uuid first-remote-parent]]))
+
+        [false false true] ;no parent, only update order. e.g. udpate property's order
+        (when (and (empty? remote-parents) move?)
+          (transact-db! :update-block-order-directly repo conn block-uuid nil remote-block-order))
+
+        ([true false false] [true false true] [true true false] [true true true])
+        (throw (ex-info "Not implemented yet for whiteboard" {:op-value op-value}))
+
+        (let [e (ex-info "Don't know where to insert" {:block-uuid block-uuid
+                                                       :remote-parents remote-parents
+                                                       :remote-block-order remote-block-order
+                                                       :move? move?
+                                                       :op-value op-value})]
+          (log/error :insert-or-move-block e)
+          (throw e))))))
 
 (defn- move-ops-map->sorted-move-ops
   [move-ops-map]