Browse Source

fix: page/date closed values for *property queries

Also updated example graph to show closed value queries working
Gabriel Horner 1 year ago
parent
commit
62e6084b45

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

@@ -209,3 +209,8 @@
             (let [e (d/entity db [:block/uuid id])]
               (when (= (get-in e [:block/schema :value]) value-name)
                 e))) values)))
+
+(defn closed-value-name
+  "Gets name of closed value given closed value ent/map. Works for all closed value types including pages"
+  [ent]
+  (or (:block/original-name ent) (get-in ent [:block/schema :value])))

+ 16 - 4
scripts/src/logseq/tasks/db_graph/create_graph_with_properties.cljs

@@ -4,6 +4,7 @@
    NOTE: This script is also used in CI to confirm graph creation works"
   (:require [logseq.tasks.db-graph.create-graph :as create-graph]
             [logseq.common.util.date-time :as date-time-util]
+            [logseq.common.util.page-ref :as page-ref]
             [logseq.db.frontend.property.type :as db-property-type]
             [clojure.string :as string]
             [datascript.core :as d]
@@ -48,8 +49,15 @@
         yesterday (subtract-days today 1)
         two-days-ago (subtract-days today 2)
         closed-values-config (build-closed-values-config {:dates [today yesterday two-days-ago]})
-        random-closed-value #(-> closed-values-config % rand-nth :uuid)
-        random-page-closed-value #(-> closed-values-config % rand-nth :value)]
+        ;; Stores random closed values for use with queries
+        closed-values (atom {})
+        random-closed-value #(let [val (-> closed-values-config % rand-nth)]
+                               (swap! closed-values assoc % (:value val))
+                               (:uuid val))
+        random-page-closed-value #(let [val (-> closed-values-config % rand-nth :value)]
+                                    (swap! closed-values assoc % (second val))
+                                    val)
+        get-closed-value #(get @closed-values %)]
     {:pages-and-blocks
      [{:page
        {:block/name (date-journal-title today) :block/journal? true :block/journal-day (date-journal-day today)}
@@ -83,13 +91,17 @@
        [{:block/content "{{query (property :default \"haha\")}}"}
         {:block/content "{{query (property :url \"https://logseq.com\")}}"}
         {:block/content "{{query (property :url-many \"https://logseq.com\")}}"}
+        {:block/content (str "{{query (property :url-closed " (pr-str (get-closed-value :url-closed)) ")}}")}
         {:block/content "{{query (property :checkbox true)}}"}
         {:block/content "{{query (property :number 5)}}"}
         {:block/content "{{query (property :number-many 10)}}"}
+        {:block/content (str "{{query (property :number-closed " (pr-str (get-closed-value :number-closed)) ")}}")}
         {:block/content "{{query (property :page [[Page 1]])}}"}
         {:block/content "{{query (property :page-many [[Page 2]])}}"}
-        {:block/content (str "{{query (property :date [[" (string/capitalize (date-journal-title today)) "]])}}")}
-        {:block/content (str "{{query (property :date-many [[" (string/capitalize (date-journal-title yesterday)) "]])}}")}]}
+        {:block/content (str "{{query (property :page-closed " (page-ref/->page-ref (string/capitalize (get-closed-value :page-closed))) ")}}")}
+        {:block/content (str "{{query (property :date " (page-ref/->page-ref (string/capitalize (date-journal-title today))) ")}}")}
+        {:block/content (str "{{query (property :date-many " (page-ref/->page-ref (string/capitalize (date-journal-title yesterday))) ")}}")}
+        {:block/content (str "{{query (property :date-closed " (page-ref/->page-ref (string/capitalize (get-closed-value :date-closed))) ")}}")}]}
       {:page {:block/name "page 1"}
        :blocks
        [{:block/content "yee"}

+ 3 - 3
src/main/frontend/components/property/closed_value.cljs

@@ -17,7 +17,8 @@
             [frontend.db.async :as db-async]
             [frontend.state :as state]
             [frontend.handler.property.util :as pu]
-            [promesa.core :as p]))
+            [promesa.core :as p]
+            [logseq.db.frontend.property :as db-property]))
 
 (defn- <upsert-closed-value!
   "Create new closed value and returns its block UUID."
@@ -110,8 +111,7 @@
   (rum/local false ::hover?)
   [state item {:keys [toggle-fn delete-choice update-icon]} parent-opts]
   (let [*hover? (::hover? state)
-        value (or (:block/original-name item)
-                  (get-in item [:block/schema :value]))
+        value (db-property/closed-value-name item)
         page? (:block/original-name item)]
     [:div.flex.flex-1.flex-row.items-center.gap-2.justify-between
      {:on-mouse-over #(reset! *hover? true)

+ 3 - 3
src/main/frontend/components/property/value.cljs

@@ -24,7 +24,8 @@
             [promesa.core :as p]
             [frontend.db.async :as db-async]
             [logseq.common.util.macro :as macro-util]
-            [logseq.db :as ldb]))
+            [logseq.db :as ldb]
+            [logseq.db.frontend.property :as db-property]))
 
 (defn- select-type?
   [property type]
@@ -393,8 +394,7 @@
                     (keep (fn [id]
                             (when-let [block (when id (db/entity [:block/uuid id]))]
                               (let [icon (pu/get-block-property-value block :icon)
-                                    value (or (:block/original-name block)
-                                              (get-in block [:block/schema :value]))]
+                                    value (db-property/closed-value-name block)]
                                 {:label (if icon
                                           [:div.flex.flex-row.gap-2
                                            (icon-component/icon icon)

+ 1 - 1
src/main/frontend/db/query_dsl.cljs

@@ -276,7 +276,7 @@
         values (get-in property [:block/schema :values])
         v' (if (seq values)             ; closed values
              (or
-              (some #(when-let [closed-value (get-in (db-utils/entity [:block/uuid %]) [:block/schema :value])]
+              (some #(when-let [closed-value (db-property/closed-value-name (db-utils/entity [:block/uuid %]))]
                        (when (= v closed-value)
                          %))
                     values)

+ 3 - 3
src/main/frontend/handler/db_based/property/util.cljs

@@ -3,7 +3,8 @@
   (:require [frontend.db.utils :as db-utils]
             [frontend.state :as state]
             [logseq.common.util :as common-util]
-            [frontend.db :as db]))
+            [frontend.db :as db]
+            [logseq.db.frontend.property :as db-property]))
 
 (defn get-property-name
   "Get a property's name given its uuid"
@@ -39,8 +40,7 @@
                     readable-property-val
                     #(if (seq (get-in prop-ent [:block/schema :values])) ; closed values
                        (when-let [block (db-utils/entity [:block/uuid %])]
-                         (or (:block/original-name block)
-                             (get-in block [:block/schema :value])))
+                         (db-property/closed-value-name block))
                        %)]
                 [(-> prop-ent :block/name keyword)
                 (if (set? v)