fix: refresh order

pull/10839/head
Tienson Qin 2023-12-26 23:00:48 +08:00
parent 260ad89937
commit 61bdbcab7e
2 changed files with 30 additions and 23 deletions

View File

@ -173,33 +173,39 @@
:else
(d/q query db))
transform-fn)]
(when-not (= new-result result)
(when-not (= new-result result)
(set-new-result! k new-result)))))
(defn- refresh-affected-queries!
[repo-url affected-keys]
(let [db (conn/get-db repo-url)]
(doseq [[k cache] @query-state]
(let [custom? (= :custom (second k))
kv? (= :kv (second k))]
(when (and
(= (first k) repo-url)
(or (get affected-keys (vec (rest k)))
custom?
kv?))
(util/profile
"refresh!"
(let [db (conn/get-db repo-url)
affected-keys-set (set affected-keys)
state (->> (keep (fn [[k cache]]
(let [k' (vec (rest k))]
(when (and (= (first k) repo-url)
(or (contains? affected-keys-set k')
(contains? #{:custom :kv} (first k'))))
[k' cache]))) @query-state)
(into {}))
all-keys (concat (distinct affected-keys)
(filter #(contains? #{:custom :kv} (first %)) (keys state)))]
(doseq [k all-keys]
(when-let [cache (get state k)]
(let [{:keys [query query-fn]} cache
custom? (= :custom (first k))
{:keys [custom-query?]} (state/edit-in-query-or-refs-component)]
(util/profile
(str "refresh! " (rest k))
(when (or query query-fn)
(try
(let [f #(execute-query! repo-url db k cache {:skip-query-time-check? custom-query?})]
(when (or query query-fn)
(try
(let [f #(execute-query! repo-url db (vec (cons repo-url k)) cache {:skip-query-time-check? custom-query?})]
;; Detects whether user is editing in a custom query, if so, execute the query immediately
(if (and custom? (not custom-query?))
(async/put! (state/get-reactive-custom-queries-chan) [f query])
(f)))
(catch :default e
(js/console.error e)))))))))))
(if (and custom? (not custom-query?))
(async/put! (state/get-reactive-custom-queries-chan) [f query])
(f)))
(catch :default e
(js/console.error e)
nil)))))))))
(defn refresh!
"Re-compute corresponding queries (from tx) and refresh the related react components."

View File

@ -79,8 +79,9 @@
(let [page-id (or
(when (:block/name block) (:db/id block))
(:db/id (:block/page block)))
blocks [[::block (:db/id block)]
[::block (:db/id (:block/parent block))]]
blocks [(when-let [parent-id (:db/id (:block/parent block))]
[::block parent-id])
[::block (:db/id block)]]
path-refs (:block/path-refs block)
path-refs' (->> (keep (fn [ref]
(when-not (= (:db/id ref) page-id)
@ -110,4 +111,4 @@
affected-keys
block-children-keys)
(remove nil?)
set)))
distinct)))