Browse Source

fix: query result not shown when rendering the block

Tienson Qin 8 months ago
parent
commit
031c0ecc51

+ 6 - 7
src/main/frontend/components/class.cljs

@@ -27,10 +27,9 @@
     (let [children-pages (set (model/get-structured-children (state/get-current-repo) (:db/id class)))
           ;; Expand children if there are about a pageful of total blocks to display
           default-collapsed? (> (count children-pages) 30)]
-      [:div.my-4
-       (ui/foldable
-        [:div.font-medium.opacity-50
-         (str "Children (" (count children-pages) ")")]
-        [:div.ml-1.mt-2 (class-children-aux class {:default-collapsed? default-collapsed?})]
-        {:default-collapsed? false
-         :title-trigger? true})])))
+      (ui/foldable
+       [:div.font-medium.opacity-50
+        (str "Children (" (count children-pages) ")")]
+       [:div.ml-1.mt-2 (class-children-aux class {:default-collapsed? default-collapsed?})]
+       {:default-collapsed? false
+        :title-trigger? true}))))

+ 4 - 4
src/main/frontend/components/file_based/hierarchy.cljs

@@ -4,11 +4,11 @@
             [frontend.db :as db]
             [frontend.db.model :as db-model]
             [frontend.state :as state]
-            [logseq.graph-parser.text :as text]
             [frontend.ui :as ui]
+            [frontend.util :as util]
+            [logseq.graph-parser.text :as text]
             [medley.core :as medley]
-            [rum.core :as rum]
-            [frontend.util :as util]))
+            [rum.core :as rum]))
 
 (defn- get-relation
   "Get all parent pages along the namespace hierarchy path.
@@ -49,7 +49,7 @@
   [page]
   (let [{:keys [namespaces]} (get-relation page)]
     (when (seq namespaces)
-      [:div.page-hierarchy.mt-6
+      [:div.page-hierarchy
        (ui/foldable
         [:h2.font-bold.opacity-30 "Hierarchy"]
         [:ul.namespaces {:style {:margin "12px 24px"}}

+ 3 - 3
src/main/frontend/components/file_based/query.cljs

@@ -1,6 +1,6 @@
 (ns frontend.components.file-based.query
-  (:require [frontend.components.query.result :as query-result]
-            [frontend.components.file-based.query-table :as query-table]
+  (:require [frontend.components.file-based.query-table :as query-table]
+            [frontend.components.query.result :as query-result]
             [frontend.db.query-dsl :as query-dsl]
             [frontend.handler.property :as property-handler]
             [frontend.state :as state]
@@ -82,4 +82,4 @@
            (query-refresh-button query-time {:full-text-search? full-text-search?
                                              :on-pointer-down (fn [e]
                                                                 (util/stop e)
-                                                                (query-result/trigger-custom-query! config q query-error-atom (fn [])))}))]])]))
+                                                                (query-result/run-custom-query config q query-error-atom))}))]])]))

+ 3 - 3
src/main/frontend/components/page.cljs

@@ -257,7 +257,7 @@
   (when (and today? (not sidebar?))
     (let [queries (get-in (state/sub-config repo) [:default-queries :journals])]
       (when (seq queries)
-        [:div#today-queries.mt-10
+        [:div#today-queries
          (for [query queries]
            (let [query' (if (config/db-based-graph?)
                           (assoc query :collapsed? true)
@@ -281,7 +281,7 @@
          (set-pages! result)))
      [tag])
     (when (seq pages)
-      [:div.references.page-tags.mt-6.flex-1.flex-row
+      [:div.references.page-tags.flex-1.flex-row
        [:div.content
         (ui/foldable
          [:h2.font-bold.opacity-50 (util/format "Pages tagged with \"%s\"" tag-title)]
@@ -690,7 +690,7 @@
                                                    :whiteboard? whiteboard?}))])])
 
          (when (and (not preview?) (or (not show-tabs?) tabs-rendered?))
-           [:div.ml-1
+           [:div.ml-1.flex.flex-col.gap-4
             (when today?
               (today-queries repo today? sidebar?))
 

+ 46 - 57
src/main/frontend/components/query.cljs

@@ -128,68 +128,57 @@
 
 (rum/defc custom-query* < rum/reactive db-mixins/query
   [{:keys [*query-error db-graph? dsl-query? built-in-query? table? current-block] :as config}
-   {:keys [builder query view collapsed?] :as q}
-   *result]
+   {:keys [builder query view collapsed?] :as q}]
   (let [collapsed?' (:collapsed? config)
-        result' (rum/react *result)]
-    (let [result (when *result (query-result/transform-query-result config q result'))
+        result' (query-result/run-custom-query config q *query-error)
+        result (when result' (query-result/transform-query-result config q result'))
           ;; Remove hidden pages from result
-          result (if (and (coll? result) (not (map? result)))
-                   (->> result
-                        (remove (fn [b] (when (and (map? b) (:block/title b)) (ldb/hidden? (:block/title b)))))
-                        (remove (fn [b]
-                                  (when (and current-block (:db/id current-block)) (= (:db/id b) (:db/id current-block))))))
-                   result)
+        result (if (and (coll? result) (not (map? result)))
+                 (->> result
+                      (remove (fn [b] (when (and (map? b) (:block/title b)) (ldb/hidden? (:block/title b)))))
+                      (remove (fn [b]
+                                (when (and current-block (:db/id current-block)) (= (:db/id b) (:db/id current-block))))))
+                 result)
           ;; Args for displaying query header and results
-          view-fn (if (keyword? view) (get-in (state/sub-config) [:query/views view]) view)
-          view-f (and view-fn (sci/eval-string (pr-str view-fn)))
-          page-list? (and (seq result) (some? (:block/name (first result))))
-          opts {:query-error-atom *query-error
-                :current-block current-block
-                :table? table?
-                :view-f view-f
-                :page-list? page-list?
-                :result result
-                :group-by-page? (query-result/get-group-by-page q {:table? table?})}]
-      (if (:custom-query? config)
+        view-fn (if (keyword? view) (get-in (state/sub-config) [:query/views view]) view)
+        view-f (and view-fn (sci/eval-string (pr-str view-fn)))
+        page-list? (and (seq result) (some? (:block/name (first result))))
+        opts {:query-error-atom *query-error
+              :current-block current-block
+              :table? table?
+              :view-f view-f
+              :page-list? page-list?
+              :result result
+              :group-by-page? (query-result/get-group-by-page q {:table? table?})}]
+    (if (:custom-query? config)
       ;; Don't display recursive results when query blocks are a query result
-        [:code (if dsl-query? (str "Results for " (pr-str query)) "Advanced query results")]
-        (when-not (and built-in-query? (empty? result))
-          [:div.custom-query (get config :attr {})
-           (when (and (not db-graph?) (not built-in-query?))
-             (file-query/custom-query-header config
-                                             q
-                                             {:query-error-atom *query-error
-                                              :current-block current-block
-                                              :table? table?
-                                              :view-f view-f
-                                              :page-list? page-list?
-                                              :result result
-                                              :collapsed? collapsed?'}))
+      [:code (if dsl-query? (str "Results for " (pr-str query)) "Advanced query results")]
+      (when-not (and built-in-query? (empty? result))
+        [:div.custom-query (get config :attr {})
+         (when (and (not db-graph?) (not built-in-query?))
+           (file-query/custom-query-header config
+                                           q
+                                           {:query-error-atom *query-error
+                                            :current-block current-block
+                                            :table? table?
+                                            :view-f view-f
+                                            :page-list? page-list?
+                                            :result result
+                                            :collapsed? collapsed?'}))
 
-           (when (and dsl-query? builder) builder)
+         (when (and dsl-query? builder) builder)
 
-           (if built-in-query?
-             [:div {:style {:margin-left 2}}
-              (ui/foldable
-               (query-title config (:title q) {:result-count (count result)})
-               (fn []
-                 (custom-query-inner config q opts))
-               {:default-collapsed? collapsed?
-                :title-trigger? true})]
-             [:div.bd
-              (when-not collapsed?'
-                (custom-query-inner config q opts))])])))))
-
-(rum/defc trigger-custom-query
-  [config q]
-  (let [[result set-result!] (rum/use-state nil)]
-    (hooks/use-effect!
-     (fn []
-       (query-result/trigger-custom-query! config q (:*query-error config) set-result!))
-     [q])
-    (when (util/atom? result)
-      (custom-query* config q result))))
+         (if built-in-query?
+           [:div {:style {:margin-left 2}}
+            (ui/foldable
+             (query-title config (:title q) {:result-count (count result)})
+             (fn []
+               (custom-query-inner config q opts))
+             {:default-collapsed? collapsed?
+              :title-trigger? true})]
+           [:div.bd
+            (when-not collapsed?'
+              (custom-query-inner config q opts))])]))))
 
 (rum/defcs custom-query < rum/static
   {:init (fn [state]
@@ -227,4 +216,4 @@
                         :built-in-query? (built-in-custom-query? (:title q))
                         :*query-error *query-error)]
      (when (or built-in-collapsed? (not db-graph?) (not collapsed?'))
-       (trigger-custom-query config' q)))))
+       (custom-query* config' q)))))

+ 6 - 8
src/main/frontend/components/query/result.cljs

@@ -10,12 +10,13 @@
             [frontend.search :as search]
             [frontend.state :as state]
             [frontend.template :as template]
+            [frontend.util :as util]
             [logseq.common.util :as common-util]
             [logseq.db :as ldb]
             [promesa.core :as p]))
 
-(defn trigger-custom-query!
-  [config query *query-error set-result!]
+(defn run-custom-query
+  [config query *query-error]
   (let [repo (state/get-current-repo)
         current-block-uuid (or (:block/uuid (:block config))
                                (:block/uuid config))
@@ -40,16 +41,13 @@
                                             (let [entity (db/entity [:block/uuid (:block/uuid b)])]
                                               (when-not (ldb/hidden? entity)
                                                 entity))))))]
-                  (set-result! (atom result)))))
+                  result)))
 
             :else
-            (let [result (query-dsl/query (state/get-current-repo) q {:cards? (:cards? config)})]
-              (set-result! (or result (atom []))))))
+            (util/react (query-dsl/query (state/get-current-repo) q {:cards? (:cards? config)}))))
 
         :else
-        (set-result! (query-custom/custom-query query {:current-block-uuid current-block-uuid
-                                                       ;; FIXME: Remove this temporary workaround for reactivity not working
-                                                       :use-cache? false})))
+        (util/react (query-custom/custom-query query {:current-block-uuid current-block-uuid})))
       (catch :default e
         (reset! *query-error e)))))
 

+ 1 - 0
src/main/frontend/components/query/view.cljs

@@ -45,6 +45,7 @@
                      (remove :logseq.property/view-for))
         columns' (columns (assoc config :container-id (::container-id state)) result')
         set-data! (fn [data] (reset! *result data))]
+    (prn :debug :view-result result')
     [:div.query-result.w-full
      (views/view
       {:config {:custom-query? true}

+ 2 - 1
src/main/frontend/components/views.cljs

@@ -1712,7 +1712,8 @@
       (:logseq.property.linked-references/excludes view-parent)
       (:filters view-parent)
       (select-keys view-entity [:logseq.property.table/sorting :logseq.property.table/filters
-                                :logseq.property.view/type])])
+                                :logseq.property.view/type])
+      query-entity-ids])
 
     (let [linked-refs? (= :linked-references view-feature-type)]
       (when-not (and linked-refs? (empty? data)

+ 4 - 4
src/main/frontend/util.cljc

@@ -821,6 +821,10 @@
 (defn drop-nth [n coll]
   (keep-indexed #(when (not= %1 n) %2) coll))
 
+#?(:cljs
+   (defn atom? [v]
+     (instance? Atom v)))
+
 #?(:cljs
    (defn react
      [ref]
@@ -1342,10 +1346,6 @@
   [block]
   (:block/collapsed? block))
 
-#?(:cljs
-   (defn atom? [v]
-     (instance? Atom v)))
-
 ;; https://stackoverflow.com/questions/32511405/how-would-time-ago-function-implementation-look-like-in-clojure
 #?(:cljs
    (defn human-time