| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- (ns frontend.components.reference
- (:require [frontend.common.missionary :as c.m]
- [frontend.components.reference-filters :as filters]
- [frontend.components.views :as views]
- [frontend.config :as config]
- [frontend.db :as db]
- [frontend.db-mixins :as db-mixins]
- [frontend.state :as state]
- [frontend.ui :as ui]
- [logseq.db.common.view :as db-view]
- [logseq.shui.hooks :as hooks]
- [logseq.shui.ui :as shui]
- [missionary.core :as m]
- [rum.core :as rum]))
- (rum/defc references-aux
- [page-entity config]
- (let [filters (db-view/get-filters (db/get-db) page-entity)
- reference-filter (fn [{:keys [ref-pages-count]}]
- (shui/button
- {:title "Page filter"
- :variant "ghost"
- :class "text-muted-foreground !px-1"
- :size :sm
- :on-click (fn [e]
- (shui/popup-show! (.-target e)
- (fn []
- [:div.p-4
- (filters/filter-dialog page-entity ref-pages-count)])
- {:align "end"}))}
- (ui/icon "filter-cog"
- {:class (cond
- (and (empty? (:included filters)) (empty? (:excluded filters)))
- ""
- (and (seq (:included filters)) (empty? (:excluded filters)))
- "text-success"
- (and (empty? (:included filters)) (seq (:excluded filters)))
- "text-error"
- :else
- "text-warning")})))]
- (views/view
- {:view-parent page-entity
- :view-feature-type :linked-references
- :show-items-count? true
- :additional-actions [reference-filter]
- :columns (views/build-columns config [] {})
- :config config})))
- (rum/defc references-cp < rum/reactive db-mixins/query
- [entity config]
- (let [block (db/sub-block (:db/id entity))]
- (references-aux block config)))
- (rum/defc references
- [entity config]
- (when-let [id (:db/id entity)]
- (let [[has-references? set-has-references!] (hooks/use-state nil)]
- (hooks/use-effect!
- #(c.m/run-task*
- (m/sp
- (let [result (c.m/<? (state/<invoke-db-worker :thread-api/block-refs-check
- (state/get-current-repo) id {}))]
- (set-has-references! result))))
- [])
- (when has-references?
- (ui/catch-error
- (ui/component-error (if (config/db-based-graph? (state/get-current-repo))
- "Linked References: Unexpected error."
- "Linked References: Unexpected error. Please re-index your graph first."))
- (references-cp entity config))))))
- (rum/defc unlinked-references
- [entity config]
- (when-let [id (:db/id entity)]
- (let [[has-references? set-has-references!] (hooks/use-state nil)]
- (hooks/use-effect!
- #(c.m/run-task*
- (m/sp
- (let [result (c.m/<? (state/<invoke-db-worker :thread-api/block-refs-check
- (state/get-current-repo) id {:unlinked? true}))]
- (set-has-references! result))))
- [])
- (when has-references?
- (views/view
- {:view-parent entity
- :view-feature-type :unlinked-references
- :columns (views/build-columns config [] {})
- :foldable-options {:default-collapsed? true}
- :config config})))))
|