Просмотр исходного кода

fix: migrate built-in? property to use :checkbox

Can now delete temporary :boolean type
Gabriel Horner 1 год назад
Родитель
Сommit
c772b0cdd1

+ 3 - 2
deps/db/src/logseq/db.cljs

@@ -11,7 +11,8 @@
             [logseq.db.frontend.entity-plus :as entity-plus]
             [logseq.db.frontend.rules :as rules]
             [logseq.db.sqlite.common-db :as sqlite-common-db]
-            [logseq.db.sqlite.util :as sqlite-util]))
+            [logseq.db.sqlite.util :as sqlite-util]
+            [logseq.db.frontend.property :as db-property]))
 
 ;; Use it as an input argument for datalog queries
 (def block-attrs
@@ -448,7 +449,7 @@
 (defn built-in?
   "Built-in page or block"
   [entity]
-  (:logseq.property/built-in? entity))
+  (db-property/property-value-content (:logseq.property/built-in? entity)))
 
 (defn built-in-class-property?
   "Whether property a built-in property for the specific class"

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

@@ -53,7 +53,7 @@
                                                     :hide? true}}
    :logseq.property/source-page           {:schema {:type :entity
                                                     :hide? true}}
-   :logseq.property/built-in?             {:schema {:type :boolean
+   :logseq.property/built-in?             {:schema {:type :checkbox
                                                     :hide? true}}
    :logseq.property/hide-properties?      {:schema {:type :checkbox
                                                     :hide? true}}

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

@@ -31,10 +31,6 @@
     icon
     (assoc :logseq.property/icon icon)
 
-    ;; For now, only closed values with :db/ident are built-in?
-    (and db-ident (keyword? db-ident))
-    sqlite-util/mark-block-as-built-in
-
     description
     (update :block/schema assoc :description description)
 

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

@@ -11,8 +11,7 @@
 
 (def internal-built-in-property-types
   "Valid property types only for use by internal built-in-properties"
-  ;; TODO: Remove :boolean when logseq.property/built-in? references reusable property value entity on startup
-  #{:keyword :map :coll :any :entity :boolean})
+  #{:keyword :map :coll :any :entity})
 
 (def user-built-in-property-types
   "Valid property types for users in order they appear in the UI"
@@ -138,7 +137,6 @@
               {:error/message "should be a journal date"}
               date?]
    :checkbox checkbox-entity?
-   :boolean  boolean?
    :url      [:fn
               {:error/message "should be a URL"}
               url-entity?]

+ 45 - 13
deps/db/src/logseq/db/sqlite/create_graph.cljs

@@ -8,7 +8,10 @@
             [logseq.common.util :as common-util]
             [datascript.core :as d]))
 
-(defn- build-initial-properties
+(defn- mark-block-as-built-in [block built-in-prop-value]
+  (assoc block :logseq.property/built-in? [:block/uuid (:block/uuid built-in-prop-value)]))
+
+(defn- build-initial-properties*
   []
   (mapcat
    (fn [[db-ident {:keys [schema original-name closed-values] :as m}]]
@@ -23,8 +26,38 @@
                       db-ident
                       schema
                       {:original-name prop-name})])]
-       (update blocks 0 sqlite-util/mark-block-as-built-in)))
-   db-property/built-in-properties))
+       blocks))
+   (dissoc db-property/built-in-properties :logseq.property/built-in?)))
+
+(defn- build-initial-properties
+  "Builds initial properties and their closed values and marks them
+  as built-in?. Returns their tx data as well as data needed for subsequent build steps"
+  []
+  (let [built-in-property-schema (get-in db-property/built-in-properties [:logseq.property/built-in? :schema])
+        built-in-property (sqlite-util/build-new-property
+                           :logseq.property/built-in?
+                           built-in-property-schema
+                           {:original-name (name :logseq.property/built-in?)})
+        built-in-prop-value (db-property-build/build-property-value-block
+                             {:db/id [:block/uuid (:block/uuid built-in-property)]}
+                             {:db/ident :logseq.property/built-in?
+                              :block/schema built-in-property-schema}
+                             true)
+        mark-block-as-built-in' (fn [block]
+                                  (mark-block-as-built-in {:block/uuid (:block/uuid block)} built-in-prop-value))
+        properties (build-initial-properties*)
+        ;; Tx order matters. built-in-property must come first as all properties depend on it.
+        tx (concat [built-in-property]
+                   properties
+                   [built-in-prop-value]
+                   ;; Adding built-ins must come after initial properties and built-in-prop-value
+                   [(mark-block-as-built-in' built-in-property)]
+                   (map mark-block-as-built-in' properties)
+                   (keep #(when (= #{"closed value"} (:block/type %)) (mark-block-as-built-in' %))
+                         properties))]
+    {:tx tx
+     :properties (filter #(= "property" (:block/type %)) properties)
+     :built-in-prop-value built-in-prop-value}))
 
 
 (defn kv
@@ -49,11 +82,11 @@
                          (vec conflicting-idents))
                     {:idents conflicting-idents}))))
 
-(defn- build-initial-classes [db-ident->properties]
+(defn- build-initial-classes [db-ident->properties built-in-prop-value]
   (map
    (fn [[db-ident {:keys [schema original-name]}]]
      (let [original-name' (or original-name (name db-ident))]
-       (sqlite-util/mark-block-as-built-in
+       (mark-block-as-built-in
         (sqlite-util/build-new-class
          (let [properties (mapv
                            (fn [db-ident]
@@ -67,7 +100,8 @@
              :db/ident db-ident
              :block/uuid (d/squuid)}
              (seq properties)
-             (assoc :class/schema.properties properties)))))))
+             (assoc :class/schema.properties properties))))
+        built-in-prop-value)))
    db-class/built-in-classes))
 
 (defn build-db-initial-data
@@ -94,14 +128,12 @@
                         :file/content ""
                         :file/created-at (js/Date.)
                         :file/last-modified-at (js/Date.)}]
+        {properties-tx :tx :keys [built-in-prop-value properties]} (build-initial-properties)
+        db-ident->properties (zipmap (map :db/ident properties) properties)
+        default-classes (build-initial-classes db-ident->properties built-in-prop-value)
         default-pages (->> (map sqlite-util/build-new-page built-in-pages-names)
-                           (map sqlite-util/mark-block-as-built-in))
-        default-properties (build-initial-properties)
-        db-ident->properties (zipmap
-                              (map :db/ident default-properties)
-                              default-properties)
-        default-classes (build-initial-classes db-ident->properties)
-        tx (vec (concat initial-data default-properties default-classes
+                           (map #(mark-block-as-built-in % built-in-prop-value)))
+        tx (vec (concat initial-data properties-tx default-classes
                         initial-files default-pages))]
     (validate-tx-for-duplicate-idents tx)
     tx))

+ 1 - 6
deps/db/src/logseq/db/sqlite/util.cljs

@@ -129,9 +129,4 @@
 (defn page?
   [block]
   (and (:block/name block)
-       (nil? (:block/page block))))
-
-(defn mark-block-as-built-in
-  "Marks built-in blocks as built-in? including pages, classes, properties and closed values"
-  [block]
-  (assoc block :logseq.property/built-in? true))
+       (nil? (:block/page block))))

+ 3 - 3
deps/db/test/logseq/db/sqlite/create_graph_test.cljs

@@ -6,8 +6,7 @@
             [logseq.db.frontend.schema :as db-schema]
             [logseq.db.sqlite.create-graph :as sqlite-create-graph]
             [logseq.db.frontend.validate :as db-validate]
-            [logseq.db.frontend.property :as db-property]
-            [logseq.db :as ldb]))
+            [logseq.db.frontend.property :as db-property]))
 
 (deftest new-graph-db-idents
   (testing "a new graph follows :db/ident conventions for"
@@ -54,7 +53,8 @@
                     (remove #(or (= "logseq.kv" (namespace (:db/ident %)))
                                  (= :logseq.property/empty-placeholder (:db/ident %)))))]
     (is (= []
-           (remove ldb/built-in? idents))
+           (remove #(->> % :logseq.property/built-in? (db-property/ref->property-value-content @conn))
+                   idents))
         "All entities with :db/ident have built-in property (except for kv idents)")))
 
 (deftest new-graph-creates-class

+ 3 - 2
src/main/frontend/components/page_menu.cljs

@@ -18,7 +18,8 @@
             [frontend.handler.user :as user-handler]
             [frontend.handler.file-sync :as file-sync-handler]
             [logseq.common.path :as path]
-            [frontend.handler.property.util :as pu]))
+            [frontend.handler.property.util :as pu]
+            [logseq.db.frontend.property :as db-property]))
 
 (defn- delete-page!
   [page]
@@ -100,7 +101,7 @@
           (when-not (or contents?
                         config/publishing?
                         (and db-based?
-                             (:logseq.property/built-in? page)))
+                             (db-property/property-value-content (:logseq.property/built-in? page))))
             {:title   (t :page/delete)
              :options {:on-click #(delete-page-confirm! page)}})
 

+ 2 - 1
src/main/frontend/components/property.cljs

@@ -809,7 +809,8 @@
                          (or
                           ;; built-in
                           (and (not (get-in ent [:block/schema :public?]))
-                               (ldb/built-in? ent))
+                               ;; TODO: Use ldb/built-in? when intermittent lazy loading issue fixed
+                               (get db-property/built-in-properties (:db/ident ent)))
                           ;; other position
                           (when-not (or (and (:sidebar? opts) (= (:id opts) (str (:block/uuid block))))
                                         (ldb/page? block))

+ 3 - 2
src/main/frontend/worker/search.cljs

@@ -10,7 +10,8 @@
             [frontend.worker.util :as worker-util]
             [logseq.db.sqlite.util :as sqlite-util]
             [logseq.common.util :as common-util]
-            [logseq.db :as ldb]))
+            [logseq.db :as ldb]
+            [logseq.db.frontend.property :as db-property]))
 
 ;; TODO: use sqlite for fuzzy search
 (defonce indices (atom nil))
@@ -263,7 +264,7 @@
   (when p
     {:id (str (:block/uuid p))
      :name (:block/name p)
-     :built-in? (boolean (:logseq.property/built-in? p))
+     :built-in? (boolean (db-property/property-value-content (:logseq.property/built-in? p)))
      :original-name (:block/original-name p)}))
 
 (defn- hidden-page?