Переглянути джерело

fix: logseq.property/query supports both dsl and datalog query

Tienson Qin 1 рік тому
батько
коміт
d9cd07bc2e

+ 0 - 5
deps/db/src/logseq/db/frontend/class.cljs

@@ -20,11 +20,6 @@
     :properties {:logseq.property/icon {:type :tabler-icon :id "search"}}
     :schema {:properties [:logseq.property/query]}}
 
-   :logseq.class/Advanced-Query
-   {:title "Advanced Query"
-    :properties {:logseq.property/icon {:type :tabler-icon :id "search"}
-                 :logseq.property/parent :logseq.class/Query}}
-
    :logseq.class/Card
    {:title "Card"
     :schema {:properties [:logseq.property.fsrs/state :logseq.property.fsrs/due]}}

+ 22 - 21
src/main/frontend/commands.cljs

@@ -331,30 +331,31 @@
         :icon/numberedChildren]]
 
       ;; https://orgmode.org/manual/Structure-Templates.html
-      (cond->
-       [["Quote" (->block "quote")
-         "Create a quote block"
-         :icon/quote-block
-         "BLOCK TYPE"]
+      (when-not db?
+        (cond->
+         [["Quote" (->block "quote")
+           "Create a quote block"
+           :icon/quote-block
+           "BLOCK TYPE"]
         ;; Should this be replaced by "Code block"?
-        ["Src" (->block "src") "Create a code block"]
-        ["Advanced Query" (->block "query") "Create an advanced query block"]
-        ["Latex export" (->block "export" "latex") "Create a latex block"]
-        ["Note" (->block "note") "Create a note block"]
-        ["Tip" (->block "tip") "Create a tip block"]
-        ["Important" (->block "important") "Create an important block"]
-        ["Caution" (->block "caution") "Create a caution block"]
-        ["Pinned" (->block "pinned") "Create a pinned block"]
-        ["Warning" (->block "warning") "Create a warning block"]
-        ["Example" (->block "example") "Create an example block"]
-        ["Export" (->block "export") "Create an export block"]
-        ["Verse" (->block "verse") "Create a verse block"]
-        ["Ascii" (->block "export" "ascii") "Create an ascii block"]
-        ["Center" (->block "center") "Create a center block"]]
+          ["Src" (->block "src") "Create a code block"]
+          ["Advanced Query" (->block "query") "Create an advanced query block"]
+          ["Latex export" (->block "export" "latex") "Create a latex block"]
+          ["Note" (->block "note") "Create a note block"]
+          ["Tip" (->block "tip") "Create a tip block"]
+          ["Important" (->block "important") "Create an important block"]
+          ["Caution" (->block "caution") "Create a caution block"]
+          ["Pinned" (->block "pinned") "Create a pinned block"]
+          ["Warning" (->block "warning") "Create a warning block"]
+          ["Example" (->block "example") "Create an example block"]
+          ["Export" (->block "export") "Create an export block"]
+          ["Verse" (->block "verse") "Create a verse block"]
+          ["Ascii" (->block "export" "ascii") "Create an ascii block"]
+          ["Center" (->block "center") "Create a center block"]]
 
         ;; FIXME: current page's format
-        (= :org (state/get-preferred-format))
-        (conj ["Properties" (->properties)]))
+          (= :org (state/get-preferred-format))
+          (conj ["Properties" (->properties)])))
 
       ;; advanced
       [["Query"

+ 8 - 6
src/main/frontend/components/block.cljs

@@ -3282,13 +3282,15 @@
         (db-properties-cp config block {:in-block-container? true})])
 
      (when (and db-based? (not collapsed?) (not (or table? property?)) (not (string/blank? (:block/title (:logseq.property/query block)))))
-       (let [query (:block/title (:logseq.property/query block))]
-         [:div.dsl-query {:style {:padding-left 42}}
+       (let [query (:block/title (:logseq.property/query block))
+             result (common-util/safe-read-string query)
+             advanced-query? (and (map? result) (:query result))]
+         [:div {:style {:padding-left 42}}
           (query/custom-query (wrap-query-components (assoc config
-                                                            :dsl-query? true
+                                                            :dsl-query? (not advanced-query?)
                                                             :cards? (ldb/class-instance? (db/entity :logseq.class/Cards) block)))
-                              {:builder nil
-                               :query (query-builder-component/sanitize-q query)})]))
+                              (if advanced-query? result {:builder nil
+                                                          :query (query-builder-component/sanitize-q query)}))]))
 
      (when-not (or (:hide-children? config) in-whiteboard? (or table? property?))
        (let [config' (-> (update config :level inc)
@@ -3635,7 +3637,7 @@
 
       ["Custom" "query" _options _result content]
       (try
-        (let [query (reader/read-string content)]
+        (let [query (common-util/safe-read-string content)]
           (query/custom-query (wrap-query-components config) query))
         (catch :default e
           (log/error :read-string-error e)

+ 42 - 38
src/main/frontend/components/property/value.cljs

@@ -1,41 +1,42 @@
 (ns frontend.components.property.value
-  (:require [clojure.string :as string]
-            [frontend.components.select :as select]
+  (:require [cljs-time.coerce :as tc]
+            [clojure.string :as string]
+            [datascript.impl.entity :as de]
+            [dommy.core :as d]
             [frontend.components.icon :as icon-component]
+            [frontend.components.query.builder :as query-builder-component]
+            [frontend.components.select :as select]
+            [frontend.components.title :as title]
             [frontend.config :as config]
             [frontend.date :as date]
             [frontend.db :as db]
             [frontend.db-mixins :as db-mixins]
+            [frontend.db.async :as db-async]
             [frontend.db.model :as model]
+            [frontend.handler.block :as block-handler]
+            [frontend.handler.db-based.page :as db-page-handler]
+            [frontend.handler.db-based.property :as db-property-handler]
             [frontend.handler.editor :as editor-handler]
             [frontend.handler.page :as page-handler]
-            [frontend.handler.block :as block-handler]
             [frontend.handler.property :as property-handler]
-            [frontend.handler.db-based.property :as db-property-handler]
-            [frontend.handler.db-based.page :as db-page-handler]
+            [frontend.handler.property.util :as pu]
+            [frontend.handler.route :as route-handler]
+            [frontend.modules.outliner.ui :as ui-outliner-tx]
+            [frontend.search :as search]
             [frontend.state :as state]
             [frontend.ui :as ui]
-            [logseq.shui.ui :as shui]
             [frontend.util :as util]
+            [goog.dom :as gdom]
+            [goog.functions :refer [debounce]]
             [lambdaisland.glogi :as log]
-            [rum.core :as rum]
-            [promesa.core :as p]
-            [frontend.db.async :as db-async]
+            [logseq.common.util :as common-util]
             [logseq.common.util.macro :as macro-util]
             [logseq.db :as ldb]
             [logseq.db.frontend.property :as db-property]
-            [datascript.impl.entity :as de]
-            [frontend.handler.property.util :as pu]
             [logseq.db.frontend.property.type :as db-property-type]
-            [dommy.core :as d]
-            [goog.dom :as gdom]
-            [frontend.search :as search]
-            [goog.functions :refer [debounce]]
-            [frontend.handler.route :as route-handler]
-            [frontend.components.title :as title]
-            [cljs-time.coerce :as tc]
-            [frontend.modules.outliner.ui :as ui-outliner-tx]
-            [frontend.components.query.builder :as query-builder-component]))
+            [logseq.shui.ui :as shui]
+            [promesa.core :as p]
+            [rum.core :as rum]))
 
 (rum/defc property-empty-btn-value
   [property & opts]
@@ -712,24 +713,27 @@
 (rum/defcs query-cp <
   (rum/local false ::show-setting?)
   [state block property v-block]
-  [:div.flex.flex-1.flex-row.gap-1.justify-between
-   [:div.flex.flex-1 (property-normal-block-value block property v-block)]
-   (shui/button
-    {:variant :ghost
-     :size :sm
-     :class "jtrigger px-1 text-muted-foreground"
-     :title "Update query"
-     :on-click (fn [e]
-                 (shui/popup-show!
-                  (.-target e)
-                  (fn []
-                    [:div.p-4.h-64 {:style {:width "42rem"}}
-                     (let [block (db/entity (:db/id v-block))
-                           query (:block/title block)]
-                       (query-builder-component/builder query {:property property
-                                                               :block block}))])
-                  {:align :end}))}
-    (ui/icon "settings" {:size 18}))])
+  (let [result (common-util/safe-read-string (:block/title v-block))
+        advanced-query? (and (map? result) (:query result))]
+    [:div.flex.flex-1.flex-row.gap-1.justify-between
+     [:div.flex.flex-1 (property-normal-block-value block property v-block)]
+     (when-not advanced-query?
+       (shui/button
+        {:variant :ghost
+         :size :sm
+         :class "jtrigger px-1 text-muted-foreground"
+         :title "Update query"
+         :on-click (fn [e]
+                     (shui/popup-show!
+                      (.-target e)
+                      (fn []
+                        [:div.p-4.h-64 {:style {:width "42rem"}}
+                         (let [block (db/entity (:db/id v-block))
+                               query (:block/title block)]
+                           (query-builder-component/builder query {:property property
+                                                                   :block block}))])
+                      {:align :end}))}
+        (ui/icon "settings" {:size 18})))]))
 
 (rum/defcs property-block-value < rum/reactive db-mixins/query
   {:init (fn [state]

+ 1 - 2
src/main/frontend/worker/db/migrate.cljs

@@ -273,8 +273,7 @@
    [22 {:properties [:logseq.property.fsrs/state :logseq.property.fsrs/due]}]
    [23 {:fix add-card-properties}]
    [24 {:classes [:logseq.class/Cards]}]
-   [25 {:classes [:logseq.class/Advanced-Query]
-        :properties [:logseq.property/query]
+   [25 {:properties [:logseq.property/query]
         :fix add-query-property-to-query-tag}]])
 
 (let [max-schema-version (apply max (map first schema-version->updates))]

+ 1 - 1
src/test/frontend/db/db_based_model_test.cljs

@@ -24,7 +24,7 @@
   (let [opts {:redirect? false :create-first-block? false :class? true}
         _ (test-helper/create-page! "class1" opts)
         _ (test-helper/create-page! "class2" opts)]
-    (is (= ["Advanced Query" "Card" "Cards" "Journal" "Query" "Root Tag" "Task" "class1" "class2"] (sort (map :block/title (model/get-all-classes repo)))))))
+    (is (= ["Card" "Cards" "Journal" "Query" "Root Tag" "Task" "class1" "class2"] (sort (map :block/title (model/get-all-classes repo)))))))
 
 (deftest ^:fix-me get-class-objects-test
   (let [opts {:redirect? false :create-first-block? false :class? true}