From f134bf11d986f866b28abfe27c96cc40b342bf88 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Tue, 12 Oct 2021 14:28:29 +0800 Subject: [PATCH] fix: undo need multiple steps --- src/main/frontend/handler/editor.cljs | 21 +++++++++------ src/main/frontend/modules/outliner/core.cljs | 27 ++++++++++++-------- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/src/main/frontend/handler/editor.cljs b/src/main/frontend/handler/editor.cljs index d0a0ec717..be7917d9d 100644 --- a/src/main/frontend/handler/editor.cljs +++ b/src/main/frontend/handler/editor.cljs @@ -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] diff --git a/src/main/frontend/modules/outliner/core.cljs b/src/main/frontend/modules/outliner/core.cljs index 927b2c999..5a7dec4c8 100644 --- a/src/main/frontend/modules/outliner/core.cljs +++ b/src/main/frontend/modules/outliner/core.cljs @@ -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]