mirror of
https://github.com/logseq/logseq.git
synced 2026-05-28 14:39:48 +00:00
fix: view does not update when adding or removing objects
This commit is contained in:
@@ -21,6 +21,7 @@
|
||||
[frontend.db :as db]
|
||||
[frontend.db-mixins :as db-mixins]
|
||||
[frontend.db.async :as db-async]
|
||||
[frontend.db.react :as react]
|
||||
[frontend.handler.db-based.export :as db-export-handler]
|
||||
[frontend.handler.db-based.property :as db-property-handler]
|
||||
[frontend.handler.editor :as editor-handler]
|
||||
@@ -39,7 +40,6 @@
|
||||
[logseq.db :as ldb]
|
||||
[logseq.db.common.view :as db-view]
|
||||
[logseq.db.frontend.property :as db-property]
|
||||
[logseq.db.frontend.property :as db-property]
|
||||
[logseq.shui.hooks :as hooks]
|
||||
[logseq.shui.ui :as shui]
|
||||
[medley.core :as medley]
|
||||
@@ -2037,7 +2037,8 @@
|
||||
(:logseq.property.linked-references/includes view-parent)
|
||||
(:logseq.property.linked-references/excludes view-parent)
|
||||
(:filters view-parent)
|
||||
query-entity-ids]))
|
||||
query-entity-ids
|
||||
(:data-changes-version option)]))
|
||||
(if loading?
|
||||
[:div.flex.flex-col.space-2.gap-2.my-2
|
||||
(repeat 3 (shui/skeleton {:class "h-6 w-full"}))]
|
||||
@@ -2061,10 +2062,24 @@
|
||||
:load-view-data load-view-data
|
||||
:set-view-entity! set-view-entity!))])))
|
||||
|
||||
(defn sub-view-data-changes
|
||||
[view-parent view-feature-type]
|
||||
(when view-parent
|
||||
(when-let [repo (state/get-current-repo)]
|
||||
(when-let [k (case view-feature-type
|
||||
:class-objects :frontend.worker.react/objects
|
||||
:linked-references :frontend.worker.react/refs
|
||||
nil)]
|
||||
(let [*version (atom 0)]
|
||||
(react/q repo [k (:db/id view-parent)]
|
||||
{:query-fn (fn [_] (swap! *version inc))}
|
||||
nil))))))
|
||||
|
||||
(rum/defc sub-view < rum/reactive db-mixins/query
|
||||
[view-entity option]
|
||||
(let [view (or (some-> (:db/id view-entity) db/sub-block) view-entity)]
|
||||
(view-aux view option)))
|
||||
(let [view (or (some-> (:db/id view-entity) db/sub-block) view-entity)
|
||||
data-changes-version (some-> (sub-view-data-changes (:view-parent option) (:view-feature-type option)) rum/react)]
|
||||
(view-aux view (assoc option :data-changes-version data-changes-version))))
|
||||
|
||||
(rum/defc view < rum/static
|
||||
[{:keys [view-parent view-feature-type view-entity] :as option}]
|
||||
@@ -2075,7 +2090,7 @@
|
||||
(hooks/use-effect!
|
||||
#(c.m/run-task*
|
||||
(m/sp
|
||||
(when-not query? ; TODO: move query logic to worker
|
||||
(when-not query?
|
||||
(let [repo (state/get-current-repo)]
|
||||
(when (and db-based? (not view-entity))
|
||||
(c.m/<? (db-async/<get-views repo (:db/id view-parent) view-feature-type))
|
||||
@@ -2092,6 +2107,8 @@
|
||||
(when (if db-based? view-entity (or view-entity view-parent
|
||||
(= view-feature-type :all-pages)))
|
||||
(let [option' (assoc option
|
||||
:view-feature-type (or view-feature-type
|
||||
(:logseq.property.view/feature-type view-entity))
|
||||
:views views
|
||||
:set-views! set-views!
|
||||
:set-view-entity! set-view-entity!)]
|
||||
|
||||
@@ -592,31 +592,18 @@ independent of format as format specific heading characters are stripped"
|
||||
(when repo
|
||||
(when (conn/get-db repo)
|
||||
(let [entity (db-utils/entity eid)
|
||||
ids (page-alias-set repo eid)]
|
||||
(->>
|
||||
(react/q repo
|
||||
[:frontend.worker.react/refs eid]
|
||||
{:query-fn (fn []
|
||||
(let [entities (mapcat (fn [id]
|
||||
(:block/_refs (db-utils/entity id))) ids)
|
||||
blocks (map (fn [e]
|
||||
{:block/parent (:block/parent e)
|
||||
:block/order (:block/order e)
|
||||
:block/page (:block/page e)
|
||||
:block/collapsed? (:block/collapsed? e)}) entities)]
|
||||
{:entities entities
|
||||
:blocks blocks}))}
|
||||
nil)
|
||||
react
|
||||
:entities
|
||||
(remove (fn [block]
|
||||
(or
|
||||
(= (:db/id block) eid)
|
||||
(= eid (:db/id (:block/page block)))
|
||||
(ldb/hidden? (:block/page block))
|
||||
(contains? (set (map :db/id (:block/tags block))) (:db/id entity))
|
||||
(some? (get block (:db/ident entity))))))
|
||||
(util/distinct-by :db/id)))))))
|
||||
ids (page-alias-set repo eid)
|
||||
entities (mapcat (fn [id]
|
||||
(:block/_refs (db-utils/entity id))) ids)]
|
||||
(->> entities
|
||||
(remove (fn [block]
|
||||
(or
|
||||
(= (:db/id block) eid)
|
||||
(= eid (:db/id (:block/page block)))
|
||||
(ldb/hidden? (:block/page block))
|
||||
(contains? (set (map :db/id (:block/tags block))) (:db/id entity))
|
||||
(some? (get block (:db/ident entity))))))
|
||||
(util/distinct-by :db/id)))))))
|
||||
|
||||
(defn get-block-referenced-blocks
|
||||
([block-id]
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
;; ::refs
|
||||
;; get BLOCKS referencing PAGE or BLOCK
|
||||
(s/def ::refs (s/tuple #(= ::refs %) int?))
|
||||
;; get class's Objects
|
||||
;; get class's objects
|
||||
(s/def ::objects (s/tuple #(= ::objects %) int?))
|
||||
;; custom react-query
|
||||
(s/def ::custom any?)
|
||||
|
||||
Reference in New Issue
Block a user