fix: page rename undo/redo

This commit is contained in:
Tienson Qin
2024-01-14 16:33:50 +08:00
parent 54106610cb
commit 029ed109b9
7 changed files with 39 additions and 31 deletions

View File

@@ -44,7 +44,9 @@ test('undo/redo of a renamed page should be preserved', async ({ page, block })
await renamePage(page, randomString(10))
await page.keyboard.press(modKey + '+z')
await page.keyboard.press(modKey + '+z') // undo rename page
await page.waitForTimeout(100)
await page.keyboard.press(modKey + '+z') // undo text edit
await page.waitForTimeout(100)
await expect(page.locator('text="text 1"')).toHaveCount(0)

View File

@@ -253,12 +253,12 @@
(db/page-exists? @*title-value))
rename-fn (fn [old-name new-name]
(if (and whiteboard-page? (config/db-based-graph? (state/get-current-repo)))
(do
(db/transact! [{:db/id (:db/id page)
:block/original-name new-name
:block/name (util/page-name-sanity-lc new-name)
:block/updated-at (util/time-ms)}])
(route-handler/redirect-to-whiteboard! new-name))
(p/do!
(db/transact! [{:db/id (:db/id page)
:block/original-name new-name
:block/name (util/page-name-sanity-lc new-name)
:block/updated-at (util/time-ms)}])
(route-handler/redirect-to-whiteboard! new-name))
(page-handler/rename! old-name new-name)))
rollback-fn #(let [old-name (if untitled? "" old-name)]
(reset! *title-value old-name)
@@ -286,9 +286,9 @@
(rollback-fn))
:else
(do
(rename-fn (or title page-name) @*title-value)
(reset! *edit? false)))
(p/do!
(rename-fn (or title page-name) @*title-value)
(js/setTimeout #(reset! *edit? false) 100)))
(util/stop e))]
[:input.edit-input.p-0.focus:outline-none.ring-none
{:type "text"

View File

@@ -14,7 +14,6 @@
(defn save-code-editor!
[]
(let [{:keys [config state editor]} (get @state/state :editor/code-block-context)]
(state/set-state! :editor/skip-saving-current-block? true)
(state/set-block-component-editing-mode! false)
(when editor
(.save editor)

View File

@@ -1315,8 +1315,7 @@
(save-current-block! {}))
([{:keys [force? skip-properties? current-block] :as opts}]
;; non English input method
(let [result (when-not (or (state/editor-in-composition?)
@(:editor/skip-saving-current-block? @state/state))
(let [result (when-not (state/editor-in-composition?)
(when (state/get-current-repo)
(when-not (state/get-editor-action)
(try
@@ -1347,7 +1346,6 @@
(save-block-aux! db-block value opts))))
(catch :default error
(log/error :save-block-failed error))))))]
(state/set-state! :editor/skip-saving-current-block? false)
result)))
(defn- clean-content!

View File

@@ -4,7 +4,9 @@
[frontend.util.page :as page-util]
[frontend.state :as state]
[clojure.set :as set]
[medley.core :as medley]))
[medley.core :as medley]
[frontend.handler.route :as route-handler]
[promesa.core :as p]))
;;;; APIs
@@ -141,10 +143,14 @@
current-editor-cursor (get @(get @state/state :history/tx->editor-cursor) tx-id)
editor-cursor current-editor-cursor]
(push-redo e)
(transact! new-txs (merge {:undo? true}
tx-meta))
(when (:whiteboard/transact? tx-meta)
(state/pub-event! [:whiteboard/undo e]))
(p/do!
(transact! new-txs (merge {:undo? true}
tx-meta))
(when (:whiteboard/transact? tx-meta)
(state/pub-event! [:whiteboard/undo e]))
(when (= :rename-page (:outliner-op tx-meta))
(when-let [old-page (:old-name (:data tx-meta))]
(route-handler/redirect-to-page! old-page))))
(assoc e
:txs-op new-txs
:editor-cursor editor-cursor))))
@@ -155,10 +161,16 @@
(let [new-txs (get-txs true txs)
current-editor-cursor (get @(get @state/state :history/tx->editor-cursor) tx-id)]
(push-undo e)
(transact! new-txs (merge {:redo? true}
tx-meta))
(when (:whiteboard/transact? tx-meta)
(p/do!
(transact! new-txs (merge {:redo? true}
tx-meta))
(when (:whiteboard/transact? tx-meta)
(state/pub-event! [:whiteboard/redo e]))
(when (= :rename-page (:outliner-op tx-meta))
(when-let [new-page (:new-name (:data tx-meta))]
(route-handler/redirect-to-page! new-page))))
(assoc e
:txs-op new-txs
:editor-cursor current-editor-cursor))))

View File

@@ -58,12 +58,6 @@
(when (seq pages)
(mark-pages-as-loaded! repo pages)))
(when (= (:outliner-op tx-meta) :delete-page)
(state/pub-event! [:page/deleted repo (:deleted-page tx-meta) (:file-path tx-meta)]))
(when (= (:outliner-op tx-meta) :rename-page)
(state/pub-event! [:page/renamed repo (:data tx-meta)]))
(if (or from-disk? new-graph?)
(do
(react/clear-query-state!)
@@ -87,6 +81,12 @@
:tx-data (:tx-data tx-report)
:tx-meta (:tx-meta tx-report)}]))))
(when (= (:outliner-op tx-meta) :delete-page)
(state/pub-event! [:page/deleted repo (:deleted-page tx-meta) (:file-path tx-meta)]))
(when (= (:outliner-op tx-meta) :rename-page)
(state/pub-event! [:page/renamed repo (:data tx-meta)]))
(when-let [deleting-block-id (:ui/deleting-block @state/state)]
(when (some (fn [datom] (and
(= :block/uuid (:a datom))

View File

@@ -145,9 +145,6 @@
;; for audio record
:editor/record-status "NONE"
;; Whether to skip saving the current block
:editor/skip-saving-current-block? (atom false)
:editor/code-block-context {}
:db/properties-changed-pages {}