journal.cljs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. (ns frontend.components.journal
  2. (:require [frontend.components.page :as page]
  3. [frontend.components.views :as views]
  4. [frontend.db-mixins :as db-mixins]
  5. [frontend.db.react :as react]
  6. [frontend.state :as state]
  7. [frontend.ui :as ui]
  8. [frontend.util :as util]
  9. [promesa.core :as p]
  10. [rum.core :as rum]))
  11. (rum/defc journal-cp < rum/static
  12. [id last?]
  13. [:div.journal-item.content
  14. (when last?
  15. {:class "journal-last-item"})
  16. (page/page-cp {:db/id id
  17. :journals? true})])
  18. (defn- sub-journals
  19. []
  20. (when-let [repo (state/get-current-repo)]
  21. (some-> (react/q repo
  22. [:frontend.worker.react/journals]
  23. {:query-fn (fn [_]
  24. (p/let [{:keys [data]} (views/<load-view-data nil {:journals? true})]
  25. (remove nil? data)))}
  26. nil)
  27. util/react)))
  28. (rum/defc all-journals < rum/reactive db-mixins/query
  29. []
  30. (let [data (sub-journals)]
  31. (when (seq data)
  32. [:div#journals
  33. (ui/virtualized-list
  34. {:custom-scroll-parent (util/app-scroll-container-node)
  35. :increase-viewport-by {:top 300 :bottom 300}
  36. :compute-item-key (fn [idx]
  37. (let [id (util/nth-safe data idx)]
  38. (str "journal-" id)))
  39. :total-count (count data)
  40. :item-content (fn [idx]
  41. (let [id (util/nth-safe data idx)
  42. last? (= (inc idx) (count data))]
  43. (journal-cp id last?)))})])))