|
|
@@ -6,6 +6,7 @@
|
|
|
[frontend.components.svg :as svg]
|
|
|
[frontend.date :as date]
|
|
|
[frontend.db :as db]
|
|
|
+ [frontend.db.model :as model-db]
|
|
|
[frontend.db-mixins :as db-mixins]
|
|
|
[frontend.handler.block :as block-handler]
|
|
|
[frontend.handler.page :as page-handler]
|
|
|
@@ -67,6 +68,7 @@
|
|
|
page-blocks))
|
|
|
|
|
|
(rum/defcs references < rum/reactive db-mixins/query
|
|
|
+ (rum/local nil ::n-ref)
|
|
|
{:init (fn [state]
|
|
|
(let [page-name (first (:rum/args state))
|
|
|
filters (when page-name
|
|
|
@@ -74,78 +76,81 @@
|
|
|
(assoc state ::filters filters)))}
|
|
|
[state page-name marker? priority?]
|
|
|
(when page-name
|
|
|
- (let [filters-atom (get state ::filters)
|
|
|
+ (let [repo (state/get-current-repo)
|
|
|
+ threshold (state/get-linked-references-collapsed-threshold)
|
|
|
+ refed-blocks-ids (model-db/get-referenced-blocks-ids page-name)
|
|
|
+ *n-ref (::n-ref state)
|
|
|
+ n-ref (or (rum/react *n-ref) (count refed-blocks-ids))
|
|
|
+ default-collapsed? (>= (count refed-blocks-ids) threshold)
|
|
|
+ filters-atom (get state ::filters)
|
|
|
+ filter-state (rum/react filters-atom)
|
|
|
block? (util/uuid-string? page-name)
|
|
|
block-id (and block? (uuid page-name))
|
|
|
page-name (string/lower-case page-name)
|
|
|
journal? (date/valid-journal-title? (string/capitalize page-name))
|
|
|
- repo (state/get-current-repo)
|
|
|
- ref-blocks (cond
|
|
|
- block-id
|
|
|
- (db/get-block-referenced-blocks block-id)
|
|
|
- :else
|
|
|
- (db/get-page-referenced-blocks page-name))
|
|
|
- ref-pages (map (comp :block/original-name first) ref-blocks)
|
|
|
- references (db/get-page-linked-refs-refed-pages repo page-name)
|
|
|
- references (->> (concat ref-pages references)
|
|
|
- (remove nil?)
|
|
|
- (distinct))
|
|
|
- scheduled-or-deadlines (if (and journal?
|
|
|
- (not (true? (state/scheduled-deadlines-disabled?)))
|
|
|
- (= page-name (string/lower-case (date/journal-name))))
|
|
|
- (db/get-date-scheduled-or-deadlines (string/capitalize page-name))
|
|
|
- nil)
|
|
|
- threshold (state/get-linked-references-collapsed-threshold)]
|
|
|
- (let [filter-state (rum/react filters-atom)
|
|
|
- filters (when (seq filter-state)
|
|
|
- (->> (group-by second filter-state)
|
|
|
- (medley/map-vals #(map first %))))
|
|
|
- filtered-ref-blocks (->> (block-handler/filter-blocks repo ref-blocks filters true)
|
|
|
- blocks-with-ref-level)
|
|
|
- n-ref (apply +
|
|
|
- (for [[_ rfs] filtered-ref-blocks]
|
|
|
- (count rfs)))]
|
|
|
- (when (or (> n-ref 0)
|
|
|
- (seq scheduled-or-deadlines)
|
|
|
- (seq filter-state))
|
|
|
- [:div.references.mt-6.flex-1.flex-row
|
|
|
- [:div.content
|
|
|
- (when (seq scheduled-or-deadlines)
|
|
|
- (ui/foldable
|
|
|
- [:h2.font-bold.opacity-50 "SCHEDULED AND DEADLINE"]
|
|
|
- [:div.references-blocks.mb-6
|
|
|
- (let [ref-hiccup (block/->hiccup scheduled-or-deadlines
|
|
|
- {:id (str page-name "-agenda")
|
|
|
- :ref? true
|
|
|
- :group-by-page? true
|
|
|
- :editor-box editor/box}
|
|
|
- {})]
|
|
|
- (content/content page-name
|
|
|
- {:hiccup ref-hiccup}))]
|
|
|
- {}))
|
|
|
+ scheduled-or-deadlines (when (and journal?
|
|
|
+ (not (true? (state/scheduled-deadlines-disabled?)))
|
|
|
+ (= page-name (string/lower-case (date/journal-name))))
|
|
|
+ (db/get-date-scheduled-or-deadlines (string/capitalize page-name)))]
|
|
|
+ (when (or (seq refed-blocks-ids)
|
|
|
+ (seq scheduled-or-deadlines)
|
|
|
+ (seq filter-state))
|
|
|
+ [:div.references.mt-6.flex-1.flex-row
|
|
|
+ [:div.content
|
|
|
+ (when (seq scheduled-or-deadlines)
|
|
|
+ (ui/foldable
|
|
|
+ [:h2.font-bold.opacity-50 "SCHEDULED AND DEADLINE"]
|
|
|
+ [:div.references-blocks.mb-6
|
|
|
+ (let [ref-hiccup (block/->hiccup scheduled-or-deadlines
|
|
|
+ {:id (str page-name "-agenda")
|
|
|
+ :ref? true
|
|
|
+ :group-by-page? true
|
|
|
+ :editor-box editor/box}
|
|
|
+ {})]
|
|
|
+ (content/content page-name {:hiccup ref-hiccup}))]
|
|
|
+ {}))
|
|
|
|
|
|
- (when (or (> n-ref 0)
|
|
|
- (seq filter-state))
|
|
|
- (ui/foldable
|
|
|
- [:div.flex.flex-row.flex-1.justify-between.items-center
|
|
|
- [:h2.font-bold.opacity-50 (let []
|
|
|
- (str n-ref " Linked Reference"
|
|
|
- (when (> n-ref 1) "s")))]
|
|
|
- [:a.filter.fade-link
|
|
|
- {:title "Filter"
|
|
|
- :on-click #(state/set-modal! (filter-dialog filters-atom references page-name))}
|
|
|
- (ui/icon "filter" {:class (cond
|
|
|
- (empty? filter-state)
|
|
|
- ""
|
|
|
- (every? true? (vals filter-state))
|
|
|
- "text-green-400"
|
|
|
- (every? false? (vals filter-state))
|
|
|
- "text-red-400"
|
|
|
- :else
|
|
|
- "text-yellow-400")
|
|
|
- :style {:fontSize 24}})]]
|
|
|
+ (when (seq refed-blocks-ids)
|
|
|
+ (ui/foldable
|
|
|
+ [:div.flex.flex-row.flex-1.justify-between.items-center
|
|
|
+ [:h2.font-bold.opacity-50 (str n-ref " Linked Reference"
|
|
|
+ (when (> n-ref 1) "s"))]
|
|
|
+ [:a.filter.fade-link
|
|
|
+ {:title "Filter"
|
|
|
+ :on-click (fn []
|
|
|
+ (let [ref-blocks (if block-id
|
|
|
+ (db/get-block-referenced-blocks block-id)
|
|
|
+ (db/get-page-referenced-blocks page-name))
|
|
|
+ ref-pages (map (comp :block/original-name first) ref-blocks)
|
|
|
+ references (db/get-page-linked-refs-refed-pages repo page-name)
|
|
|
+ references (->> (concat ref-pages references)
|
|
|
+ (remove nil?)
|
|
|
+ (distinct))]
|
|
|
+ (state/set-modal! (filter-dialog filters-atom references page-name))))}
|
|
|
+ (ui/icon "filter" {:class (cond
|
|
|
+ (empty? filter-state)
|
|
|
+ ""
|
|
|
+ (every? true? (vals filter-state))
|
|
|
+ "text-green-400"
|
|
|
+ (every? false? (vals filter-state))
|
|
|
+ "text-red-400"
|
|
|
+ :else
|
|
|
+ "text-yellow-400")
|
|
|
+ :style {:fontSize 24}})]]
|
|
|
|
|
|
- (fn []
|
|
|
+ (fn []
|
|
|
+ (let [ref-blocks (if block-id
|
|
|
+ (db/get-block-referenced-blocks block-id)
|
|
|
+ (db/get-page-referenced-blocks page-name))
|
|
|
+ filters (when (seq filter-state)
|
|
|
+ (->> (group-by second filter-state)
|
|
|
+ (medley/map-vals #(map first %))))
|
|
|
+ filtered-ref-blocks (->> (block-handler/filter-blocks repo ref-blocks filters true)
|
|
|
+ blocks-with-ref-level)
|
|
|
+ n-ref (apply +
|
|
|
+ (for [[_ rfs] filtered-ref-blocks]
|
|
|
+ (count rfs)))]
|
|
|
+ (reset! *n-ref n-ref)
|
|
|
[:div.references-blocks
|
|
|
(let [ref-hiccup (block/->hiccup filtered-ref-blocks
|
|
|
{:id page-name
|
|
|
@@ -156,9 +161,9 @@
|
|
|
:filters filters}
|
|
|
{})]
|
|
|
(content/content page-name
|
|
|
- {:hiccup ref-hiccup}))])
|
|
|
+ {:hiccup ref-hiccup}))]))
|
|
|
|
|
|
- {:default-collapsed? (>= n-ref threshold)}))]])))))
|
|
|
+ {:default-collapsed? default-collapsed?}))]]))))
|
|
|
|
|
|
(rum/defcs unlinked-references-aux
|
|
|
< rum/reactive db-mixins/query
|