mirror of
https://github.com/logseq/logseq.git
synced 2026-05-29 23:19:38 +00:00
avoid transacting view data to ui db
This commit is contained in:
@@ -1089,21 +1089,26 @@
|
||||
(property-handler/set-block-property! repo (:db/id entity) :logseq.property.table/sized-columns sized-columns))}))
|
||||
|
||||
(rum/defc lazy-item
|
||||
[idx {:keys [full-block-ids properties]} item-render]
|
||||
[idx {:keys [full-block-ids properties view-entity]} item-render]
|
||||
(let [db-id (util/nth-safe full-block-ids idx)
|
||||
[item set-item!] (hooks/use-state (db/entity db-id))]
|
||||
[item set-item!] (hooks/use-state
|
||||
(or (db/entity db-id)
|
||||
(get-in view-entity [:cached-item db-id])))]
|
||||
(hooks/use-effect!
|
||||
(fn []
|
||||
(when (and db-id (not item))
|
||||
(p/let [result (db-async/<get-block
|
||||
(state/get-current-repo) db-id
|
||||
{:children? false
|
||||
:skip-refresh? true
|
||||
:properties properties})]
|
||||
(let [e (db/entity (:db/id (:block result)))]
|
||||
(set-item! (or e (:block result)))))))
|
||||
:skip-transact? true
|
||||
:properties properties
|
||||
:cache? false})]
|
||||
(let [e (db/entity (:db/id (:block result)))
|
||||
e' (or e (:block result))]
|
||||
(when e' (assoc-in view-entity [:cached-item db-id] e'))
|
||||
(set-item! e')))))
|
||||
[db-id])
|
||||
(item-render (assoc item :id (:db/id item)))))
|
||||
(item-render (assoc item :id (:db/id item) :db/id (:db/id item)))))
|
||||
|
||||
(rum/defc table-body < rum/static
|
||||
[table option rows *scroller-ref *rows-wrap set-items-rendered!]
|
||||
|
||||
@@ -109,14 +109,14 @@
|
||||
(concat [default-value-id] result)
|
||||
result))))
|
||||
|
||||
;; TODO: batch queries for better performance and UX
|
||||
(defn <get-block
|
||||
[graph name-or-uuid & {:keys [children? skip-refresh?]
|
||||
:or {children? true}
|
||||
[graph name-or-uuid & {:keys [children? skip-transact? cache?]
|
||||
:or {children? true
|
||||
cache? true}
|
||||
:as opts}]
|
||||
(let [name' (str name-or-uuid)
|
||||
*async-queries (:db/async-queries @state/state)
|
||||
async-requested? (get @*async-queries [name' opts])
|
||||
async-requested? (when cache? (get @*async-queries [name' opts]))
|
||||
e (cond
|
||||
(number? name-or-uuid)
|
||||
(db/entity name-or-uuid)
|
||||
@@ -130,19 +130,21 @@
|
||||
(if (or (:block.temp/fully-loaded? e) async-requested?)
|
||||
e
|
||||
(when-let [^Object sqlite @db-browser/*worker]
|
||||
(swap! *async-queries assoc [name' opts] true)
|
||||
(state/update-state! :db/async-query-loading (fn [s] (conj s name')))
|
||||
(when cache?
|
||||
(swap! *async-queries assoc [name' opts] true)
|
||||
(state/update-state! :db/async-query-loading (fn [s] (conj s name'))))
|
||||
(p/let [result-str (.get-blocks sqlite graph
|
||||
(ldb/write-transit-str
|
||||
[{:id id :opts opts}]))
|
||||
result (ldb/read-transit-str result-str)
|
||||
{:keys [properties block children] :as result'} (first result)
|
||||
conn (db/get-db graph false)
|
||||
block-and-children (concat properties [block] children)]
|
||||
(d/transact! conn block-and-children)
|
||||
(when-not skip-refresh?
|
||||
(let [affected-keys (->> (keep :db/id block-and-children)
|
||||
{:keys [properties block children] :as result'} (first result)]
|
||||
|
||||
(when-not skip-transact?
|
||||
(let [conn (db/get-db graph false)
|
||||
block-and-children (concat properties [block] children)
|
||||
affected-keys (->> (keep :db/id block-and-children)
|
||||
(map #(vector :frontend.worker.react/block %)))]
|
||||
(d/transact! conn block-and-children)
|
||||
(react/refresh-affected-queries! graph affected-keys)))
|
||||
|
||||
(state/update-state! :db/async-query-loading (fn [s] (disj s name')))
|
||||
|
||||
Reference in New Issue
Block a user