Browse Source

fix: deleting last extends value doesn't revert to Root

Fixes https://github.com/logseq/db-test/issues/387
Gabriel Horner 5 tháng trước cách đây
mục cha
commit
09e60ae296

+ 1 - 1
deps/db/src/logseq/db/test/helper.cljs

@@ -63,7 +63,7 @@
        (mapv (fn [[k v]]
                [k
                 (cond
-                  (= :block/tags k)
+                  (#{:block/tags :logseq.property.class/extends} k)
                   (mapv :db/ident v)
                   (and (set? v) (every? de/entity? v))
                   (set (map db-property/property-value-content v))

+ 3 - 1
deps/outliner/src/logseq/outliner/property.cljs

@@ -411,7 +411,9 @@
   (let [eid (->eid eid)
         block (d/entity @conn eid)
         property (d/entity @conn property-id)]
-    (validate-batch-deletion-of-property [block] property-id)
+    ;; Can skip for extends b/c below tx ensures it has a default value
+    (when-not (= :logseq.property.class/extends property-id)
+      (validate-batch-deletion-of-property [block] property-id))
     (when block
       (cond
         (= :logseq.property/empty-placeholder (:db/ident (get block property-id)))

+ 17 - 0
deps/outliner/test/logseq/outliner/property_test.cljs

@@ -351,3 +351,20 @@
            #"Extends cycle"
            (outliner-property/set-block-property! conn (:db/id class3) :logseq.property.class/extends (:db/id class1)))
           "Extends cycle"))))
+
+(deftest delete-property-value!
+  (let [conn (db-test/create-conn-with-blocks
+              {:classes {:C1 {}
+                         :C2 {}
+                         :C3 {:build/class-extends [:C1 :C2]}}})]
+    (outliner-property/delete-property-value! conn :user.class/C3 :logseq.property.class/extends
+                                              (:db/id (d/entity @conn :user.class/C2)))
+    (is (= [:user.class/C1]
+           (:logseq.property.class/extends (db-test/readable-properties (d/entity @conn :user.class/C3))))
+        "Specific property value is deleted")
+
+    (outliner-property/delete-property-value! conn :user.class/C3 :logseq.property.class/extends
+                                              (:db/id (d/entity @conn :user.class/C1)))
+    (is (= [:logseq.class/Root]
+           (:logseq.property.class/extends (db-test/readable-properties (d/entity @conn :user.class/C3))))
+        "Extends property is restored back to Root")))