Browse Source

fix: regression on displaying children more than 1 level deep

Was only showing children 1 level deep regardless of how many
levels of children there were. Children count was also incorrect as
result
Gabriel Horner 1 year ago
parent
commit
f927f26018
1 changed files with 15 additions and 14 deletions
  1. 15 14
      src/main/frontend/components/class.cljs

+ 15 - 14
src/main/frontend/components/class.cljs

@@ -6,19 +6,20 @@
             [rum.core :as rum]))
 
 (defn class-children-aux
-  [class children-pages {:keys [default-collapsed?] :as opts}]
-  (when-not (contains? children-pages (:db/id class))
-    (let [children (:logseq.property/_parent class)]
-     (when (seq children)
-       [:ul
-        (for [child (sort-by :block/title children)]
-          (let [title [:li.ml-2 (block/page-reference false (:block/title child) {:show-brackets? false} nil)]]
-            (if (seq (:logseq.property/_parent child))
-              (ui/foldable
-               title
-               (class-children-aux child children-pages opts)
-               {:default-collapsed? default-collapsed?})
-              title)))]))))
+  [class {:keys [default-collapsed?] :as opts}]
+  (let [children (->> (:logseq.property/_parent class)
+                      ;; Disallow parent cycles
+                      (remove #(= (:db/id class) (:db/id %))))]
+    (when (seq children)
+      [:ul
+       (for [child (sort-by :block/title children)]
+         (let [title [:li.ml-2 (block/page-reference false (:block/title child) {:show-brackets? false} nil)]]
+           (if (seq (:logseq.property/_parent child))
+             (ui/foldable
+              title
+              (class-children-aux child opts)
+              {:default-collapsed? default-collapsed?})
+             title)))])))
 
 (rum/defc class-children
   [class]
@@ -29,6 +30,6 @@
       [:div.mt-4
        (ui/foldable
         [:h2.font-medium "Children (" (count children-pages) ")"]
-        [:div.mt-2.ml-1 (class-children-aux class children-pages {:default-collapsed? default-collapsed?})]
+        [:div.mt-2.ml-1 (class-children-aux class {:default-collapsed? default-collapsed?})]
         {:default-collapsed? false
          :title-trigger? true})])))