diff --git a/deps/db/src/logseq/db.cljs b/deps/db/src/logseq/db.cljs index c4f1f39399..e34b987f20 100644 --- a/deps/db/src/logseq/db.cljs +++ b/deps/db/src/logseq/db.cljs @@ -438,10 +438,21 @@ (defn get-block-refs [db id] - (let [alias (->> (get-block-alias db id) + (let [entity (d/entity db id) + alias (->> (get-block-alias db id) (cons id) distinct) - refs (->> (mapcat (fn [id] (:block/_path-refs (d/entity db id))) alias) + refs (->> (mapcat (fn [id] + (->> (:block/_refs (d/entity db id)) + (remove (fn [ref] + ;; remove refs that have the block as either tag or property + (or (and + (class? entity) + (d/datom db :eavt (:db/id ref) :block/tags (:db/id entity))) + (and + (property? entity) + (d/datom db :eavt (:db/id ref) (:db/ident entity)))))))) + alias) distinct)] (when (seq refs) (d/pull-many db '[*] (map :db/id refs))))) diff --git a/deps/db/src/logseq/db/frontend/view.cljs b/deps/db/src/logseq/db/frontend/view.cljs index d1492bf3d6..683cbabf67 100644 --- a/deps/db/src/logseq/db/frontend/view.cljs +++ b/deps/db/src/logseq/db/frontend/view.cljs @@ -5,6 +5,7 @@ [datascript.core :as d] [datascript.impl.entity :as de] [logseq.common.util :as common-util] + [logseq.db.common.sqlite :as sqlite-common-db] [logseq.db.frontend.class :as db-class] [logseq.db.frontend.entity-util :as entity-util] [logseq.db.frontend.property :as db-property] @@ -283,12 +284,12 @@ (take limit) ;; convert entity to map for serialization (map (fn [e] - (cond-> - (-> (into {} e) - (assoc - :id (:db/id e) - :db/id (:db/id e))) - all-pages? - (assoc :block.temp/refs-count (count (:block/_refs e)))))))] + (if all-pages? + {:block + (-> (into {} e) + (assoc + :db/id (:db/id e) + :block.temp/refs-count (count (:block/_refs e))))} + (sqlite-common-db/get-block-and-children db (:db/id e) {})))))] {:count (count data*) :data (vec data)}))))) diff --git a/src/main/frontend/components/block.cljs b/src/main/frontend/components/block.cljs index c035f29e0a..e8e3ab8320 100644 --- a/src/main/frontend/components/block.cljs +++ b/src/main/frontend/components/block.cljs @@ -3391,10 +3391,12 @@ (rum/defcs ^:large-vars/cleanup-todo block-container-inner < rum/reactive db-mixins/query {:init (fn [state] (let [*ref (atom nil) - block (nth (:rum/args state) 3) + args (:rum/args state) + [_state _ config block] args block-id (:db/id block) repo (state/get-current-repo)] - (db-async/> (concat property-values blocks) + (remove (fn [b] + (:block.temp/fully-loaded? (db/entity (:db/id b))))))] + (when (seq blocks') + (d/transact! (db/get-db false) blocks')))) + {:count count + :data blocks})) (rum/defc view < rum/static [{:keys [view-parent view-feature-type view-entity] :as option}]