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

fix: use :entity type instead of :uuid for ref type values

Tienson Qin 1 год назад
Родитель
Сommit
035fbb46c9

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

@@ -28,7 +28,7 @@
                        (let [[property-type schema-fn] e
                        (let [[property-type schema-fn] e
                              schema-fn' (if (db-property-type/property-types-with-db property-type) (partial schema-fn db) schema-fn)
                              schema-fn' (if (db-property-type/property-types-with-db property-type) (partial schema-fn db) schema-fn)
                              validation-fn #(validate-property-value property-type schema-fn' %)]
                              validation-fn #(validate-property-value property-type schema-fn' %)]
-                         [property-type [:tuple :uuid [:fn validation-fn]]])
+                         [property-type [:tuple :entity [:fn validation-fn]]])
                        :else
                        :else
                        e)))
                        e)))
                  db-schema))
                  db-schema))

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

@@ -46,10 +46,10 @@
                                        :public? true}}
                                        :public? true}}
    ;; number (1-6) or boolean for auto heading
    ;; number (1-6) or boolean for auto heading
    :logseq.property/heading {:schema {:type :any :hide? true}}
    :logseq.property/heading {:schema {:type :any :hide? true}}
-   :logseq.property/created-from-block    {:schema {:type :uuid}}
-   :logseq.property/created-from-property {:schema {:type :uuid}}
-   :logseq.property/created-from-template {:schema {:type :uuid}}
-   :logseq.property/source-page-id        {:schema {:type :uuid}}
+   :logseq.property/created-from-block    {:schema {:type :entity}}
+   :logseq.property/created-from-property {:schema {:type :entity}}
+   :logseq.property/created-from-template {:schema {:type :entity}}
+   :logseq.property/source-page           {:schema {:type :entity}}
    :logseq.property/built-in?             {:schema {:type :checkbox}}
    :logseq.property/built-in?             {:schema {:type :checkbox}}
    :logseq.property/hide-properties?      {:schema {:type :checkbox}}
    :logseq.property/hide-properties?      {:schema {:type :checkbox}}
    :logseq.property/query-table {:schema {:type :checkbox}}
    :logseq.property/query-table {:schema {:type :checkbox}}

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

@@ -12,7 +12,7 @@
 
 
 (def internal-built-in-property-types
 (def internal-built-in-property-types
   "Valid property types only for use by internal built-in-properties"
   "Valid property types only for use by internal built-in-properties"
-  #{:keyword :map :coll :any :uuid})
+  #{:keyword :map :coll :any :uuid :entity})
 
 
 (def user-built-in-property-types
 (def user-built-in-property-types
   "Valid property types for users in order they appear in the UI"
   "Valid property types for users in order they appear in the UI"
@@ -60,14 +60,11 @@
   ;; TODO: Confirm that macro expanded value is url when it's easier to pass data into validations
   ;; TODO: Confirm that macro expanded value is url when it's easier to pass data into validations
   (macro-util/macro? s))
   (macro-util/macro? s))
 
 
-(defn- logseq-block?
+(defn- entity?
   [db id]
   [db id]
   (some? (d/entity db id)))
   (some? (d/entity db id)))
 
 
-;; FIXME: template instance check
-(defn- logseq-template?
-  [db id]
-  (some? (d/entity db id)))
+;; TODO: strict check on date/page/template
 
 
 (defn- existing-closed-value-valid?
 (defn- existing-closed-value-valid?
   "Validates that the given existing closed value is valid"
   "Validates that the given existing closed value is valid"
@@ -106,17 +103,20 @@
               (some-fn number? uuid?)]
               (some-fn number? uuid?)]
    :date     [:fn
    :date     [:fn
               {:error/message "should be a journal date"}
               {:error/message "should be a journal date"}
-              logseq-block?]
+              entity?]
    :checkbox boolean?
    :checkbox boolean?
    :url      [:fn
    :url      [:fn
               {:error/message "should be a URL"}
               {:error/message "should be a URL"}
               (some-fn url? uuid? macro-url?)]
               (some-fn url? uuid? macro-url?)]
    :page     [:fn
    :page     [:fn
               {:error/message "should be a page"}
               {:error/message "should be a page"}
-              logseq-block?]
+              entity?]
    :template [:fn
    :template [:fn
               {:error/message "should has #template"}
               {:error/message "should has #template"}
-              logseq-template?]
+              entity?]
+   :entity   [:fn
+              {:error/message "should be a db entity"}
+              entity?]
    ;; internal usage
    ;; internal usage
    :keyword  keyword?
    :keyword  keyword?
    :uuid     uuid?
    :uuid     uuid?
@@ -132,7 +132,7 @@
 
 
 (def property-types-with-db
 (def property-types-with-db
   "Property types whose validation fn requires a datascript db"
   "Property types whose validation fn requires a datascript db"
-  #{:date :page :template})
+  #{:date :page :template :entity})
 
 
 ;; Helper fns
 ;; Helper fns
 ;; ==========
 ;; ==========

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

@@ -64,7 +64,7 @@
                 (assoc :block/created-at updated-at))]
                 (assoc :block/created-at updated-at))]
     block))
     block))
 
 
-(def property-ref-types #{:page :block :date :object})
+(def property-ref-types #{:page :block :date :entity})
 
 
 (defn build-new-property
 (defn build-new-property
   "Build a standard new property so that it is is consistent across contexts"
   "Build a standard new property so that it is is consistent across contexts"

+ 1 - 1
src/main/frontend/components/block.cljs

@@ -3603,7 +3603,7 @@
 (defn hidden-page->source-page
 (defn hidden-page->source-page
   [page]
   [page]
   (or
   (or
-   (get page (pu/get-pid :logseq.property/source-page-id))
+   (get page (pu/get-pid :logseq.property/source-page))
    ;; FIXME: what if the source page has been deleted?
    ;; FIXME: what if the source page has been deleted?
    page))
    page))
 
 

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

@@ -650,6 +650,7 @@
         multiple-values? (= :many (:cardinality schema))
         multiple-values? (= :many (:cardinality schema))
         class (str (when-not row? "flex flex-1 ")
         class (str (when-not row? "flex flex-1 ")
                    (when multiple-values? "property-value-content"))
                    (when multiple-values? "property-value-content"))
+        type (:type schema)
         type (or (when (and (= type :default) (uuid? value)) :block)
         type (or (when (and (= type :default) (uuid? value)) :block)
                  type
                  type
                  :default)
                  :default)
@@ -673,7 +674,7 @@
                                                 (nil? (:block/_parent property-block))))
                                                 (nil? (:block/_parent property-block))))
                         value (if invalid-block? "" value)]
                         value (if invalid-block? "" value)]
                     (when (or (= type :default) invalid-block?)
                     (when (or (= type :default) invalid-block?)
-                      (set-editing! (assoc property :block/uuid (random-uuid)) editor-id dom-id value {:ref @*ref}))))}
+                      (set-editing! property editor-id dom-id value {:ref @*ref}))))}
      (if (string/blank? value)
      (if (string/blank? value)
        (if template?
        (if template?
          (let [id (first (:classes schema))
          (let [id (first (:classes schema))

+ 6 - 6
src/main/frontend/handler/db_based/property.cljs

@@ -451,14 +451,14 @@
 
 
 (defn property-create-new-block
 (defn property-create-new-block
   [block property value parse-block]
   [block property value parse-block]
-  (let [current-page-id (:block/uuid (or (:block/page block) block))
+  (let [current-page-id (:db/id (or (:block/page block) block))
         page-name (str "$$$" current-page-id)
         page-name (str "$$$" current-page-id)
         page-entity (db/get-page page-name)
         page-entity (db/get-page page-name)
         page (or page-entity
         page (or page-entity
                  (-> (block/page-name->map page-name true)
                  (-> (block/page-name->map page-name true)
                      (assoc :block/type #{"hidden"}
                      (assoc :block/type #{"hidden"}
                             :block/format :markdown
                             :block/format :markdown
-                            :logseq.property/source-page-id current-page-id)))
+                            :logseq.property/source-page current-page-id)))
         page-tx (when-not page-entity page)
         page-tx (when-not page-entity page)
         page-id [:block/uuid (:block/uuid page)]
         page-id [:block/uuid (:block/uuid page)]
         parent-id (db/new-block-id)
         parent-id (db/new-block-id)
@@ -469,8 +469,8 @@
                     :block/parent page-id
                     :block/parent page-id
                     :block/left (or (when page-entity (model/get-block-last-direct-child-id (db/get-db) (:db/id page-entity)))
                     :block/left (or (when page-entity (model/get-block-last-direct-child-id (db/get-db) (:db/id page-entity)))
                                     page-id)
                                     page-id)
-                    :logseq.property/created-from-block block
-                    :logseq.property/created-from-property property}
+                    :logseq.property/created-from-block (:db/id block)
+                    :logseq.property/created-from-property (:db/id property)}
                    sqlite-util/block-with-timestamps)
                    sqlite-util/block-with-timestamps)
         child-1-id (db/new-block-id)
         child-1-id (db/new-block-id)
         child-1 (-> {:block/uuid child-1-id
         child-1 (-> {:block/uuid child-1-id
@@ -503,14 +503,14 @@
 
 
 (defn property-create-new-block-from-template
 (defn property-create-new-block-from-template
   [block property template]
   [block property template]
-  (let [current-page-id (:block/uuid (or (:block/page block) block))
+  (let [current-page-id (:db/id (or (:block/page block) block))
         page-name (str "$$$" current-page-id)
         page-name (str "$$$" current-page-id)
         page-entity (db/get-page page-name)
         page-entity (db/get-page page-name)
         page (or page-entity
         page (or page-entity
                  (-> (block/page-name->map page-name true)
                  (-> (block/page-name->map page-name true)
                      (assoc :block/type #{"hidden"}
                      (assoc :block/type #{"hidden"}
                             :block/format :markdown
                             :block/format :markdown
-                            :logseq.property/source-page-id current-page-id)))
+                            :logseq.property/source-page current-page-id)))
         page-tx (when-not page-entity page)
         page-tx (when-not page-entity page)
         page-id [:block/uuid (:block/uuid page)]
         page-id [:block/uuid (:block/uuid page)]
         block-id (db/new-block-id)
         block-id (db/new-block-id)