diff --git a/deps/db/src/logseq/db/common/property_util.cljs b/deps/db/src/logseq/db/common/property_util.cljs index 262feff741..58ea24f5d2 100644 --- a/deps/db/src/logseq/db/common/property_util.cljs +++ b/deps/db/src/logseq/db/common/property_util.cljs @@ -4,6 +4,17 @@ [logseq.db.frontend.property :as db-property] [logseq.db.sqlite.util :as sqlite-util])) +(defn get-file-pid + "Gets file graph property id given the db graph ident" + [db-ident] + ;; Map of unique cases where the db graph keyword name is different than the file graph id + (let [unique-file-ids {:logseq.property/order-list-type :logseq.order-list-type + :logseq.property.tldraw/page :logseq.tldraw.page + :logseq.property.tldraw/shape :logseq.tldraw.shape + :logseq.property/publishing-public? :public}] + (or (get unique-file-ids db-ident) + (keyword (name db-ident))))) + ;; TODO: replace repo with db later to remove this fn (defn get-pid "Get a built-in property's id (keyword name for file graph and db-ident for db @@ -11,7 +22,7 @@ [repo db-ident] (if (sqlite-util/db-based-graph? repo) db-ident - (get-in db-property/built-in-properties [db-ident :name] (name db-ident)))) + (get-file-pid db-ident))) (defn lookup "Get the property value by a built-in property's db-ident from coll. For file and db graphs" diff --git a/deps/db/src/logseq/db/frontend/property.cljs b/deps/db/src/logseq/db/frontend/property.cljs index 944add2218..6292992444 100644 --- a/deps/db/src/logseq/db/frontend/property.cljs +++ b/deps/db/src/logseq/db/frontend/property.cljs @@ -12,7 +12,7 @@ ;; Main property vars ;; ================== -(def ^:large-vars/data-var built-in-properties* +(def ^:large-vars/data-var built-in-properties "Map of built in properties for db graphs with their :db/ident as keys. Each property has a config map with the following keys: TODO: Move some of these keys to :properties since :schema is a deprecated concept @@ -26,8 +26,6 @@ seen in when :public? is set. Valid values are :page, :block and :never. Property can be viewed in any context if not set * :title - Property's :block/title - * :name - Property's :block/name as a keyword. If none given, one is derived from the db/ident. - TODO: This is barely used for old properties. Deprecate this and move to gp-exporter * :attribute - Property keyword that is saved to a datascript attribute outside of :block/properties * :queryable? - Boolean for whether property can be queried in the query builder * :closed-values - Vec of closed-value maps for properties with choices. Map @@ -241,7 +239,6 @@ :schema {:type :map :hide? true}} ;; FIXME: :logseq.property/order-list-type should updated to closed values :logseq.property/order-list-type {:title "List type" - :name :logseq.order-list-type :schema {:type :default :hide? true}} :logseq.property.linked-references/includes {:title "Included references" @@ -253,10 +250,10 @@ :schema {:type :node :cardinality :many :hide? true}} - :logseq.property.tldraw/page {:name :logseq.tldraw.page + :logseq.property.tldraw/page {:title "Tldraw Page" :schema {:type :map :hide? true}} - :logseq.property.tldraw/shape {:name :logseq.tldraw.shape + :logseq.property.tldraw/shape {:title "Tldraw Shape" :schema {:type :map :hide? true}} @@ -567,17 +564,6 @@ :public? true} :queryable? true}))) -(def built-in-properties - (->> built-in-properties* - (map (fn [[k v]] - (assert (and (keyword? k) (namespace k))) - [k - ;; All built-ins must have a :name - (if (:name v) - v - (assoc v :name (keyword (string/lower-case (name k)))))])) - (into (ordered-map)))) - (def db-attribute-properties "Internal properties that are also db schema attributes" #{:block/alias :block/tags :block/parent diff --git a/deps/db/src/logseq/db/sqlite/create_graph.cljs b/deps/db/src/logseq/db/sqlite/create_graph.cljs index 7c870d1cb9..08390987c4 100644 --- a/deps/db/src/logseq/db/sqlite/create_graph.cljs +++ b/deps/db/src/logseq/db/sqlite/create_graph.cljs @@ -51,20 +51,19 @@ "Given a properties map in the format of db-property/built-in-properties, builds their properties tx" [built-in-properties] (mapcat - (fn [[db-ident {:keys [attribute schema title closed-values properties] :as m}]] + (fn [[db-ident {:keys [attribute schema title closed-values properties]}]] (let [db-ident (or attribute db-ident) - prop-name (or title (name (:name m))) schema' (schema->qualified-property-keyword schema) [property & others] (if closed-values (db-property-build/build-closed-values db-ident - prop-name + title {:db/ident db-ident :schema schema' :closed-values closed-values} {}) [(sqlite-util/build-new-property db-ident schema' - {:title prop-name})]) + {:title title})]) pvalue-tx-m (->property-value-tx-m (merge property ;; This config is for :logseq.property/default-value and may need to diff --git a/deps/graph-parser/src/logseq/graph_parser/exporter.cljs b/deps/graph-parser/src/logseq/graph_parser/exporter.cljs index 8f2d1939f5..d9f954ce13 100644 --- a/deps/graph-parser/src/logseq/graph_parser/exporter.cljs +++ b/deps/graph-parser/src/logseq/graph_parser/exporter.cljs @@ -29,7 +29,8 @@ [logseq.graph-parser.block :as gp-block] [logseq.graph-parser.extract :as extract] [logseq.graph-parser.property :as gp-property] - [promesa.core :as p])) + [promesa.core :as p] + [logseq.db.common.property-util :as db-property-util])) (defn- add-missing-timestamps "Add updated-at or created-at timestamps if they doesn't exist" @@ -405,25 +406,23 @@ (when (and prev-type (not= prev-type prop-type)) {:type {:from prev-type :to prop-type}}))) -(def built-in-property-name-to-idents - "Map of all built-in keyword property names to their idents. Using in-memory property - names because these are legacy names already in a user's file graph" - (merge (->> (dissoc db-property/built-in-properties :logseq.property/publishing-public?) - (map (fn [[k v]] - [(:name v) k])) - (into {})) - ;; TODO: Move 3 remaining :name config from built-in-properties to here - {:public :logseq.property/publishing-public?})) +(def built-in-property-file-to-db-idents + "Map of built-in property file ids to their db graph idents" + (->> (keys db-property/built-in-properties) + (map (fn [k] + [(db-property-util/get-file-pid k) k])) + (into {}))) -(def all-built-in-property-names - "All built-in property names as a set of keywords" - (-> built-in-property-name-to-idents keys set +(def all-built-in-property-file-ids + "All built-in property file ids as a set of keywords" + (-> built-in-property-file-to-db-idents keys set ;; built-in-properties that map to new properties (set/union #{:filters :query-table :query-properties :query-sort-by :query-sort-desc :hl-stamp :file :file-path}))) +;; TODO: Review whether this should be using :block/title instead of file graph ids (def all-built-in-names "All built-in properties and classes as a set of keywords" - (set/union all-built-in-property-names + (set/union all-built-in-property-file-ids (set (->> db-class/built-in-classes vals (map #(-> % :title string/lower-case keyword)))))) @@ -436,7 +435,7 @@ :logseq.order-list-type :logseq.tldraw.page :logseq.tldraw.shape :icon :public :exclude-from-graph-view :filters}) -(assert (set/subset? file-built-in-property-names all-built-in-property-names) +(assert (set/subset? file-built-in-property-names all-built-in-property-file-ids) "All file-built-in properties are used in db graph") (def query-table-special-keys @@ -518,7 +517,7 @@ :ls-type [[:logseq.property/ls-type (keyword prop-value)]] ;; else - [[(built-in-property-name-to-idents prop) prop-value]])))) + [[(built-in-property-file-to-db-idents prop) prop-value]])))) (into {}))] (cond-> m (and (contains? props :query-sort-desc) (:query-sort-by props))