reference.cljs 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. (ns frontend.components.reference
  2. (:require [frontend.common.missionary :as c.m]
  3. [frontend.components.reference-filters :as filters]
  4. [frontend.components.views :as views]
  5. [frontend.config :as config]
  6. [frontend.db :as db]
  7. [frontend.db-mixins :as db-mixins]
  8. [frontend.state :as state]
  9. [frontend.ui :as ui]
  10. [logseq.db.common.view :as db-view]
  11. [logseq.shui.hooks :as hooks]
  12. [logseq.shui.ui :as shui]
  13. [missionary.core :as m]
  14. [rum.core :as rum]))
  15. (rum/defc references-aux
  16. [page-entity config]
  17. (let [filters (db-view/get-filters (db/get-db) page-entity)
  18. reference-filter (fn [{:keys [ref-pages-count]}]
  19. (shui/button
  20. {:title "Page filter"
  21. :variant "ghost"
  22. :class "text-muted-foreground !px-1"
  23. :size :sm
  24. :on-click (fn [e]
  25. (shui/popup-show! (.-target e)
  26. (fn []
  27. [:div.p-4
  28. (filters/filter-dialog page-entity ref-pages-count)])
  29. {:align "end"}))}
  30. (ui/icon "filter-cog"
  31. {:class (cond
  32. (and (empty? (:included filters)) (empty? (:excluded filters)))
  33. ""
  34. (and (seq (:included filters)) (empty? (:excluded filters)))
  35. "text-success"
  36. (and (empty? (:included filters)) (seq (:excluded filters)))
  37. "text-error"
  38. :else
  39. "text-warning")})))]
  40. (views/view
  41. {:view-parent page-entity
  42. :view-feature-type :linked-references
  43. :show-items-count? true
  44. :additional-actions [reference-filter]
  45. :columns (views/build-columns config [] {})
  46. :config config})))
  47. (rum/defc references-cp < rum/reactive db-mixins/query
  48. [entity config]
  49. (let [block (db/sub-block (:db/id entity))]
  50. (references-aux block config)))
  51. (rum/defc references
  52. [entity config]
  53. (when-let [id (:db/id entity)]
  54. (let [[has-references? set-has-references!] (hooks/use-state nil)]
  55. (hooks/use-effect!
  56. #(c.m/run-task*
  57. (m/sp
  58. (let [result (c.m/<? (state/<invoke-db-worker :thread-api/block-refs-check
  59. (state/get-current-repo) id {}))]
  60. (set-has-references! result))))
  61. [])
  62. (when has-references?
  63. (ui/catch-error
  64. (ui/component-error (if (config/db-based-graph? (state/get-current-repo))
  65. "Linked References: Unexpected error."
  66. "Linked References: Unexpected error. Please re-index your graph first."))
  67. (references-cp entity config))))))
  68. (rum/defc unlinked-references
  69. [entity config]
  70. (when-let [id (:db/id entity)]
  71. (let [[has-references? set-has-references!] (hooks/use-state nil)]
  72. (hooks/use-effect!
  73. #(c.m/run-task*
  74. (m/sp
  75. (let [result (c.m/<? (state/<invoke-db-worker :thread-api/block-refs-check
  76. (state/get-current-repo) id {:unlinked? true}))]
  77. (set-has-references! result))))
  78. [])
  79. (when has-references?
  80. (views/view
  81. {:view-parent entity
  82. :view-feature-type :unlinked-references
  83. :columns (views/build-columns config [] {})
  84. :foldable-options {:default-collapsed? true}
  85. :config config})))))