diff --git a/deps/graph-parser/src/logseq/graph_parser/exporter.cljs b/deps/graph-parser/src/logseq/graph_parser/exporter.cljs index 16a96b487f..89fb4a6f38 100644 --- a/deps/graph-parser/src/logseq/graph_parser/exporter.cljs +++ b/deps/graph-parser/src/logseq/graph_parser/exporter.cljs @@ -142,7 +142,10 @@ block)] (cond-> block' (macro-util/query-macro? (:block/title block)) - (update :block/tags (fnil conj []) :logseq.class/Query)))) + ((fn [b] + (merge (update b :block/tags (fnil conj []) :logseq.class/Query) + ;; Blank title here as query property has already been set + {:block/title ""})))))) (defn- update-block-marker "If a block has a marker, convert it to a task object" @@ -381,6 +384,11 @@ [(built-in-property-name-to-idents prop) prop-value])))) (into {}))] (cond-> m + (macro-util/query-macro? title) + (assoc :logseq.property/query + (or (some->> (second (re-find #"\{\{query(.*)\}\}" title)) + string/trim) + title)) (and (contains? props :query-sort-desc) (:query-sort-by props)) (update :logseq.property.table/sorting (fn [v] diff --git a/deps/graph-parser/test/logseq/graph_parser/exporter_test.cljs b/deps/graph-parser/test/logseq/graph_parser/exporter_test.cljs index b576c89ca7..1e8d98c375 100644 --- a/deps/graph-parser/test/logseq/graph_parser/exporter_test.cljs +++ b/deps/graph-parser/test/logseq/graph_parser/exporter_test.cljs @@ -17,7 +17,8 @@ [logseq.common.config :as common-config] [logseq.db :as ldb] [logseq.outliner.db-pipeline :as db-pipeline] - [logseq.db.test.helper :as db-test])) + [logseq.db.test.helper :as db-test] + [logseq.db.frontend.rules :as rules])) ;; Helpers ;; ======= @@ -40,6 +41,13 @@ db) first))) +(defn- find-block-by-property [db property property-value] + (->> (d/q '[:find [(pull ?b [*]) ...] + :in $ ?prop ?prop-value % + :where (property ?b ?prop ?prop-value)] + db property property-value (rules/extract-rules rules/db-query-dsl-rules [:property])) + first)) + (defn- find-page-by-name [db name] (->> name (d/q '[:find [(pull ?b [*]) ...] @@ -124,13 +132,13 @@ (if (boolean? v) [k v] [k - (if-let [built-in-type (get-in db-property/built-in-properties [k :schema :type])] - (if (= :block/tags k) - (mapv #(:db/ident (d/entity db (:db/id %))) v) - (if (db-property-type/all-ref-property-types built-in-type) - (db-property/ref->property-value-contents db v) - v)) - (db-property/ref->property-value-contents db v))]))) + (if-let [built-in-type (get-in db-property/built-in-properties [k :schema :type])] + (if (= :block/tags k) + (mapv #(:db/ident (d/entity db (:db/id %))) v) + (if (db-property-type/all-ref-property-types built-in-type) + (db-property/ref->property-value-contents db v) + v)) + (db-property/ref->property-value-contents db v))]))) (into {}))) ;; Tests @@ -289,8 +297,9 @@ (is (= {:logseq.property.table/sorting [{:id :user.property/prop-num, :asc? false}] :logseq.property.view/type "Table View" :logseq.property.table/ordered-columns [:block/title :user.property/prop-string :user.property/prop-num] + :logseq.property/query "(property :prop-string)" :block/tags [:logseq.class/Query]} - (readable-properties @conn (find-block-by-content @conn "{{query (property :prop-string)}}"))) + (readable-properties @conn (find-block-by-property @conn :logseq.property/query "(property :prop-string)"))) "query block has correct query properties")) (testing "db attributes"