Browse Source

Some more query cleanup

Remove unused query-triggered atom, remove duplicative state in result
ns and rename query maps to query-m as query being used to refer to
multiple concepts - the query map and the :query inside a query map
Gabriel Horner 2 years ago
parent
commit
2432230c22

+ 5 - 5
src/main/frontend/components/query.cljs

@@ -142,7 +142,7 @@
                (when collapsed?
                  (editor-handler/collapse-block! current-block-uuid))))
            (assoc state :query-error (atom nil)))}
-  [state config {:keys [title builder query view collapsed? table-view?] :as q} *query-triggered?]
+  [state config {:keys [title builder query view collapsed? table-view?] :as q}]
   (let [*query-error (:query-error state)
         built-in? (built-in-custom-query? title)
         dsl-query? (:dsl-query? config)
@@ -163,11 +163,12 @@
         view-f (and view-fn (sci/eval-string (pr-str view-fn)))
         dsl-page-query? (and dsl-query?
                              (false? (:blocks? (query-dsl/parse-query query))))
+        ;; FIXME: This isn't getting set for full-text searches
         full-text-search? (and dsl-query?
                                (util/electron?)
                                (symbol? (gp-util/safe-read-string query)))
         result (when (or built-in-collapsed? (not collapsed?'))
-                 (query-result/get-query-result state config *query-error *query-triggered? current-block-uuid q {:table? table?}))
+                 (query-result/get-query-result config q *query-error current-block-uuid {:table? table?}))
         query-time (:query-time (meta result))
         page-list? (and (seq result)
                         (some? (:block/name (first result))))
@@ -228,7 +229,7 @@
                   (query-refresh-button query-time {:full-text-search? full-text-search?
                                                     :on-mouse-down (fn [e]
                                                                      (util/stop e)
-                                                                     (query-result/trigger-custom-query! state *query-error *query-triggered?))}))]])])
+                                                                     (query-result/trigger-custom-query! config q *query-error))}))]])])
 
          (when dsl-query? builder)
 
@@ -245,11 +246,10 @@
               (custom-query-inner config q opts))])]))))
 
 (rum/defcs custom-query < rum/static
-  (rum/local false ::query-triggered?)
   [state config q]
   (ui/catch-error
    (ui/block-error "Query Error:" {:content (:query q)})
    (ui/lazy-visible
     (fn []
-      (custom-query* config q (::query-triggered? state)))
+      (custom-query* config q))
     {:debug-id q})))

+ 10 - 13
src/main/frontend/components/query/result.cljs

@@ -13,9 +13,8 @@
             [frontend.modules.outliner.tree :as tree]))
 
 (defn trigger-custom-query!
-  [state *query-error *query-triggered?]
-  (let [[config query] (:rum/args state)
-        repo (state/get-current-repo)
+  [config query *query-error]
+  (let [repo (state/get-current-repo)
         result-atom (atom nil)
         current-block-uuid (or (:block/uuid (:block config))
                                (:block/uuid config))
@@ -45,36 +44,34 @@
                      (catch :default e
                        (reset! *query-error e)
                        (atom nil)))]
-    (when *query-triggered?
-      (reset! *query-triggered? true))
     (if (instance? Atom query-atom)
       query-atom
       result-atom)))
 
-(defn get-group-by-page [{:keys [result-transform query] :as q}
+(defn get-group-by-page [{:keys [result-transform query] :as query-m}
                          {:keys [table?]}]
   (if table?
     false ;; Immediately return false as table view can't handle grouping
-    (get q :group-by-page?
+    (get query-m :group-by-page?
          (and (not result-transform)
               (not (and (string? query) (string/includes? query "(by-page false)")))))))
 
 (defn get-query-result
   "Fetches a query's result, transforms it as needed and saves the result into
   an atom that is passed in as an argument"
-  [state config *query-error *query-triggered? current-block-uuid q options]
-  (let [query-atom (trigger-custom-query! state *query-error *query-triggered?)
+  [config query-m *query-error current-block-uuid options]
+  (let [query-atom (trigger-custom-query! config query-m *query-error)
         query-result (and query-atom (rum/react query-atom))
-            ;; exclude the current one, otherwise it'll loop forever
+        ;; exclude the current one, otherwise it'll loop forever
         remove-blocks (if current-block-uuid [current-block-uuid] nil)
         transformed-query-result (when query-result
-                                   (let [result (db/custom-query-result-transform query-result remove-blocks q)]
+                                   (let [result (db/custom-query-result-transform query-result remove-blocks query-m)]
                                      (if (and query-result (coll? result) (:block/uuid (first result)))
                                        (cond-> result
-                                         (get q :remove-block-children? true)
+                                         (get query-m :remove-block-children? true)
                                          tree/filter-top-level-blocks)
                                        result)))
-        group-by-page? (get-group-by-page q options)
+        group-by-page? (get-group-by-page query-m options)
         result (if (and group-by-page? (:block/uuid (first transformed-query-result)))
                  (let [result (db-utils/group-by-page transformed-query-result)]
                    (if (map? result)

+ 4 - 4
src/test/frontend/components/query/result_test.cljs

@@ -8,11 +8,11 @@
 (defn- mock-get-query-result
   "Mocks get-query-result assuming custom queries are being tested. Db calls are
   mocked to minimize setup"
-  [result query {:keys [table? current-block-uuid config] :or {config {}}}]
+  [result query-m {:keys [table? current-block-uuid config] :or {config {}}}]
   (with-redefs [db/custom-query (constantly (atom result))
                 model/with-pages identity]
     (binding [rum/*reactions* (volatile! #{})]
-      (#'query-result/get-query-result {} config (atom nil) (atom nil) current-block-uuid query {:table? table?}))))
+      (#'query-result/get-query-result config query-m (atom nil) current-block-uuid {:table? table?}))))
 
 (deftest get-query-result-with-transforms-and-grouping
   (let [result (mapv
@@ -22,8 +22,8 @@
                  {:block/uuid (random-uuid) :block/scheduled 20230417}])
         sorted-result (sort-by :block/scheduled result)]
     (testing "For list view"
-      (are [query expected]
-           (= expected (mock-get-query-result result query {:table? false}))
+      (are [query-m expected]
+           (= expected (mock-get-query-result result query-m {:table? false}))
 
            ;; Default list behavior is to group result
            {}