Browse Source

fix: convert remaining built-in :string props to :default

Gabriel Horner 1 year ago
parent
commit
43dfdbe0ae

+ 4 - 4
deps/db/src/logseq/db/frontend/property.cljs

@@ -13,7 +13,7 @@
    * :schema - Property's schema. Required key. Has the following common keys:
      * :type - Property type
      * :cardinality - property cardinality. Default to one/single cardinality if not set
-     * :hide? - Boolean which hides property when set on a block
+     * :hide? - Boolean which hides property when set on a block or exported e.g. slides
      * :public? - Boolean which allows property to be used by user e.g. add and remove property to blocks/pages
      * :view-context - Keyword to indicate which view contexts a property can be
        seen in when :public? is set. Valid values are :page and :block. Property can
@@ -43,7 +43,7 @@
                                         :cardinality :many}}
    :logseq.property/background-color {:schema {:type :default :hide? true}}
    :logseq.property/background-image {:schema
-                                      {:type :string
+                                      {:type :default
                                        :view-context :block
                                        :public? true}}
    ;; number (1-6) or boolean for auto heading
@@ -146,9 +146,9 @@
                                               :view-context :page
                                               :public? true}}
    :logseq.property.pdf/file
-   {:schema {:type :string :hide? true :public? true :view-context :page}}
+   {:schema {:type :default :hide? true :public? true :view-context :page}}
    :logseq.property.pdf/file-path
-   {:schema {:type :string :hide? true :public? true :view-context :page}}))
+   {:schema {:type :default :hide? true :public? true :view-context :page}}))
 
 (def built-in-properties
   (->> built-in-properties*

+ 3 - 1
deps/db/src/logseq/db/frontend/property/build.cljs

@@ -59,6 +59,8 @@
                (:closed-values property)))))
 
 (defn build-property-value-block
+  "Builds a property value entity given a block map/entity, a property entity or
+  ident and its property value"
   [block property value]
   (-> {:block/uuid (d/squuid)
        :block/format :markdown
@@ -69,6 +71,6 @@
                      (:db/id block))
        :block/parent (:db/id block)
        :logseq.property/created-from-property (or (:db/id property)
-                                                  {:db/ident (:db/ident property)})
+                                                  (when (keyword? property) {:db/ident property}))
        :block/order (db-order/gen-key)}
       sqlite-util/block-with-timestamps))

+ 7 - 3
deps/db/src/logseq/db/frontend/property/util.cljs

@@ -13,14 +13,18 @@
     db-ident
     (get-in db-property/built-in-properties [db-ident :name])))
 
+(defn built-in-has-ref-value?
+  "Given a built-in's db-ident, determine if its property value is a ref"
+  [db-ident]
+  (contains? db-property-type/value-ref-property-types
+             (get-in db-property/built-in-properties [db-ident :schema :type])))
+
 (defn lookup
   "Get the property value by a built-in property's db-ident from coll. For file and db graphs"
   [repo coll db-ident]
   (if (sqlite-util/db-based-graph? repo)
     (let [val (get coll db-ident)]
-      (if (db-property-type/value-ref-property-types (get-in db-property/built-in-properties [db-ident :schema :type]))
-        (:block/content val)
-        val))
+      (if (built-in-has-ref-value? db-ident) (:block/content val) val))
     (get coll (get-pid repo db-ident))))
 
 (defn get-block-property-value

+ 4 - 4
scripts/src/logseq/tasks/db_graph/create_graph.cljs

@@ -102,10 +102,10 @@
   #(swap! current-db-id dec))
 
 (defn- create-property-value
-  [block property value]
+  [block property-ident value]
   (db-property-build/build-property-value-block
    block
-   property
+   property-ident
    ;; FIXME: Remove when fixed in UI
    (str value)))
 
@@ -119,8 +119,8 @@
                          ;; TODO: Support translate-property-value without this hack
                          (not (vector? v)))
                 [k (if (set? v)
-                     (set (map #(create-property-value new-block {:db/ident (get-ident all-idents k)} %) v))
-                     (create-property-value new-block {:db/ident (get-ident all-idents k)} v))])))
+                     (set (map #(create-property-value new-block (get-ident all-idents k) %) v))
+                     (create-property-value new-block (get-ident all-idents k) v))])))
        (into {})))
 
 (defn- property-value-properties

+ 17 - 3
src/main/frontend/extensions/slide.cljs

@@ -13,15 +13,29 @@
             [frontend.state :as state]
             [frontend.handler.db-based.property.util :as db-pu]
             [logseq.db :as ldb]
-            [logseq.db.frontend.property :as db-property]))
+            [logseq.db.frontend.property :as db-property]
+            [logseq.db.frontend.property.util :as db-property-util]))
 
 (defn loaded? []
   js/window.Reveal)
 
 (defn- with-properties
   [m block]
-  (let [db-based? (config/db-based-graph? (state/get-current-repo))
-        properties (if db-based? (db-property/properties block) (:block/properties block))]
+  (let [repo (state/get-current-repo)
+        db-based? (config/db-based-graph? repo)
+        properties (if db-based?
+                     (as-> (db-property/properties block) properties
+                       (->> properties
+                            (keep (fn [[k v]]
+                                    ;; Don't inject hidden props like created-from-property
+                                    (when-not (:hide? (:block/schema (db/entity repo k)))
+                                      ;; Can't use db-property-util/lookup b/c vals aren't entities
+                                      [k (if-let [db-id (:db/id (get properties k))]
+                                           (:block/content (db/entity repo db-id))
+                                           v)
+                                       (db-property-util/lookup repo properties k)])))
+                            (into {})))
+                     (:block/properties block))]
     (if (seq properties)
       (merge m
              (update-keys

+ 21 - 5
src/main/frontend/worker/handler/page.cljs

@@ -13,7 +13,9 @@
             [logseq.db.frontend.content :as db-content]
             [medley.core :as medley]
             [frontend.worker.date :as date]
-            [logseq.db.frontend.order :as db-order]))
+            [logseq.db.frontend.order :as db-order]
+            [logseq.db.frontend.property.util :as db-property-util]
+            [logseq.db.frontend.property.build :as db-property-build]))
 
 (defn properties-block
   [repo conn config date-formatter properties format page]
@@ -39,10 +41,24 @@
                                                                          (:db/id (d/entity @conn [:block/uuid %])))
                                                               tags)}))]
       (if (sqlite-util/db-based-graph? repo)
-        [(merge page'
-                ;; FIXME: Add refs for properties?
-                properties
-                (when class? {:block/type "class"}))]
+        (let [property-vals-tx-m
+              ;; Builds property values for built-in :one properties like logseq.property.pdf/file
+              (->> properties
+                   (keep (fn [[k v]]
+                           (when (db-property-util/built-in-has-ref-value? k)
+                             [k
+                              (db-property-build/build-property-value-block {:db/id page-entity} k v)])))
+                   (into {}))]
+          (cond-> [(merge page'
+                         (when class? {:block/type "class"}))]
+           (seq property-vals-tx-m)
+           (into (vals property-vals-tx-m))
+           true
+           (conj (merge {:block/uuid (:block/uuid page)}
+                       ;; FIXME: Add refs for properties?
+                        properties
+                       ;; Replace property values with their refs
+                        (update-vals property-vals-tx-m #(vector :block/uuid (:block/uuid %)))))))
         (let [file-page (merge page'
                                (when (seq properties) {:block/properties properties}))]
           (if (and (seq properties)