fix: re-order selected blocks before bulk indent and delete

This commit is contained in:
Tienson Qin
2021-04-28 15:25:06 +08:00
parent 2e00beca77
commit 4c83040ec1
2 changed files with 29 additions and 20 deletions

View File

@@ -683,11 +683,23 @@
end-block-parent (get-end-block-parent end-block blocks)]
(outliner-core/block end-block-parent)))
(defn- reorder-blocks
[blocks]
(if (<= (count blocks) 1)
blocks
(let [[f s & others] blocks]
(if (= (or (:block/left s)
(:block/parent s))
{:db/id (:db/id f)})
blocks
(reverse blocks)))))
(defn delete-blocks!
[repo block-uuids]
(when (seq block-uuids)
(let [lookup-refs (map (fn [id] [:block/uuid id]) block-uuids)
blocks (db/pull-many repo '[*] lookup-refs)]
blocks (db/pull-many repo '[*] lookup-refs)
blocks (reorder-blocks blocks)]
(let [start-node (outliner-core/block (first blocks))
end-node (get-top-level-end-node blocks)]
(outliner-core/delete-nodes start-node end-node lookup-refs)
@@ -1544,29 +1556,29 @@
(cond
(seq blocks)
(do
(util/stop e)
(let [lookup-refs (->> (map (fn [block] (when-let [id (dom/attr block "blockid")]
[:block/uuid (medley/uuid id)])) blocks)
(remove nil?))
blocks (db/pull-many repo '[*] lookup-refs)
end-node (get-top-level-end-node blocks)
end-node-parent (tree/-get-parent end-node)
top-level-nodes (->> (filter #(= (get-in end-node-parent [:data :db/id])
(get-in % [:block/parent :db/id])) blocks)
(map outliner-core/block))]
(outliner-core/indent-outdent-nodes top-level-nodes (= direction :right))
(let [opts {:key :block/change
:data blocks}]
(db/refresh! repo opts)
(let [blocks (doall
(map
(remove nil?))
blocks (db/pull-many repo '[*] lookup-refs)
blocks (reorder-blocks blocks)
end-node (get-top-level-end-node blocks)
end-node-parent (tree/-get-parent end-node)
top-level-nodes (->> (filter #(= (get-in end-node-parent [:data :db/id])
(get-in % [:block/parent :db/id])) blocks)
(map outliner-core/block))]
(outliner-core/indent-outdent-nodes top-level-nodes (= direction :right))
(let [opts {:key :block/change
:data blocks}]
(db/refresh! repo opts)
(let [blocks (doall
(map
(fn [block]
(when-let [id (gobj/get block "id")]
(when-let [block (gdom/getElement id)]
(dom/add-class! block "selected noselect")
block)))
blocks-dom-nodes))]
(state/set-selection-blocks! blocks)))))
(state/set-selection-blocks! blocks)))))
(gdom/getElement "date-time-picker")
nil