Browse Source

fix(query): queries involving block properties with page references

Related to #1028
Tienson Qin 5 years ago
parent
commit
9392a2b95f
1 changed files with 22 additions and 2 deletions
  1. 22 2
      src/main/frontend/db/query_custom.cljs

+ 22 - 2
src/main/frontend/db/query_custom.cljs

@@ -10,7 +10,9 @@
             [frontend.extensions.sci :as sci]
             [lambdaisland.glogi :as log]
             [frontend.util :as util]
-            [frontend.db.react :as react]))
+            [frontend.db.react :as react]
+            [frontend.text :as text]
+            [clojure.walk :as walk]))
 
 (defn- resolve-input
   [input]
@@ -34,6 +36,9 @@
           days (util/parse-int (subs input 0 (dec (count input))))]
       (date->int (t/plus (t/today) (t/days days))))
 
+    (and (string? input) (text/page-ref? input))
+    (text/page-ref-un-brackets! input)
+
     :else
     input))
 
@@ -66,10 +71,25 @@
           (db-utils/group-by-page result)
           result)))))
 
+(defn- resolve-query
+  [query]
+  (let [page-ref? #(and (string? %) (text/page-ref? %))]
+    (walk/postwalk
+     (fn [f]
+       (if (and (list? f)
+                (= (first f) '=)
+                (= 3 (count f))
+                (some page-ref? (rest f)))
+         (let [[x y] (rest f)
+               [page-ref sym] (if (page-ref? x) [x y] [y x])]
+           (list 'contains? sym (text/page-ref-un-brackets! page-ref)))
+         f)) query)))
+
 (defn react-query
   [repo {:keys [query inputs] :as query'} query-opts]
   (try
-    (let [inputs (map resolve-input inputs)
+    (let [query (resolve-query query)
+          inputs (map resolve-input inputs)
           repo (or repo (state/get-current-repo))
           k [:custom query']]
       (apply react/q repo k query-opts query inputs))