mirror of https://github.com/logseq/logseq
fix: undo && redo
:refresh-ui has been removed to ensure batch txs to be transacted to the UI db before refreshing UIenhance/e2e-browser
parent
b5c3757139
commit
b4154c683a
|
@ -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#}))))))
|
|
||||||
|
|
|
@ -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))
|
||||||
|
|
Loading…
Reference in New Issue