|  | @@ -759,25 +759,31 @@
 | 
	
		
			
				|  |  |                       :keep-uuid? keep-uuid?
 | 
	
		
			
				|  |  |                       :move? move?
 | 
	
		
			
				|  |  |                       :outliner-op outliner-op}
 | 
	
		
			
				|  |  | -        tx' (insert-blocks-aux blocks' target-block' insert-opts)
 | 
	
		
			
				|  |  | -        uuids-tx (->> (map :block/uuid tx')
 | 
	
		
			
				|  |  | -                      (remove nil?)
 | 
	
		
			
				|  |  | -                      (map (fn [uuid] {:block/uuid uuid})))
 | 
	
		
			
				|  |  | -        tx (if move?
 | 
	
		
			
				|  |  | -             tx'
 | 
	
		
			
				|  |  | -             (assign-temp-id tx' replace-empty-target? target-block'))
 | 
	
		
			
				|  |  | -        target-node (block @conn target-block')
 | 
	
		
			
				|  |  | -        next (if sibling?
 | 
	
		
			
				|  |  | -               (otree/-get-right target-node conn)
 | 
	
		
			
				|  |  | -               (otree/-get-down target-node conn))
 | 
	
		
			
				|  |  | -        next-tx (when (and next
 | 
	
		
			
				|  |  | -                           (if move? (not (contains? (set (map :db/id blocks)) (:db/id (:data next)))) true))
 | 
	
		
			
				|  |  | -                  (when-let [left (last (filter (fn [b] (= 1 (:block/level b))) tx))]
 | 
	
		
			
				|  |  | -                    [{:block/uuid (otree/-get-id next conn)
 | 
	
		
			
				|  |  | -                      :block/left (:db/id left)}]))
 | 
	
		
			
				|  |  | -        full-tx (util/concat-without-nil (if (and keep-uuid? replace-empty-target?) (rest uuids-tx) uuids-tx) tx next-tx)]
 | 
	
		
			
				|  |  | -    {:tx-data full-tx
 | 
	
		
			
				|  |  | -     :blocks  tx}))
 | 
	
		
			
				|  |  | +        tx' (insert-blocks-aux blocks' target-block' insert-opts)]
 | 
	
		
			
				|  |  | +    (if (some (fn [b] (or (nil? (:block/parent b)) (nil? (:block/left b)))) tx')
 | 
	
		
			
				|  |  | +      (throw (ex-info "Invalid outliner data"
 | 
	
		
			
				|  |  | +                        {:opts insert-opts
 | 
	
		
			
				|  |  | +                         :tx (vec tx')
 | 
	
		
			
				|  |  | +                         :blocks (vec blocks)
 | 
	
		
			
				|  |  | +                         :target-block target-block'}))
 | 
	
		
			
				|  |  | +      (let [uuids-tx (->> (map :block/uuid tx')
 | 
	
		
			
				|  |  | +                          (remove nil?)
 | 
	
		
			
				|  |  | +                          (map (fn [uuid] {:block/uuid uuid})))
 | 
	
		
			
				|  |  | +            tx (if move?
 | 
	
		
			
				|  |  | +                 tx'
 | 
	
		
			
				|  |  | +                 (assign-temp-id tx' replace-empty-target? target-block'))
 | 
	
		
			
				|  |  | +            target-node (block @conn target-block')
 | 
	
		
			
				|  |  | +            next (if sibling?
 | 
	
		
			
				|  |  | +                   (otree/-get-right target-node conn)
 | 
	
		
			
				|  |  | +                   (otree/-get-down target-node conn))
 | 
	
		
			
				|  |  | +            next-tx (when (and next
 | 
	
		
			
				|  |  | +                               (if move? (not (contains? (set (map :db/id blocks)) (:db/id (:data next)))) true))
 | 
	
		
			
				|  |  | +                      (when-let [left (last (filter (fn [b] (= 1 (:block/level b))) tx))]
 | 
	
		
			
				|  |  | +                        [{:block/uuid (otree/-get-id next conn)
 | 
	
		
			
				|  |  | +                          :block/left (:db/id left)}]))
 | 
	
		
			
				|  |  | +            full-tx (util/concat-without-nil (if (and keep-uuid? replace-empty-target?) (rest uuids-tx) uuids-tx) tx next-tx)]
 | 
	
		
			
				|  |  | +        {:tx-data full-tx
 | 
	
		
			
				|  |  | +         :blocks  tx}))))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  (defn- build-move-blocks-next-tx
 | 
	
		
			
				|  |  |    [db target-block blocks {:keys [sibling? _non-consecutive-blocks?]}]
 |