Bläddra i källkod

fix: children instances are also counted as parent's instances

Tienson Qin 2 år sedan
förälder
incheckning
8be1a57deb

+ 10 - 2
src/main/frontend/components/property.cljs

@@ -48,8 +48,16 @@
         options (map (fn [[name id]] {:label name
                                       :value id
                                       :selected (= class id)})
-                     classes)]
-    (ui/select options
+                     classes)
+        options' (if class
+                   options
+                   (cons
+                    {:label "Choose a class"
+                     :disabled true
+                     :selected true
+                     :value ""}
+                    options))]
+    (ui/select options'
                (fn [_e value]
                  (swap! *property-schema assoc :class (str value))))))
 

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

@@ -86,9 +86,9 @@
   [block property {:keys [class] :as opts}]
   (let [repo (state/get-current-repo)
         pages (if class
-                (some->> (:block/name (db/entity [:block/uuid (uuid class)]))
-                         (db/get-tag-pages repo)
-                         (map first))
+                (some->> (:db/id (db/entity [:block/uuid (uuid class)]))
+                         (model/get-class-objects repo)
+                         (map #(:block/original-name (db/entity %))))
                 (model/get-all-page-original-names repo))
         options (map (fn [p] {:value p}) pages)]
     (select/select {:items options

+ 18 - 1
src/main/frontend/db/model.cljs

@@ -72,7 +72,7 @@
            [?page :block/original-name ?original-name]
            [?page :block/name ?name]]
          (conn/get-db repo)
-         (util/page-name-sanity-lc tag-name))))
+      (util/page-name-sanity-lc tag-name))))
 
 (defn get-all-tagged-pages
   [repo]
@@ -1527,6 +1527,23 @@ independent of format as format specific heading characters are stripped"
    db-utils/seq-flatten
    (set)))
 
+(defn get-class-objects
+  [repo class-id]
+  (when-let [class (db-utils/entity repo class-id)]
+    (if (first (:block/_namespace class))        ; has children classes
+      (d/q
+       '[:find [?object ...]
+         :in $ % ?parent
+         :where
+         (namespace ?parent ?c)
+         (or
+          [?object :block/tags ?parent]
+          [?object :block/tags ?c])]
+       (conn/get-db repo)
+       (:namespace rules/rules)
+       class-id)
+      (map :db/id (:block/_tags class)))))
+
 (comment
   ;; For debugging
   (defn get-all-blocks