فهرست منبع

enhance: remove parent extends when setting a child class for extends

Tienson Qin 7 ماه پیش
والد
کامیت
84b83397cc
2فایلهای تغییر یافته به همراه12 افزوده شده و 4 حذف شده
  1. 3 1
      deps/outliner/src/logseq/outliner/property.cljs
  2. 9 3
      src/main/frontend/components/property/value.cljs

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

@@ -77,7 +77,9 @@
         retract-multiple-values?
         (conj [:db/retract (:db/id update-block-tx) property-id])
         extends?
-        (conj [:db/retract (:db/id update-block-tx) property-id :logseq.class/Root])
+        (concat
+         (let [extends (ldb/get-class-extends (d/entity @conn value))]
+           (map (fn [extend] [:db/retract (:db/id block) property-id (:db/id extend)]) extends)))
         true
         (conj update-block-tx)))))
 

+ 9 - 3
src/main/frontend/components/property/value.cljs

@@ -679,13 +679,19 @@
         property-type (:logseq.property/type property)
         nodes (cond
                 extends-property?
-                (let [;; Disallows cyclic hierarchies
+                (let [extends (->> (mapcat (fn [e] (ldb/get-class-extends e)) (:logseq.property.class/extends block))
+                                   distinct)
+                      ;; Disallows cyclic hierarchies
                       exclude-ids (-> (set (map (fn [id] (:block/uuid (db/entity id))) children-pages))
-                                      (conj (:block/uuid block))) ; break cycle
+                                      (conj (:block/uuid block)) ; break cycle
+                                      ;; hide parent extends for existing values
+                                      (set/union (set (map :block/uuid extends))))
                       options (if (ldb/class? block)
                                 (model/get-all-classes repo)
                                 result)
-                      excluded-options (remove (fn [e] (contains? exclude-ids (:block/uuid e))) options)]
+
+                      excluded-options (->> options
+                                            (remove (fn [e] (contains? exclude-ids (:block/uuid e)))))]
                   excluded-options)
 
                 (contains? #{:class :property} property-type)