mirror of
https://github.com/logseq/logseq.git
synced 2026-05-03 10:26:35 +00:00
fix: paste nested blocks
This commit is contained in:
@@ -1907,6 +1907,11 @@
|
||||
(edit-block! last-block' :max (:block/uuid last-block')))))
|
||||
0))
|
||||
|
||||
(defn- nested-blocks
|
||||
[blocks]
|
||||
(let [ids (set (map :db/id blocks))]
|
||||
(some? (some #(ids (:db/id (:block/parent %))) blocks))))
|
||||
|
||||
(defn paste-blocks
|
||||
"Given a vec of blocks, insert them into the target page.
|
||||
keep-uuid?: if true, keep the uuid provided in the block structure."
|
||||
@@ -1926,12 +1931,25 @@
|
||||
block (db/entity (:db/id target-block))
|
||||
page (if (:block/name block) block
|
||||
(when target-block (:block/page (db/entity (:db/id target-block)))))
|
||||
target-block (or target-block editing-block)
|
||||
empty-target? (string/blank? (:block/content target-block))
|
||||
paste-nested-blocks? (nested-blocks blocks)
|
||||
target-block-has-children? (db/has-children? (:block/uuid target-block))
|
||||
replace-empty-target? (if (and paste-nested-blocks? empty-target?
|
||||
target-block-has-children?)
|
||||
false
|
||||
true)
|
||||
target-block' (if replace-empty-target? target-block
|
||||
(db/pull (:db/id (:block/left target-block))))
|
||||
sibling? (cond
|
||||
(and paste-nested-blocks? empty-target?)
|
||||
(if (= (:block/parent target-block') (:block/parent target-block))
|
||||
true
|
||||
false)
|
||||
|
||||
(some? sibling?)
|
||||
sibling?
|
||||
|
||||
(db/has-children? (:block/uuid target-block))
|
||||
target-block-has-children?
|
||||
false
|
||||
|
||||
:else
|
||||
@@ -1944,15 +1962,15 @@
|
||||
|
||||
(outliner-tx/transact!
|
||||
{:outliner-op :insert-blocks}
|
||||
(when target-block
|
||||
(let [format (or (:block/format target-block) (state/get-preferred-format))
|
||||
(when target-block'
|
||||
(let [format (or (:block/format target-block') (state/get-preferred-format))
|
||||
blocks' (map (fn [block]
|
||||
(paste-block-cleanup block page exclude-properties format content-update-fn))
|
||||
blocks)
|
||||
result (outliner-core/insert-blocks! blocks' target-block {:sibling? sibling?
|
||||
:outliner-op :paste
|
||||
:replace-empty-target? true
|
||||
:keep-uuid? keep-uuid?})]
|
||||
result (outliner-core/insert-blocks! blocks' target-block' {:sibling? sibling?
|
||||
:outliner-op :paste
|
||||
:replace-empty-target? replace-empty-target?
|
||||
:keep-uuid? keep-uuid?})]
|
||||
(edit-last-block-after-inserted! result))))))
|
||||
|
||||
(defn- block-tree->blocks
|
||||
|
||||
Reference in New Issue
Block a user