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
This commit is contained in:
Gabriel Horner
2024-09-26 10:55:50 -04:00
parent 35aa732303
commit a0d4e43d18
5 changed files with 55 additions and 34 deletions

View File

@@ -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

View File

@@ -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"}

View File

@@ -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

2
deps/shui/deps.edn vendored
View File

@@ -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"}}}

View File

@@ -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]