From 43dfdbe0ae8a2bbba52300639d2b3cf34d86e01d Mon Sep 17 00:00:00 2001 From: Gabriel Horner Date: Thu, 16 May 2024 11:21:49 -0400 Subject: [PATCH] fix: convert remaining built-in :string props to :default --- deps/db/src/logseq/db/frontend/property.cljs | 8 +++--- .../logseq/db/frontend/property/build.cljs | 4 ++- .../src/logseq/db/frontend/property/util.cljs | 10 ++++--- .../logseq/tasks/db_graph/create_graph.cljs | 8 +++--- src/main/frontend/extensions/slide.cljs | 20 +++++++++++--- src/main/frontend/worker/handler/page.cljs | 26 +++++++++++++++---- 6 files changed, 56 insertions(+), 20 deletions(-) diff --git a/deps/db/src/logseq/db/frontend/property.cljs b/deps/db/src/logseq/db/frontend/property.cljs index 30f19c5a43..8323185139 100644 --- a/deps/db/src/logseq/db/frontend/property.cljs +++ b/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* diff --git a/deps/db/src/logseq/db/frontend/property/build.cljs b/deps/db/src/logseq/db/frontend/property/build.cljs index fe2870754d..87e1e2b574 100644 --- a/deps/db/src/logseq/db/frontend/property/build.cljs +++ b/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)) diff --git a/deps/db/src/logseq/db/frontend/property/util.cljs b/deps/db/src/logseq/db/frontend/property/util.cljs index 1c2bbefc7e..c55a71b323 100644 --- a/deps/db/src/logseq/db/frontend/property/util.cljs +++ b/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 diff --git a/scripts/src/logseq/tasks/db_graph/create_graph.cljs b/scripts/src/logseq/tasks/db_graph/create_graph.cljs index 07abe83c47..ebbb674d23 100644 --- a/scripts/src/logseq/tasks/db_graph/create_graph.cljs +++ b/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 diff --git a/src/main/frontend/extensions/slide.cljs b/src/main/frontend/extensions/slide.cljs index ae58054b55..730f0587df 100644 --- a/src/main/frontend/extensions/slide.cljs +++ b/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 diff --git a/src/main/frontend/worker/handler/page.cljs b/src/main/frontend/worker/handler/page.cljs index 57c6ba351c..d8b3b888af 100644 --- a/src/main/frontend/worker/handler/page.cljs +++ b/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)