Pārlūkot izejas kodu

enhance: add /Advanced Query for db graphs

Related to
https://linear.app/logseq/issue/LOG-3246/improve-advanced-query-editor.
Had to upgrade promesa to get p/doseq
Gabriel Horner 1 gadu atpakaļ
vecāks
revīzija
a0d4e43d18
5 mainītis faili ar 55 papildinājumiem un 34 dzēšanām
  1. 1 0
      .clj-kondo/config.edn
  2. 1 1
      deps.edn
  3. 1 1
      deps/graph-parser/deps.edn
  4. 1 1
      deps/shui/deps.edn
  5. 51 31
      src/main/frontend/commands.cljs

+ 1 - 0
.clj-kondo/config.edn

@@ -201,6 +201,7 @@
  :lint-as {promesa.core/let clojure.core/let
            promesa.core/loop clojure.core/loop
            promesa.core/recur clojure.core/recur
+           promesa.core/doseq clojure.core/doseq
            rum.core/defcc rum.core/defc
            rum.core/with-context clojure.core/let
            rum.core/defcontext clojure.core/def

+ 1 - 1
deps.edn

@@ -8,7 +8,7 @@
 
   datascript-transit/datascript-transit {:mvn/version "0.3.0"}
   borkdude/rewrite-edn                  {:mvn/version "0.4.7"}
-  funcool/promesa                       {:mvn/version "4.0.2"}
+  funcool/promesa                       {:mvn/version "11.0.678"}
   medley/medley                         {:mvn/version "1.4.0"}
   metosin/reitit-frontend               {:mvn/version "0.3.10"}
   cljs-bean/cljs-bean                   {:mvn/version "1.5.0"}

+ 1 - 1
deps/graph-parser/deps.edn

@@ -9,7 +9,7 @@
   ;; stubbed in nbb
   com.lambdaisland/glogi      {:mvn/version "1.1.144"}
   ;; built in to nbb
-  funcool/promesa             {:mvn/version "4.0.2"}
+  funcool/promesa             {:mvn/version "11.0.678"}
   cljs-bean/cljs-bean         {:mvn/version "1.5.0"}}
 
  :aliases

+ 1 - 1
deps/shui/deps.edn

@@ -2,7 +2,7 @@
  :deps
  {org.clojure/clojure                   {:mvn/version "1.11.1"}
   org.clojure/clojurescript             {:mvn/version "1.11.132"}
-  funcool/promesa                       {:mvn/version "4.0.2"}
+  funcool/promesa                       {:mvn/version "11.0.678"}
   rum/rum                               {:mvn/version "0.12.9"}
   medley/medley                         {:mvn/version "1.4.0"}
   cljs-bean/cljs-bean                   {:mvn/version "1.5.0"}}}

+ 51 - 31
src/main/frontend/commands.cljs

@@ -154,6 +154,43 @@
     (db-based-query)
     (file-based-query)))
 
+(defn ->block
+  ([type]
+   (->block type nil))
+  ([type optional]
+   (let [format (get (state/get-edit-block) :block/format)
+         markdown-src? (and (= format :markdown)
+                            (= (string/lower-case type) "src"))
+         [left right] (cond
+                        markdown-src?
+                        ["```" "\n```"]
+
+                        :else
+                        (->> ["#+BEGIN_%s" "\n#+END_%s"]
+                             (map #(util/format %
+                                                (string/upper-case type)))))
+         template (str
+                   left
+                   (if optional (str " " optional) "")
+                   "\n"
+                   right)
+         backward-pos (if (= type "src")
+                        (+ 1 (count right))
+                        (count right))]
+     [[:editor/input template {:type "block"
+                               :last-pattern command-trigger
+                               :backward-pos backward-pos}]])))
+
+(defn- advanced-query-steps
+  []
+  (if (config/db-based-graph? (state/get-current-repo))
+    [[:editor/input "" {:last-pattern command-trigger}]
+     [:editor/set-property :block/tags :logseq.class/Query]
+     [:editor/set-property :logseq.property/query ""]
+     [:editor/set-property-on-block-property :logseq.property/query :logseq.property.node/type :code]
+     [:editor/set-property-on-block-property :logseq.property/query :logseq.property.code/mode "clojure"]]
+    (->block "query")))
+
 (defn db-based-code-block
   []
   [[:editor/input "" {:last-pattern command-trigger}]
@@ -173,7 +210,6 @@
     (db-based-code-block)
     (file-based-code-block)))
 
-(declare ->block)
 (defn quote-block-steps
   []
   (if (config/db-based-graph? (state/get-current-repo))
@@ -256,33 +292,6 @@
 (defonce *matched-commands (atom nil))
 (defonce *initial-commands (atom nil))
 
-(defn ->block
-  ([type]
-   (->block type nil))
-  ([type optional]
-   (let [format (get (state/get-edit-block) :block/format)
-         markdown-src? (and (= format :markdown)
-                            (= (string/lower-case type) "src"))
-         [left right] (cond
-                        markdown-src?
-                        ["```" "\n```"]
-
-                        :else
-                        (->> ["#+BEGIN_%s" "\n#+END_%s"]
-                             (map #(util/format %
-                                                (string/upper-case type)))))
-         template (str
-                   left
-                   (if optional (str " " optional) "")
-                   "\n"
-                   right)
-         backward-pos (if (= type "src")
-                        (+ 1 (count right))
-                        (count right))]
-     [[:editor/input template {:type "block"
-                               :last-pattern command-trigger
-                               :backward-pos backward-pos}]])))
-
 (defn ->properties
   []
   [[:editor/clear-current-slash]
@@ -375,7 +384,6 @@
         (cond->
          [;; Should this be replaced by "Code block"?
           ["Src" (->block "src") "Create a code block"]
-          ["Advanced Query" (->block "query") "Create an advanced query block"]
           ["Math block" (->block "export" "latex") "Create a latex block"]
           ["Note" (->block "note") "Create a note block"]
           ["Tip" (->block "tip") "Create a tip block"]
@@ -399,6 +407,7 @@
         query-doc
         :icon/query
         "ADVANCED"]
+       ["Advanced Query" (advanced-query-steps) "Create an advanced query block" :icon/advanced-query]
        (when-not db?
          ["Zotero" (zotero-steps) "Import Zotero journal article" :icon/circle-letter-z])
        ["Query function" [[:editor/input "{{function }}" {:backward-pos 2}]] "Create a query function" :icon/queryCode]
@@ -739,6 +748,14 @@
     (when-let [block (state/get-edit-block)]
       (db-property-handler/set-block-property! (:db/id block) property-id value))))
 
+(defmethod handle-step :editor/set-property-on-block-property [[_ block-property-id property-id value]]
+  (when (config/db-based-graph? (state/get-current-repo))
+    (let [updated-block (when-let [block-uuid (:block/uuid (state/get-edit-block))]
+                          (db/entity [:block/uuid block-uuid]))
+          block-property-value (get updated-block block-property-id)]
+      (when block-property-value
+        (db-property-handler/set-block-property! (:db/id block-property-value) property-id value)))))
+
 (defn- file-based-set-priority
   [priority]
   (when-let [input-id (state/get-edit-input-id)]
@@ -897,8 +914,11 @@
 
 (defn handle-steps
   [vector' format]
-  (doseq [step vector']
-    (handle-step step format)))
+  (if (config/db-based-graph? (state/get-current-repo))
+    (p/doseq [step vector']
+      (handle-step step format))
+    (doseq [step vector']
+      (handle-step step format))))
 
 (defn exec-plugin-simple-command!
   [pid {:keys [block-id] :as cmd} action]