Browse Source

refactor: remove :name from built-in-properties

Remove it from built-in-properites as very few properties used
it and no new properties will use. :name is only used for file graph
property ids for looking up ids via get-pid or for the db graph import
Gabriel Horner 5 months ago
parent
commit
281ce7e0e0

+ 12 - 1
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"

+ 3 - 17
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

+ 3 - 4
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

+ 16 - 17
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 all-built-in-property-names
-  "All built-in property names as a set of keywords"
-  (-> built-in-property-name-to-idents keys set
+(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-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))