From cada6e2d9b77cd49d24bb4a1a248705639944f05 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Mon, 22 Jul 2024 21:14:59 +0800 Subject: [PATCH] fix: delete tagged block --- .../src/logseq/db/frontend/delete_blocks.cljs | 47 +++++++------------ deps/outliner/src/logseq/outliner/core.cljs | 2 +- src/main/frontend/handler/editor.cljs | 10 ++-- src/main/frontend/worker/undo_redo2.cljs | 3 +- 4 files changed, 23 insertions(+), 39 deletions(-) diff --git a/deps/db/src/logseq/db/frontend/delete_blocks.cljs b/deps/db/src/logseq/db/frontend/delete_blocks.cljs index 11e3cd2974..9d1ef4b46b 100644 --- a/deps/db/src/logseq/db/frontend/delete_blocks.cljs +++ b/deps/db/src/logseq/db/frontend/delete_blocks.cljs @@ -7,43 +7,30 @@ [logseq.db.frontend.entity-plus :as entity-plus] [logseq.db.sqlite.util :as sqlite-util])) -(defn- build-retracted-tx [retracted-blocks replacing-block-ref] +(defn- build-retracted-tx [retracted-blocks] (->> (for [block retracted-blocks] (let [refs (:block/_refs block)] (mapcat (fn [ref] - (if replacing-block-ref - (let [id (:db/id ref) - new-content (some-> (:block/title ref) - (string/replace (block-ref/->block-ref (str (:block/uuid block))) - (block-ref/->block-ref (str (:block/uuid replacing-block-ref))))) - tx (cond-> - [[:db/retract (:db/id ref) :block/refs (:db/id block)] - [:db/retract (:db/id ref) :block/path-refs (:db/id block)] - [:db/add (:db/id ref) :block/refs (:db/id replacing-block-ref)] - [:db/add (:db/id ref) :block/path-refs (:db/id replacing-block-ref)]] - new-content - (conj [:db/add id :block/title new-content]))] - tx) - (let [id (:db/id ref) - block-content (:block/title block) - new-content (some-> (:block/title ref) - (string/replace (re-pattern (common-util/format "(?i){{embed \\(\\(%s\\)\\)\\s?}}" (str (:block/uuid block)))) - block-content) - (string/replace (block-ref/->block-ref (str (:block/uuid block))) - block-content)) - tx (cond-> - [[:db/retract (:db/id ref) :block/refs (:db/id block)] - [:db/retract (:db/id ref) :block/path-refs (:db/id block)]] - new-content - (conj [:db/add id :block/title new-content]))] - tx))) + (let [id (:db/id ref) + block-content (:block/title block) + new-content (some-> (:block/title ref) + (string/replace (re-pattern (common-util/format "(?i){{embed \\(\\(%s\\)\\)\\s?}}" (str (:block/uuid block)))) + block-content) + (string/replace (block-ref/->block-ref (str (:block/uuid block))) + block-content)) + tx (cond-> + [[:db/retract (:db/id ref) :block/refs (:db/id block)] + [:db/retract (:db/id ref) :block/path-refs (:db/id block)]] + new-content + (conj [:db/add id :block/title new-content]))] + tx)) refs))) (apply concat))) (defn update-refs-and-macros "When a block is deleted, refs are updated. For file graphs, macros associated with the block are also deleted" - [db txs {:keys [outliner-op ref-replace-prev-block-id]}] + [db txs _opts] (let [retracted-block-ids (->> (keep (fn [tx] (when (and (vector? tx) (contains? #{:db.fn/retractEntity :db/retractEntity} (first tx))) @@ -52,9 +39,7 @@ (not (sqlite-util/page? (d/entity db id))))))] (when (seq retracted-block-ids) (let [retracted-blocks (map #(d/entity db %) retracted-block-ids) - replacing-block-ref (and (= outliner-op :delete-blocks) - (some->> ref-replace-prev-block-id (d/entity db))) - retracted-tx (build-retracted-tx retracted-blocks replacing-block-ref) + retracted-tx (build-retracted-tx retracted-blocks) macros-tx (when-not (entity-plus/db-based-graph? db) (mapcat (fn [b] ;; Only delete if last reference diff --git a/deps/outliner/src/logseq/outliner/core.cljs b/deps/outliner/src/logseq/outliner/core.cljs index df47aa8ee7..ec3bc749f0 100644 --- a/deps/outliner/src/logseq/outliner/core.cljs +++ b/deps/outliner/src/logseq/outliner/core.cljs @@ -912,7 +912,7 @@ (op-transact! (fn [_repo conn blocks] (let [{:keys [tx-data]} (#'delete-blocks conn blocks)] {:tx-data tx-data - :tx-meta (select-keys opts [:outliner-op :ref-replace-prev-block-id])})) repo conn blocks opts)) + :tx-meta (select-keys opts [:outliner-op])})) repo conn blocks opts)) (defn move-blocks! [repo conn blocks target-block sibling?] diff --git a/src/main/frontend/handler/editor.cljs b/src/main/frontend/handler/editor.cljs index 1849134541..f9d73b4e8a 100644 --- a/src/main/frontend/handler/editor.cljs +++ b/src/main/frontend/handler/editor.cljs @@ -835,10 +835,7 @@ (util/get-prev-block-non-collapsed-non-embed block-parent)) {:keys [prev-block new-content edit-block-f]} (move-to-prev-block repo sibling-block format value) concat-prev-block? (boolean (and prev-block new-content)) - transact-opts (cond-> {:outliner-op :delete-blocks} - (and concat-prev-block? (seq (:block/_refs block-e))) - ;; Replace existing block refs with prev-block - (assoc :ref-replace-prev-block-id (:db/id prev-block)))] + transact-opts {:outliner-op :delete-blocks}] (cond (and prev-block (:block/name prev-block) (not= (:db/id prev-block) (:db/id (:block/parent block))) @@ -848,7 +845,10 @@ concat-prev-block? (let [children (:block/_parent (db/entity (:db/id block))) db-based? (config/db-based-graph? repo) - delete-prev-block? (and db-based? (seq (:block/properties block)) (empty? (:block/properties prev-block)))] + delete-prev-block? (and db-based? + (empty? (:block/tags block)) + (seq (:block/properties block)) + (empty? (:block/properties prev-block)))] (if delete-prev-block? (p/do! (ui-outliner-tx/transact! diff --git a/src/main/frontend/worker/undo_redo2.cljs b/src/main/frontend/worker/undo_redo2.cljs index 28439ea47c..0bcfd6c896 100644 --- a/src/main/frontend/worker/undo_redo2.cljs +++ b/src/main/frontend/worker/undo_redo2.cljs @@ -243,8 +243,7 @@ :undo? undo?}))) ;; block has been moved or target got deleted by another client - (and (moved-block-or-target-deleted? conn e->datoms e moved-blocks redo?) - (not (:ref-replace-prev-block-id tx-meta))) + (and (moved-block-or-target-deleted? conn e->datoms e moved-blocks redo?)) (throw (ex-info "This block has been moved or its target has been deleted" (merge op {:error :block-moved-or-target-deleted :undo? undo?})))