fix: undo need multiple steps

pull/2952/head
Tienson Qin 2021-10-12 14:28:29 +08:00
parent 788dd59c02
commit f134bf11d9
2 changed files with 29 additions and 19 deletions

View File

@ -49,7 +49,8 @@
[medley.core :as medley]
[promesa.core :as p]
["/frontend/utils" :as utils]
[frontend.mobile.util :as mobile]))
[frontend.mobile.util :as mobile]
[frontend.modules.outliner.datascript :as ds]))
;; FIXME: should support multiple images concurrently uploading
@ -467,13 +468,17 @@
:else
(not has-children?))]
(let [*blocks (atom [current-node])]
(when-not skip-save-current-block?
(outliner-core/save-node current-node))
(outliner-core/insert-node new-node current-node sibling? {:blocks-atom *blocks
:skip-transact? false})
{:blocks @*blocks
:sibling? sibling?})))
(ds/auto-transact!
[txs-state (ds/new-outliner-txs-state)]
{:outliner-op :save-and-insert-node
:skip-transact? false}
(let [*blocks (atom [current-node])]
(when-not skip-save-current-block?
(outliner-core/save-node current-node {:txs-state txs-state}))
(outliner-core/insert-node new-node current-node sibling? {:blocks-atom *blocks
:txs-state txs-state})
{:blocks @*blocks
:sibling? sibling?}))))
(defn- block-self-alone-when-insert?
[config uuid]

View File

@ -216,11 +216,14 @@
sorted-children)))))))))
(defn save-node
[node]
{:pre [(tree/satisfied-inode? node)]}
(ds/auto-transact!
[db (ds/new-outliner-txs-state)] {:outliner-op :save-node}
(tree/-save node db)))
([node]
(save-node node nil))
([node {:keys [txs-state]}]
(if txs-state
(tree/-save node txs-state)
(ds/auto-transact!
[db (ds/new-outliner-txs-state)] {:outliner-op :save-node}
(tree/-save node db)))))
(defn insert-node-as-first-child
"Insert a node as first child."
@ -282,13 +285,15 @@
(defn insert-node
([new-node target-node sibling?]
(insert-node new-node target-node sibling? nil))
([new-node target-node sibling? {:keys [blocks-atom skip-transact?]
([new-node target-node sibling? {:keys [blocks-atom skip-transact? txs-state]
:or {skip-transact? false}}]
(ds/auto-transact!
[txs-state (ds/new-outliner-txs-state)]
{:outliner-op :insert-node
:skip-transact? skip-transact?}
(insert-node-aux new-node target-node sibling? txs-state blocks-atom))))
(if txs-state
(insert-node-aux new-node target-node sibling? txs-state blocks-atom)
(ds/auto-transact!
[txs-state (ds/new-outliner-txs-state)]
{:outliner-op :insert-node
:skip-transact? skip-transact?}
(insert-node-aux new-node target-node sibling? txs-state blocks-atom)))))
(defn- walk-&-insert-nodes
[loc target-node sibling? transact]