journal.cljs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. (ns frontend.components.journal
  2. (:require [clojure.string :as string]
  3. [frontend.components.page :as page]
  4. [frontend.components.reference :as reference]
  5. [frontend.date :as date]
  6. [frontend.db :as db]
  7. [frontend.db-mixins :as db-mixins]
  8. [frontend.db.model :as model]
  9. [frontend.handler.page :as page-handler]
  10. [frontend.state :as state]
  11. [logseq.graph-parser.text :as text]
  12. [logseq.graph-parser.util :as gp-util]
  13. [frontend.ui :as ui]
  14. [frontend.util :as util]
  15. [goog.object :as gobj]
  16. [reitit.frontend.easy :as rfe]
  17. [rum.core :as rum]))
  18. (rum/defc blocks-cp < rum/reactive db-mixins/query
  19. {}
  20. [repo page _format]
  21. (when-let [page-e (db/pull [:block/name (util/page-name-sanity-lc page)])]
  22. (page/page-blocks-cp repo page-e {})))
  23. (rum/defc journal-cp-inner < rum/reactive
  24. [[title format]]
  25. (let [;; Don't edit the journal title
  26. page (string/lower-case title)
  27. repo (state/sub :git/current-repo)
  28. today? (= (string/lower-case title)
  29. (string/lower-case (date/journal-name)))
  30. page-entity (db/pull [:block/name (util/page-name-sanity-lc title)])
  31. data-page-tags (when (seq (:block/tags page-entity))
  32. (let [page-names (model/get-page-names-by-ids (map :db/id (:block/tags page)))]
  33. (text/build-data-value page-names)))]
  34. [:div.flex-1.journal.page (cond-> {}
  35. data-page-tags
  36. (assoc :data-page-tags data-page-tags))
  37. (ui/foldable
  38. [:a.initial-color.title.journal-title
  39. {:href (rfe/href :page {:name page})
  40. :on-mouse-down (fn [e]
  41. (when (util/right-click? e)
  42. (state/set-state! :page-title/context {:page page})))
  43. :on-click (fn [e]
  44. (when (gobj/get e "shiftKey")
  45. (when-let [page page-entity]
  46. (state/sidebar-add-block!
  47. (state/get-current-repo)
  48. (:db/id page)
  49. :page))
  50. (.preventDefault e)))}
  51. [:h1.title
  52. (gp-util/capitalize-all title)]]
  53. (blocks-cp repo page format)
  54. {})
  55. (page/today-queries repo today? false)
  56. (rum/with-key
  57. (reference/references title)
  58. (str title "-refs"))]))
  59. (rum/defc journal-cp
  60. [journal]
  61. (ui/lazy-visible (fn [] (journal-cp-inner journal)) nil true))
  62. (rum/defc journals < rum/reactive
  63. [latest-journals]
  64. [:div#journals
  65. (ui/infinite-list
  66. "main-content-container"
  67. (for [{:block/keys [name format]} latest-journals]
  68. [:div.journal-item.content {:key name}
  69. (journal-cp [name format])])
  70. {:has-more (page-handler/has-more-journals?)
  71. :more-class "text-4xl"
  72. :on-top-reached page-handler/create-today-journal!
  73. :on-load (fn []
  74. (page-handler/load-more-journals!))})])
  75. (rum/defc all-journals < rum/reactive db-mixins/query
  76. []
  77. (let [journals-length (state/sub :journals-length)
  78. latest-journals (db/get-latest-journals (state/get-current-repo) journals-length)]
  79. (journals latest-journals)))