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

This commit is contained in:
rcmerci
2025-09-06 16:11:57 +08:00
parent a6b7951804
commit 24e9896fb7

View File

@@ -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))
(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 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))
[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}))
([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})))))
(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]