Browse Source

fix: can't undo pasting at empty block

Tienson Qin 3 weeks ago
parent
commit
079c8944b8

+ 2 - 0
clj-e2e/src/logseq/e2e/block.clj

@@ -84,6 +84,8 @@
 
 (def copy #(k/press "ControlOrMeta+c" {:delay 100}))
 (def paste #(k/press "ControlOrMeta+v" {:delay 100}))
+(def undo #(k/press "ControlOrMeta+z" {:delay 100}))
+(def redo #(k/press "ControlOrMeta+y" {:delay 100}))
 
 (defn- indent-outdent
   [indent?]

+ 34 - 0
clj-e2e/test/logseq/e2e/undo_redo_test.clj

@@ -0,0 +1,34 @@
+(ns logseq.e2e.undo-redo-test
+  (:require
+   [clojure.set :as set]
+   [clojure.test :refer [deftest testing is use-fixtures]]
+   [logseq.e2e.assert :as assert]
+   [logseq.e2e.block :as b]
+   [logseq.e2e.fixtures :as fixtures]
+   [logseq.e2e.keyboard :as k]
+   [logseq.e2e.page :as p]
+   [logseq.e2e.util :as util]
+   [wally.main :as w]
+   [wally.repl :as repl]))
+
+(use-fixtures :once fixtures/open-page)
+
+(use-fixtures :each
+  fixtures/new-logseq-page
+  fixtures/validate-graph)
+
+(deftest undo-redo-paste
+  (testing "Undo redo paste blocks"
+    (b/new-blocks ["b1" "b2"])
+    (b/select-blocks 2)
+    (b/copy)
+    (b/new-block "")
+    (b/paste)
+    (util/exit-edit)
+    (is (= ["b1" "b2" "b1" "b2"] (util/get-page-blocks-contents)))
+    (b/undo)
+    (util/exit-edit)
+    (is (= ["b1" "b2"] (util/get-page-blocks-contents)))
+    (b/redo)
+    (util/exit-edit)
+    (is (= ["b1" "b2" "b1" "b2"] (util/get-page-blocks-contents)))))

+ 3 - 1
src/main/frontend/undo_redo.cljs

@@ -267,7 +267,9 @@
         (let [{:keys [tx-data tx-meta] :as data} (some #(when (= ::db-transact (first %))
                                                           (second %)) op)]
           (when (seq tx-data)
-            (let [reversed-tx-data (get-reversed-datoms conn undo? data tx-meta)
+            (let [reversed-tx-data (cond-> (get-reversed-datoms conn undo? data tx-meta)
+                                     undo?
+                                     reverse)
                   tx-meta' (-> tx-meta
                                (dissoc :batch-tx/batch-tx-mode?)
                                (assoc