浏览代码

fix: number closed value not saved as its original value

A :number closed value saved as a string is problematic for a couple
reasons:
* Not storing a number by the user's intended value means a loss of any
  numeric functionality the property provides. Basic things like sorting
  by the numeric property don't work. This has caused us problems in the
  past and we invented hacky workarounds like logseq.query/nlp-date to
  compensate for this
* Creates inconsistency in how numbers are saved as non-closed values
  are not saved as string. This affects not only the validation layer
  but also creates bugs when querying for these property values as the
  querying interface is inconsistent
Gabriel Horner 1 年之前
父节点
当前提交
949d676f02

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

@@ -350,11 +350,12 @@
     [[:block/type [:= #{"closed value"}]]
      ;; for built-in properties
      [:db/ident {:optional true} logseq-property-ident]
+     [:block/content [:or :string :int]]
      [:block/closed-value-property {:optional true} [:set :int]]
      [:block/schema {:optional true}
       [:map
        [:description {:optional true} :string]]]]
-    block-attrs
+    (remove #(#{:block/content} (first %)) block-attrs)
     page-or-block-attrs)))
 
 (def normal-block

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

@@ -264,7 +264,7 @@
   [db db-ident value-name]
   (let [values (get-closed-property-values db db-ident)]
     (some (fn [e]
-            (when (= (closed-value-name e) (str value-name))
+            (when (= (closed-value-name e) value-name)
               e)) values)))
 
 ;; TODO: db ident should obey clojure's rules for keywords

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

@@ -12,7 +12,7 @@
    :block/format :markdown
    :block/uuid block-id
    :block/page page-id
-   :block/content (str value)
+   :block/content value
    :block/closed-value-property (:db/ident property)
    :block/parent page-id})
 

+ 4 - 4
src/test/frontend/handler/db_based/property_closed_value_test.cljs

@@ -49,14 +49,14 @@
        (testing "Add existing values to closed values"
          (let [values (get-value-ids k)]
            (is (every? uuid? values))
-           (is (= #{"1" "2"} (get-closed-values values)))
+           (is (= #{1 2} (get-closed-values values)))
            (is (every? #(contains? (:block/type (db/entity [:block/uuid %])) "closed value")
                        values))))
        (testing "Add non-numbers shouldn't work"
          (p/let [result (db-property-handler/<upsert-closed-value property {:value "not a number"})]
            (is (= result :value-invalid))
            (let [values (get-value-ids k)]
-             (is (= #{"1" "2"} (get-closed-values values))))))
+             (is (= #{1 2} (get-closed-values values))))))
 
        (testing "Add existing value"
          (p/let [result (db-property-handler/<upsert-closed-value property {:value 2})]
@@ -66,10 +66,10 @@
          (p/let [{:keys [block-id tx-data]} (db-property-handler/<upsert-closed-value property {:value 3})]
            (db/transact! tx-data)
            (let [b (db/entity [:block/uuid block-id])]
-             (is (= "3" (:block/content b)))
+             (is (= 3 (:block/content b)))
              (is (contains? (:block/type b) "closed value"))
              (let [values (get-value-ids k)]
-               (is (= #{"1" "2" "3"} (get-closed-values values))))
+               (is (= #{1 2 3} (get-closed-values values))))
 
              (testing "Update closed value"
                (p/let [{:keys [tx-data]} (db-property-handler/<upsert-closed-value property {:id block-id