all_pages.cljs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. (ns frontend.components.all-pages
  2. "All pages"
  3. (:require [frontend.components.block :as component-block]
  4. [frontend.components.page :as component-page]
  5. [frontend.components.views :as views]
  6. [frontend.config :as config]
  7. [frontend.context.i18n :refer [t]]
  8. [frontend.db :as db]
  9. [frontend.handler.page :as page-handler]
  10. [frontend.hooks :as hooks]
  11. [frontend.state :as state]
  12. [logseq.common.config :as common-config]
  13. [logseq.db :as ldb]
  14. [logseq.shui.ui :as shui]
  15. [promesa.core :as p]
  16. [rum.core :as rum]))
  17. (defn- columns
  18. []
  19. (->> [{:id :block/title
  20. :name (t :block/name)
  21. :cell (fn [_table row _column]
  22. (component-block/page-cp {} row))
  23. :type :string}
  24. (when (not (config/db-based-graph? (state/get-current-repo)))
  25. {:id :block/type
  26. :name "Page type"
  27. :cell (fn [_table row _column]
  28. (let [type (get row :block/type)]
  29. [:div.capitalize type]))
  30. :get-value (fn [row] (get row :block/type))
  31. :type :string})
  32. {:id :block.temp/refs-count
  33. :name (t :page/backlinks)
  34. :cell (fn [_table row _column] (:block.temp/refs-count row))
  35. :type :number}]
  36. (remove nil?)
  37. vec))
  38. (defn- get-all-pages
  39. []
  40. (->> (page-handler/get-all-pages (state/get-current-repo))
  41. (map (fn [p] (assoc p :id (:db/id p))))))
  42. (rum/defc all-pages < rum/static
  43. []
  44. (let [[data set-data!] (rum/use-state nil)
  45. columns' (views/build-columns {} (columns)
  46. {:with-object-name? false
  47. :with-id? false})]
  48. (hooks/use-effect!
  49. (fn []
  50. (when-let [^js worker @state/*db-worker]
  51. (p/let [result-str (.get-page-refs-count worker (state/get-current-repo))
  52. result (ldb/read-transit-str result-str)
  53. data (get-all-pages)
  54. data (map (fn [row] (assoc row :block.temp/refs-count (get result (:db/id row) 0))) data)]
  55. (set-data! data))))
  56. [])
  57. [:div.ls-all-pages.w-full.mx-auto
  58. (views/view {:data data
  59. :set-data! set-data!
  60. :view-parent (db/get-page common-config/views-page-name)
  61. :view-feature-type :all-pages
  62. :show-items-count? true
  63. :columns columns'
  64. :title-key :all-pages/table-title
  65. :on-delete-rows (fn [table selected-rows]
  66. (shui/dialog-open!
  67. (component-page/batch-delete-dialog
  68. selected-rows false
  69. (fn []
  70. (when-let [f (get-in table [:data-fns :set-row-selection!])]
  71. (f {}))
  72. (set-data! (get-all-pages))))))})]))