|
|
@@ -13,7 +13,8 @@
|
|
|
[clojure.string :as string]
|
|
|
[frontend.config :as config]
|
|
|
[frontend.components.svg :as svg]
|
|
|
- [frontend.handler.page :as page-handler]))
|
|
|
+ [frontend.handler.page :as page-handler]
|
|
|
+ [frontend.filtering :as filtering]))
|
|
|
|
|
|
(rum/defc filter-dialog-inner < rum/reactive
|
|
|
[close-fn references page-name]
|
|
|
@@ -23,11 +24,10 @@
|
|
|
[:div.mx-auto.flex-shrink-0.flex.items-center.justify-center.h-12.w-12.rounded-full.bg-gray-200.text-gray-500.sm:mx-0.sm:h-10.sm:w-10
|
|
|
(svg/filter-icon)]
|
|
|
[:div.mt-3.text-center.sm:mt-0.sm:ml-4.sm:text-left
|
|
|
- [:h3#modal-headline.text-lg.leading-6.font-medium.text-gray-900
|
|
|
- "Filter"]
|
|
|
- [:span.text-xs "Click to include and shift-click to exclude. Click again to remove. "]]]
|
|
|
-
|
|
|
- [:div.mt-5.sm:mt-4.sm:flex.sm.gap-1
|
|
|
+ [:h3#modal-headline.text-lg.leading-6.font-medium.text-gray-900 "Filter"]
|
|
|
+ [:span.text-xs
|
|
|
+ "Click to include and shift-click to exclude. Click again to remove."]]]
|
|
|
+ [:div.mt-5.sm:mt-4.sm:flex.sm.gap-1.flex-wrap
|
|
|
(for [reference references]
|
|
|
(let [filtered (get (rum/react filter-state) reference)
|
|
|
color (condp = filtered
|
|
|
@@ -47,21 +47,6 @@
|
|
|
(fn [close-fn]
|
|
|
(filter-dialog-inner close-fn references page-name)))
|
|
|
|
|
|
-(defn get-block-references
|
|
|
- [ref-block]
|
|
|
- (map #(if (= (first %) "Tag")
|
|
|
- (second %)
|
|
|
- (second (:url (second %))))
|
|
|
- (filter
|
|
|
- #(and
|
|
|
- (some (partial = (first %)) ["Tag", "Link"])
|
|
|
- (or (= (first %) "Tag") (= (first (:url (second %))) "Search")))
|
|
|
- (:block/title (first (val ref-block))))))
|
|
|
-
|
|
|
-(defn matches-filter
|
|
|
- [references filter-state]
|
|
|
- (every? #(= (util/in? (first %) references) (second %)) filter-state))
|
|
|
-
|
|
|
(rum/defc references < rum/reactive
|
|
|
[page-name marker? priority?]
|
|
|
(when page-name
|
|
|
@@ -82,9 +67,9 @@
|
|
|
scheduled-or-deadlines (if journal?
|
|
|
(db/get-date-scheduled-or-deadlines (string/capitalize page-name))
|
|
|
nil)
|
|
|
- references (distinct (flatten (map get-block-references ref-blocks)))
|
|
|
+ references (distinct (flatten (map filtering/get-block-references (flatten (map val ref-blocks)))))
|
|
|
filter-state (rum/react (page-handler/get-filter page-name))
|
|
|
- filtered-blocks (filter #(matches-filter (get-block-references %) filter-state) ref-blocks)
|
|
|
+ filtered-ref-blocks (filter #(filtering/matches-filter (filtering/get-ref-block-references %) filter-state) ref-blocks)
|
|
|
n-ref (count ref-blocks)]
|
|
|
(when (or (> n-ref 0)
|
|
|
(seq scheduled-or-deadlines))
|
|
|
@@ -118,13 +103,14 @@
|
|
|
:else "text-yellow-200")}
|
|
|
(svg/filter-icon)]]]
|
|
|
[:div.references-blocks
|
|
|
- (let [ref-hiccup (block/->hiccup filtered-blocks
|
|
|
+ (let [ref-hiccup (block/->hiccup filtered-ref-blocks
|
|
|
{:id page-name
|
|
|
:start-level 2
|
|
|
:ref? true
|
|
|
:breadcrumb-show? true
|
|
|
:group-by-page? true
|
|
|
- :editor-box editor/box}
|
|
|
+ :editor-box editor/box
|
|
|
+ :filter-state filter-state}
|
|
|
{})]
|
|
|
(content/content page-name
|
|
|
{:hiccup ref-hiccup}))])]]))))
|