fix(rtc): insert blocks in whiteboard

pull/10544/head
rcmerci 2023-11-21 14:46:43 +08:00
parent 1b3f4ee17e
commit 0879def32b
1 changed files with 17 additions and 4 deletions

View File

@ -102,6 +102,10 @@
(defmethod transact-db! :raw [_ & args]
(apply db/transact! args))
(defn- whiteboard-page-block?
[block]
(contains? (set (:block/type block)) "whiteboard"))
(defn apply-remote-remove-ops
[repo remove-ops]
(prn :remove-ops remove-ops)
@ -113,9 +117,11 @@
(defn- insert-or-move-block
[repo block-uuid remote-parents remote-left-uuid move?]
(when (and (seq remote-parents) remote-left-uuid)
(let [local-left (db/pull repo '[*] [:block/uuid remote-left-uuid])
first-remote-parent (first remote-parents)
(let [first-remote-parent (first remote-parents)
local-parent (db/pull repo '[*] [:block/uuid first-remote-parent])
whiteboard-page-block? (whiteboard-page-block? local-parent)
;; when insert blocks in whiteboard, local-left is ignored
local-left (when-not whiteboard-page-block? (db/pull repo '[*] [:block/uuid remote-left-uuid]))
b {:block/uuid block-uuid}
;; b-ent (db/entity repo [:block/uuid (uuid block-uuid-str)])
]
@ -172,6 +178,7 @@
(move-ops-map->sorted-move-ops move-ops-map))
(defn- check-block-pos
"NOTE: some blocks don't have :block/left (e.g. whiteboard blocks)"
[repo block-uuid remote-parents remote-left-uuid]
(let [local-b (db/pull repo '[{:block/left [:block/uuid]}
{:block/parent [:block/uuid]}
@ -182,8 +189,14 @@
(nil? local-b)
:not-exist
(not (and (= (:block/uuid (:block/parent local-b)) remote-parent-uuid)
(= (:block/uuid (:block/left local-b)) remote-left-uuid)))
(and (nil? (:block/left local-b))
(not= (:block/uuid (:block/parent local-b)) remote-parent-uuid))
;; blocks don't have :block/left
:wrong-pos
(and (:block/left local-b)
(or (not= (:block/uuid (:block/parent local-b)) remote-parent-uuid)
(not= (:block/uuid (:block/left local-b)) remote-left-uuid)))
:wrong-pos
:else nil)))