fix(rtc): sync blocks in whiteboards

pull/10639/head^2
rcmerci 2023-12-13 19:29:20 +08:00
parent 1b94ec61d1
commit 083618a427
1 changed files with 20 additions and 11 deletions

View File

@ -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)))