fix: undo && redo

:refresh-ui has been removed to ensure batch txs to be transacted
to the UI db before refreshing UI
enhance/e2e-browser
Tienson Qin 2024-04-10 15:01:27 +08:00
parent b5c3757139
commit b4154c683a
2 changed files with 24 additions and 28 deletions

View File

@ -4,15 +4,8 @@
(defmacro with-batch-tx-mode (defmacro with-batch-tx-mode
"1. start batch-tx mode "1. start batch-tx mode
2. run body 2. run body
3. exit batch-tx mode 3. exit batch-tx mode"
4. refresh-ui" [& body]
[conn & body]
`(do (frontend.worker.batch-tx/start-batch-tx-mode) `(do (frontend.worker.batch-tx/start-batch-tx-mode)
~@body ~@body
(let [txs# (frontend.worker.batch-tx/get-batch-txs)] (frontend.worker.batch-tx/exit-batch-tx-mode)))
(frontend.worker.batch-tx/exit-batch-tx-mode)
(when (seq txs#)
(when-let [affected-keys# (not-empty
(frontend.worker.react/get-affected-queries-keys
{:db-after @~conn :tx-data txs#}))]
(frontend.worker.util/post-message :refresh-ui {:affected-keys affected-keys#}))))))

View File

@ -78,7 +78,7 @@
[repo conn tx-report context] [repo conn tx-report context]
(when-not (:pipeline-replace? (:tx-meta tx-report)) (when-not (:pipeline-replace? (:tx-meta tx-report))
(let [tx-meta (:tx-meta tx-report) (let [tx-meta (:tx-meta tx-report)
{:keys [from-disk? new-graph? undo? redo?]} tx-meta] {:keys [from-disk? new-graph?]} tx-meta]
(if (or from-disk? new-graph?) (if (or from-disk? new-graph?)
{:tx-report tx-report} {:tx-report tx-report}
(let [{:keys [pages blocks]} (ds-report/get-blocks-and-pages tx-report) (let [{:keys [pages blocks]} (ds-report/get-blocks-and-pages tx-report)
@ -88,24 +88,23 @@
(when (d/entity @conn page-id) (when (d/entity @conn page-id)
(file/sync-to-file repo page-id tx-meta))))) (file/sync-to-file repo page-id tx-meta)))))
deleted-block-uuids (set (outliner-pipeline/filter-deleted-blocks (:tx-data tx-report))) deleted-block-uuids (set (outliner-pipeline/filter-deleted-blocks (:tx-data tx-report)))
replace-tx (when-not (or undo? redo?) replace-tx (concat
(concat
;; block path refs ;; block path refs
(set (compute-block-path-refs-tx tx-report blocks)) (set (compute-block-path-refs-tx tx-report blocks))
;; delete empty property parent block ;; delete empty property parent block
(when (seq deleted-block-uuids) (when (seq deleted-block-uuids)
(delete-property-parent-block-if-empty tx-report deleted-block-uuids)) (delete-property-parent-block-if-empty tx-report deleted-block-uuids))
;; update block/tx-id ;; update block/tx-id
(let [updated-blocks (remove (fn [b] (contains? (set deleted-block-uuids) (:block/uuid b))) blocks) (let [updated-blocks (remove (fn [b] (contains? (set deleted-block-uuids) (:block/uuid b))) blocks)
tx-id (get-in tx-report [:tempids :db/current-tx])] tx-id (get-in tx-report [:tempids :db/current-tx])]
(->> (->>
(map (fn [b] (map (fn [b]
(when-let [db-id (:db/id b)] (when-let [db-id (:db/id b)]
{:db/id db-id {:db/id db-id
:block/tx-id tx-id})) updated-blocks) :block/tx-id tx-id})) updated-blocks)
(remove nil?))))) (remove nil?))))
tx-report' (or tx-report' (or
(when (seq replace-tx) (when (seq replace-tx)
;; TODO: remove this since transact! is really slow ;; TODO: remove this since transact! is really slow
@ -115,13 +114,17 @@
(d/store @conn) (d/store @conn)
tx-report)) tx-report))
fix-tx-data (validate-and-fix-db! repo conn tx-report context) fix-tx-data (validate-and-fix-db! repo conn tx-report context)
full-tx-data (concat (:tx-data tx-report) fix-tx-data (:tx-data tx-report')) batch-processing? (batch-tx/tx-batch-processing?)
batch-tx-data (batch-tx/get-batch-txs)
full-tx-data (concat (:tx-data tx-report)
fix-tx-data
(:tx-data tx-report')
(when (and (not batch-processing?) (seq batch-tx-data))
batch-tx-data))
final-tx-report (assoc tx-report' final-tx-report (assoc tx-report'
:tx-data full-tx-data :tx-data full-tx-data
:db-before (:db-before tx-report)) :db-before (:db-before tx-report))
batch-processing? (batch-tx/tx-batch-processing?) affected-query-keys (when-not (:importing? context)
affected-query-keys (when-not (or (:importing? context)
batch-processing?)
(worker-react/get-affected-queries-keys final-tx-report))] (worker-react/get-affected-queries-keys final-tx-report))]
(when batch-processing? (when batch-processing?
(batch-tx/conj-batch-txs! full-tx-data)) (batch-tx/conj-batch-txs! full-tx-data))