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