|  | @@ -616,17 +616,23 @@
 | 
	
		
			
				|  |  |                   blocks)))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  (defn- get-target-block
 | 
	
		
			
				|  |  | -  [target-block sibling?]
 | 
	
		
			
				|  |  | +  [target-block sibling? outliner-op]
 | 
	
		
			
				|  |  |    (when-let [block (if (:db/id target-block)
 | 
	
		
			
				|  |  |                       (db/entity (:db/id target-block))
 | 
	
		
			
				|  |  |                       (when (:block/uuid target-block)
 | 
	
		
			
				|  |  |                         (db/entity [:block/uuid (:block/uuid target-block)])))]
 | 
	
		
			
				|  |  | -    (if-let [linked (:block/link block)]
 | 
	
		
			
				|  |  | -      (let [last-child (some-> (db-model/get-block-last-direct-child (conn/get-db) (:db/id linked))
 | 
	
		
			
				|  |  | -                               db/entity)
 | 
	
		
			
				|  |  | -            target (or last-child linked)]
 | 
	
		
			
				|  |  | -        [target (if last-child true false)])
 | 
	
		
			
				|  |  | -      [block sibling?])))
 | 
	
		
			
				|  |  | +    (let [linked (:block/link block)]
 | 
	
		
			
				|  |  | +      (cond
 | 
	
		
			
				|  |  | +        (contains? #{:insert-blocks} outliner-op)
 | 
	
		
			
				|  |  | +        [block sibling?]
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        linked
 | 
	
		
			
				|  |  | +        (let [last-child (some-> (db-model/get-block-last-direct-child (conn/get-db) (:db/id linked))
 | 
	
		
			
				|  |  | +                                 db/entity)
 | 
	
		
			
				|  |  | +              target (or last-child linked)]
 | 
	
		
			
				|  |  | +          [target (if last-child true false)])
 | 
	
		
			
				|  |  | +        :else
 | 
	
		
			
				|  |  | +        [block sibling?]))))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  (defn insert-blocks
 | 
	
		
			
				|  |  |    "Insert blocks as children (or siblings) of target-node.
 | 
	
	
		
			
				|  | @@ -645,7 +651,7 @@
 | 
	
		
			
				|  |  |    [blocks target-block {:keys [sibling? keep-uuid? outliner-op replace-empty-target?] :as opts}]
 | 
	
		
			
				|  |  |    {:pre [(seq blocks)
 | 
	
		
			
				|  |  |           (s/valid? ::block-map-or-entity target-block)]}
 | 
	
		
			
				|  |  | -  (let [[target-block' sibling?] (get-target-block target-block sibling?)
 | 
	
		
			
				|  |  | +  (let [[target-block' sibling?] (get-target-block target-block sibling? outliner-op)
 | 
	
		
			
				|  |  |          _ (assert (some? target-block') (str "Invalid target: " target-block))
 | 
	
		
			
				|  |  |          sibling? (if (page-block? target-block') false sibling?)
 | 
	
		
			
				|  |  |          move? (contains? #{:move-blocks :move-blocks-up-down :indent-outdent-blocks} outliner-op)
 | 
	
	
		
			
				|  | @@ -829,7 +835,7 @@
 | 
	
		
			
				|  |  |    [blocks target-block {:keys [sibling? outliner-op]}]
 | 
	
		
			
				|  |  |    [:pre [(seq blocks)
 | 
	
		
			
				|  |  |           (s/valid? ::block-map-or-entity target-block)]]
 | 
	
		
			
				|  |  | -  (let [[target-block sibling?] (get-target-block target-block sibling?)
 | 
	
		
			
				|  |  | +  (let [[target-block sibling?] (get-target-block target-block sibling? outliner-op)
 | 
	
		
			
				|  |  |          _ (assert (some? target-block) (str "Invalid target: " target-block))
 | 
	
		
			
				|  |  |          non-consecutive-blocks? (seq (db-model/get-non-consecutive-blocks blocks))
 | 
	
		
			
				|  |  |          original-position? (move-to-original-position? blocks target-block sibling? non-consecutive-blocks?)]
 | 
	
	
		
			
				|  | @@ -996,7 +1002,7 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  (defn insert-blocks!
 | 
	
		
			
				|  |  |    [blocks target-block opts]
 | 
	
		
			
				|  |  | -  (let [r (op-transact! #'insert-blocks blocks target-block opts)
 | 
	
		
			
				|  |  | +  (let [r (op-transact! #'insert-blocks blocks target-block (assoc opts :outliner-op :insert-blocks))
 | 
	
		
			
				|  |  |          repo (:repo *transaction-args*)
 | 
	
		
			
				|  |  |          persist-op? (:persist-op? *transaction-args*)]
 | 
	
		
			
				|  |  |      (when (and persist-op? repo)
 | 
	
	
		
			
				|  | @@ -1009,7 +1015,7 @@
 | 
	
		
			
				|  |  |          persist-op? (:persist-op? *transaction-args*)]
 | 
	
		
			
				|  |  |      (when (and persist-op? repo)
 | 
	
		
			
				|  |  |        (rtc-op/<remove-blocks-op! repo (keep :block/uuid blocks))))
 | 
	
		
			
				|  |  | -  (op-transact! #'delete-blocks blocks opts))
 | 
	
		
			
				|  |  | +  (op-transact! #'delete-blocks blocks (assoc opts :outliner-op :delete-blocks)))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  (defn move-blocks!
 | 
	
		
			
				|  |  |    [blocks target-block sibling?]
 | 
	
	
		
			
				|  | @@ -1017,7 +1023,8 @@
 | 
	
		
			
				|  |  |          persist-op? (:persist-op? *transaction-args*)]
 | 
	
		
			
				|  |  |      (when (and persist-op? repo)
 | 
	
		
			
				|  |  |        (rtc-op/<move-blocks-op! repo (keep :block/uuid blocks))))
 | 
	
		
			
				|  |  | -  (op-transact! #'move-blocks blocks target-block {:sibling? sibling?}))
 | 
	
		
			
				|  |  | +  (op-transact! #'move-blocks blocks target-block {:sibling? sibling?
 | 
	
		
			
				|  |  | +                                                   :outliner-op :move-blocks}))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  (defn move-blocks-up-down!
 | 
	
		
			
				|  |  |    [blocks up?]
 |