Skip to content

Commit

Permalink
enhance(perf): add :ref/linked-references-collapsed-threshold option
Browse files Browse the repository at this point in the history
Related to logseq#2792
  • Loading branch information
tiensonqin committed Sep 16, 2021
1 parent f59f59b commit d6a011f
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 82 deletions.
164 changes: 83 additions & 81 deletions src/main/frontend/components/reference.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -28,20 +28,20 @@
(when (seq references)
(let [filters (rum/react filters-atom)]
[:div.mt-5.sm:mt-4.sm:flex.sm.gap-1.flex-wrap
(for [reference references]
(let [lc-reference (string/lower-case reference)
filtered (get filters lc-reference)
color (condp = filtered
true "text-green-400"
false "text-red-400"
nil)]
[:button.border.rounded.px-1.mb-1.mr-1 {:key reference :class color :style {:border-color "currentColor"}
:on-click (fn [e]
(swap! filters-atom #(if (nil? (get filters lc-reference))
(assoc % lc-reference (not (.-shiftKey e)))
(dissoc % lc-reference)))
(page-handler/save-filter! page-name @filters-atom))}
reference]))]))])
(for [reference references]
(let [lc-reference (string/lower-case reference)
filtered (get filters lc-reference)
color (condp = filtered
true "text-green-400"
false "text-red-400"
nil)]
[:button.border.rounded.px-1.mb-1.mr-1 {:key reference :class color :style {:border-color "currentColor"}
:on-click (fn [e]
(swap! filters-atom #(if (nil? (get filters lc-reference))
(assoc % lc-reference (not (.-shiftKey e)))
(dissoc % lc-reference)))
(page-handler/save-filter! page-name @filters-atom))}
reference]))]))])

(defn filter-dialog
[filters-atom references page-name]
Expand All @@ -52,11 +52,11 @@
[block level]
(if (:block/children block)
(-> (update block :block/children
(fn [blocks]
(map (fn [block]
(let [level (inc level)
block (assoc block :ref/level level)]
(block-with-ref-level block level))) blocks)))
(fn [blocks]
(map (fn [block]
(let [level (inc level)
block (assoc block :ref/level level)]
(block-with-ref-level block level))) blocks)))
(assoc :ref/level level))
(assoc block :ref/level level)))

Expand Down Expand Up @@ -86,72 +86,74 @@
: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)
references (db/get-page-linked-refs-refed-pages repo page-name)
references (->> (concat ref-pages references)
(remove nil?)
(distinct))
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}))]
{}))
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}))]
{}))

(when (or (> n-ref 0)
(seq filter-state))
(ui/foldable
[:div.flex.flex-row.flex-1.justify-between
[:h2.font-bold.opacity-50 (let []
(str n-ref " Linked Reference"
(when (> n-ref 1) "s")))]
[:a.opacity-50.hover:opacity-100.filter
{:title "Filter"
:on-click #(state/set-modal! (filter-dialog filters-atom references page-name))}
(svg/filter-icon (cond
(empty? filter-state) nil
(every? true? (vals filter-state)) "text-green-400"
(every? false? (vals filter-state)) "text-red-400"
:else "text-yellow-400"))]]
(when (or (> n-ref 0)
(seq filter-state))
(ui/foldable
[:div.flex.flex-row.flex-1.justify-between
[:h2.font-bold.opacity-50 (let []
(str n-ref " Linked Reference"
(when (> n-ref 1) "s")))]
[:a.opacity-50.hover:opacity-100.filter
{:title "Filter"
:on-click #(state/set-modal! (filter-dialog filters-atom references page-name))}
(svg/filter-icon (cond
(empty? filter-state) nil
(every? true? (vals filter-state)) "text-green-400"
(every? false? (vals filter-state)) "text-red-400"
:else "text-yellow-400"))]]

[:div.references-blocks
(let [ref-hiccup (block/->hiccup filtered-ref-blocks
{:id page-name
:ref? true
:breadcrumb-show? true
:group-by-page? true
:editor-box editor/box
:filters filters}
{})]
(content/content page-name
{:hiccup ref-hiccup}))]
(fn []
[:div.references-blocks
(let [ref-hiccup (block/->hiccup filtered-ref-blocks
{:id page-name
:ref? true
:breadcrumb-show? true
:group-by-page? true
:editor-box editor/box
:filters filters}
{})]
(content/content page-name
{:hiccup ref-hiccup}))])

{}))]]))))
{:default-collapsed? (>= n-ref threshold)}))]])))))

(rum/defcs unlinked-references-aux
< rum/reactive db-mixins/query
Expand All @@ -160,10 +162,10 @@
(fn [state]
(reset! (second (:rum/args state))
(apply +
(for [[_ rfs]
(db/get-page-unlinked-references
(first (:rum/args state)))]
(count rfs))))
(for [[_ rfs]
(db/get-page-unlinked-references
(first (:rum/args state)))]
(count rfs))))
(render-fn state)))}
[state page-name n-ref]
(let [ref-blocks (db/get-page-unlinked-references page-name)]
Expand Down
1 change: 0 additions & 1 deletion src/main/frontend/modules/shortcut/config.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -482,7 +482,6 @@
:sidebar/clear
:sidebar/open-today-page
:search/re-index
:graph/re-index
:auto-complete/prev
:auto-complete/next
:auto-complete/complete
Expand Down
8 changes: 8 additions & 0 deletions src/main/frontend/state.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -1378,6 +1378,14 @@
value))
2))

(defn get-linked-references-collapsed-threshold
[]
(or
(when-let [value (:ref/linked-references-collapsed-threshold (get-config))]
(when (integer? value)
value))
100))

(defn get-events-chan
[]
(:system/events @state))
Expand Down
2 changes: 2 additions & 0 deletions templates/config.edn
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,8 @@
;; If we set the level's value to 3, `b` will be opened and `c` will be collapsed.
:ref/default-open-blocks-level 2

:ref/linked-references-collapsed-threshold 100

;; any number between 0 and 1 (the greater it is the faster the changes of the next-interval of card reviews) (default 0.5)
;; :srs/learning-fraction 0.5

Expand Down

0 comments on commit d6a011f

Please sign in to comment.