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

fix(apis): simplify block property retrieval and enhance default value handling

charlie 4 дней назад
Родитель
Сommit
10106c1b8a
1 измененных файлов с 34 добавлено и 31 удалено
  1. 34 31
      src/main/logseq/api/editor.cljs

+ 34 - 31
src/main/logseq/api/editor.cljs

@@ -442,29 +442,6 @@
                      key (api-block/get-db-ident-from-property-name key this)]
                  (property-handler/remove-block-property! block-uuid key))))))
 
-(defn get_block_property
-  [id key]
-  (this-as this
-           (p/let [block (<get-block id {:children? false})]
-             (when-let [properties (some-> block (:block/uuid) (db-model/get-block-by-uuid) (:block/properties))]
-               (when (seq properties)
-                 (let [property-name (api-block/sanitize-user-property-name key)
-                       ident (api-block/get-db-ident-from-property-name property-name this)
-                       property-value (or (get properties property-name)
-                                          (get properties (keyword property-name))
-                                          (get properties ident))
-                       property-value (if-let [property-id (:db/id property-value)]
-                                        (db/pull property-id) property-value)
-                       property-value (cond-> property-value
-                                        (map? property-value)
-                                        (assoc
-                                         :value (or (:logseq.property/value property-value)
-                                                    (:block/title property-value))
-                                         :ident ident))
-                       parsed-value (api-block/parse-property-json-value-if-need ident property-value)]
-                   (or parsed-value
-                       (bean/->js (sdk-utils/normalize-keyword-for-json property-value)))))))))
-
 (defn- get-block-classes-properties-has-default-value
   [block-id]
   (when-let [classes-properties
@@ -478,17 +455,43 @@
           properties (into {} properties)]
       properties)))
 
+(defn- get-all-block-properties
+  [id]
+  (p/let [block (<get-block id {:children? false})]
+    (when-let [own-properties (:block/properties block)]
+      (let [classes-properties (get-block-classes-properties-has-default-value (:db/id block))
+            properties (if (seq classes-properties)
+                         (merge classes-properties own-properties)
+                         own-properties)]
+        properties))))
+
+(defn get_block_property
+  [id key]
+  (this-as this
+    (p/let [properties (get-all-block-properties id)]
+      (when (seq properties)
+        (let [property-name (api-block/sanitize-user-property-name key)
+              ident (api-block/get-db-ident-from-property-name property-name this)
+              property-value (or (get properties property-name)
+                                 (get properties (keyword property-name))
+                                 (get properties ident))
+              property-value (if-let [property-id (:db/id property-value)]
+                               (db/pull property-id) property-value)
+              property-value (cond-> property-value
+                                     (map? property-value)
+                                     (assoc
+                                       :value (or (:logseq.property/value property-value)
+                                                  (:block/title property-value))
+                                       :ident ident))
+              parsed-value (api-block/parse-property-json-value-if-need ident property-value)]
+          (or parsed-value
+              (sdk-utils/result->js property-value)))))))
 
 (def get_block_properties
   (fn [id]
-    (p/let [block (<get-block id {:children? false})]
-      (when-let [own-properties (:block/properties block)]
-        (let [classes-properties (get-block-classes-properties-has-default-value (:db/id block))
-              properties (if (seq classes-properties)
-                           (merge classes-properties own-properties)
-                           own-properties)
-              properties (api-block/into-readable-db-properties properties)]
-          (sdk-utils/result->js properties))))))
+    (p/let [properties (get-all-block-properties id)]
+      (when-let [properties (some-> properties (api-block/into-readable-db-properties))]
+        (sdk-utils/result->js properties)))))
 
 (defn get_page_properties
   [id-or-page-name]