Browse Source

fix: query tables not rendering contents on app start up

Related to https://github.com/logseq/db-test/issues/310
Tienson Qin 4 months ago
parent
commit
6551c9ba9f

+ 7 - 1
deps/db/src/logseq/db/common/view.cljs

@@ -498,6 +498,10 @@
        values)
      (common-util/distinct-by :label))))
 
+(defn- get-query-properties
+  [entities]
+  (distinct (mapcat keys entities)))
+
 (defn ^:api ^:large-vars/cleanup-todo get-view-data
   [db view-id {:keys [journals? _view-for-id view-feature-type group-by-property-ident input query-entity-ids filters sorting]
                :as opts}]
@@ -584,4 +588,6 @@
        {:count (count filtered-entities)
         :data (distinct data')}
         (= feat-type :linked-references)
-        (assoc :ref-pages-count (:ref-pages-count entities-result))))))
+        (assoc :ref-pages-count (:ref-pages-count entities-result))
+        query?
+        (assoc :properties (get-query-properties entities-result))))))

+ 2 - 13
src/main/frontend/components/query/view.cljs

@@ -3,18 +3,9 @@
   (:require [frontend.components.views :as views]
             [frontend.db :as db]
             [frontend.state]
-            [logseq.db :as ldb]
             [logseq.shui.hooks :as hooks]
             [rum.core :as rum]))
 
-(defn- columns
-  [config result]
-  (->> (mapcat :block.temp/property-keys result)
-       distinct
-       (map db/entity)
-       (ldb/sort-by-order)
-       ((fn [cs] (views/build-columns config cs {:add-tags-column? false})))))
-
 (defn- result->entities
   [result]
   (map (fn [b] (or (db/entity (:db/id b)) b)) result))
@@ -33,8 +24,7 @@
 (rum/defc query-result
   [config view-entity result*]
   (let [[data set-data!] (rum/use-state (init-result result* view-entity))
-        ids (mapv :db/id data)
-        columns' (columns config data)]
+        ids (mapv :db/id data)]
     (hooks/use-effect!
      (fn []
        (set-data! (init-result result* view-entity)))
@@ -47,5 +37,4 @@
        :view-feature-type :query-result
        :data ids
        :set-data! set-data!
-       :query-entity-ids ids
-       :columns columns'})]))
+       :query-entity-ids ids})]))

+ 13 - 3
src/main/frontend/components/views.cljs

@@ -2012,9 +2012,17 @@
   [view opts]
   (state/<invoke-db-worker :thread-api/get-view-data (state/get-current-repo) (:db/id view) opts))
 
+(defn- get-query-columns
+  [config properties]
+  (->> properties
+       (map db/entity)
+       (ldb/sort-by-order)
+       ((fn [cs] (build-columns config cs {:add-tags-column? false})))))
+
 (rum/defc view-aux
-  [view-entity {:keys [view-parent view-feature-type data query-entity-ids set-view-entity!] :as option}]
+  [view-entity {:keys [config view-parent view-feature-type data query-entity-ids set-view-entity!] :as option}]
   (let [[input set-input!] (hooks/use-state "")
+        [properties set-properties!] (hooks/use-state nil)
         db-based? (config/db-based-graph?)
         group-by-property (:logseq.property.view/group-by-property view-entity)
         display-type (if (config/db-based-graph?)
@@ -2039,6 +2047,7 @@
         view-filters (:logseq.property.table/filters view-entity)
         [filters set-filters!] (rum/use-state (or view-filters {}))
         query? (= view-feature-type :query-result)
+        option (if query? (assoc option :columns (get-query-columns config properties)) option)
         [loading? set-loading!] (hooks/use-state (not query?))
         [data set-data!] (hooks/use-state data)
         [ref-pages-count set-ref-pages-count!] (hooks/use-state nil)
@@ -2054,7 +2063,7 @@
                                 :else
                                 (when (or (not query?) need-query?)
                                   (try
-                                    (let [{:keys [data ref-pages-count]}
+                                    (let [{:keys [data ref-pages-count properties]}
                                           (c.m/<?
                                            (<load-view-data view-entity
                                                             (cond->
@@ -2069,7 +2078,8 @@
                                                               (assoc :query-entity-ids query-entity-ids))))]
                                       (set-data! data)
                                       (when ref-pages-count
-                                        (set-ref-pages-count! ref-pages-count)))
+                                        (set-ref-pages-count! ref-pages-count))
+                                      (set-properties! properties))
                                     (finally
                                       (set-loading! false)))))))))]
     (let [sorting-filters {:sorting sorting