class.cljs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536
  1. (ns frontend.components.class
  2. (:require [frontend.components.block :as block]
  3. [frontend.db.model :as model]
  4. [frontend.state :as state]
  5. [frontend.ui :as ui]
  6. [rum.core :as rum]))
  7. (defn class-children-aux
  8. [class {:keys [default-collapsed?] :as opts}]
  9. (let [children (->> (:logseq.property/_parent class)
  10. ;; Disallow parent cycles
  11. (remove #(= (:db/id class) (:db/id %))))]
  12. (when (seq children)
  13. [:ul
  14. (for [child (sort-by :block/title children)]
  15. (let [title [:li.ml-2 (block/page-reference false (:block/title child) {:show-brackets? false} nil)]]
  16. (if (seq (:logseq.property/_parent child))
  17. (ui/foldable
  18. title
  19. (class-children-aux child opts)
  20. {:default-collapsed? default-collapsed?})
  21. title)))])))
  22. (rum/defc class-children
  23. [class]
  24. (when (seq (:logseq.property/_parent class))
  25. (let [children-pages (set (model/get-structured-children (state/get-current-repo) (:db/id class)))
  26. ;; Expand children if there are about a pageful of total blocks to display
  27. default-collapsed? (> (count children-pages) 30)]
  28. [:div.mt-4
  29. (ui/foldable
  30. [:div.font-medium.opacity-50
  31. (str "Children (" (count children-pages) ")")]
  32. [:div.ml-1.mt-2 (class-children-aux class {:default-collapsed? default-collapsed?})]
  33. {:default-collapsed? false
  34. :title-trigger? true})])))