Skip to content

Commit f34d58a

Browse files
committed
fix: virtualized list shouldn't be nested
1 parent e8fef0d commit f34d58a

File tree

2 files changed

+60
-60
lines changed

2 files changed

+60
-60
lines changed

src/main/frontend/components/page.cljs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -615,21 +615,15 @@
615615
(rum/local false ::all-collapsed?)
616616
(rum/local false ::control-show?)
617617
(rum/local nil ::current-page)
618-
(rum/local false ::objects-ready?)
619-
[state {:keys [repo page preview? sidebar? tag-dialog? linked-refs? unlinked-refs? config] :as option}]
618+
[state {:keys [repo page preview? sidebar? tag-dialog? linked-refs? unlinked-refs? config journals?] :as option}]
620619
(let [current-repo (state/sub :git/current-repo)
621-
*objects-ready? (::objects-ready? state)
622620
page (or page (some-> (:db/id option) db/entity))
623621
config (assoc config
624-
:*objects-ready? *objects-ready?
625622
:id (str (:block/uuid page)))
626623
repo (or repo current-repo)
627624
block? (some? (:block/page page))
628625
class-page? (ldb/class? page)
629626
property-page? (ldb/property? page)
630-
objects-ready? (if (or class-page? property-page?)
631-
(rum/react *objects-ready?)
632-
true)
633627
title (:block/title page)
634628
journal? (db/journal-page? title)
635629
db-based? (config/db-based-graph? repo)
@@ -693,7 +687,7 @@
693687
(sidebar-page-properties config page)])
694688

695689
(when show-tabs?
696-
(tabs page {:current-page? option :sidebar? sidebar? :*objects-ready? *objects-ready?}))
690+
(tabs page {:current-page? option :sidebar? sidebar?}))
697691

698692
(when (not tag-dialog?)
699693
[:div.ls-page-blocks
@@ -704,7 +698,7 @@
704698
:container-id (:container-id state)
705699
:whiteboard? whiteboard?}))])])
706700

707-
(when (and (not preview?) (or (not show-tabs?) objects-ready?))
701+
(when (and (not preview?) (not show-tabs?))
708702
[:div.ml-1.flex.flex-col.gap-8
709703
(when today?
710704
(today-queries repo today? sidebar?))
@@ -723,6 +717,7 @@
723717
[:div.fade-in.delay {:key "page-references"}
724718
(rum/with-key
725719
(reference/references page {:sidebar? sidebar?
720+
:journals? journals?
726721
:refs-count (:refs-count option)})
727722
(str title "-refs"))])
728723

@@ -757,7 +752,8 @@
757752
(when (:block.temp/load-status page) (reset! *loading? false))
758753
(p/let [page-block (db-async/<get-block repo page-id-uuid-or-name)
759754
page-id (:db/id page-block)
760-
refs-count (db-async/<get-block-refs-count repo page-id)]
755+
refs-count (when-not (or (ldb/class? page-block) (ldb/property? page-block))
756+
(db-async/<get-block-refs-count repo page-id))]
761757
(reset! *loading? false)
762758
(reset! *page (db/entity (:db/id page-block)))
763759
(reset! *refs-count refs-count)

src/main/frontend/components/views.cljs

Lines changed: 54 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,16 @@
4949

5050
(def ^:private yyyy-MM-dd-formatter (tf/formatter "yyyy-MM-dd"))
5151

52+
(defn- virtualized-list
53+
[{:keys [total-count item-content compute-item-key] :as option}
54+
disable-virtualized?]
55+
(if disable-virtualized?
56+
[:div.content
57+
(for [i (range 0 total-count)]
58+
(rum/with-key (item-content i)
59+
(compute-item-key i)))]
60+
(ui/virtualized-list option)))
61+
5262
(defn- get-scroll-parent
5363
[config]
5464
(if (:sidebar? config)
@@ -1598,15 +1608,9 @@
15981608

15991609
(rum/defc table-body < rum/static
16001610
[table option rows *scroller-ref set-items-rendered!]
1601-
(let [[scrolling? set-scrolling!] (hooks/use-state false)
1602-
[ready? set-ready!] (hooks/use-state false)]
1603-
1604-
(hooks/use-effect!
1605-
(fn [] (util/schedule #(set-ready! true)))
1606-
[])
1607-
1608-
(when (and ready? (seq rows))
1609-
(ui/virtualized-list
1611+
(let [[scrolling? set-scrolling!] (hooks/use-state false)]
1612+
(when (seq rows)
1613+
(virtualized-list
16101614
{:ref #(reset! *scroller-ref %)
16111615
:increase-viewport-by {:top 300 :bottom 300}
16121616
:custom-scroll-parent (get-scroll-parent
@@ -1621,14 +1625,15 @@
16211625
:is-scrolling set-scrolling!
16221626
:item-content (fn [idx _user ^js context]
16231627
(let [option (assoc option
1624-
:scrolling? (.-scrolling context)
1628+
:scrolling? (when context (.-scrolling context))
16251629
:table-view? true)]
16261630
(lazy-item (:data table) idx option
16271631
(fn [row]
16281632
(table-row table row {} option)))))
16291633
:items-rendered (fn [props]
16301634
(when (seq props)
1631-
(set-items-rendered! true)))}))))
1635+
(set-items-rendered! true)))}
1636+
(:disable-virtualized? option)))))
16321637

16331638
(rum/defc table-view < rum/static
16341639
[table option row-selection *scroller-ref]
@@ -1646,7 +1651,7 @@
16461651
(shui/table-footer (add-new-row (:view-entity option) table)))]]))))
16471652

16481653
(rum/defc list-view < rum/static
1649-
[{:keys [config ref-matched-children-ids groups?] :as option} view-entity {:keys [rows]} *scroller-ref]
1654+
[{:keys [config ref-matched-children-ids disable-virtualized?] :as option} view-entity {:keys [rows]} *scroller-ref]
16501655
(let [lazy-item-render (fn [rows idx]
16511656
(lazy-item rows idx (assoc option :list-view? true)
16521657
(fn [block]
@@ -1657,27 +1662,24 @@
16571662
(= :linked-references (:logseq.property.view/feature-type view-entity))
16581663
(assoc :ref-matched-children-ids ref-matched-children-ids))]
16591664
(block-container config' block)))))
1660-
list-cp (fn [rows groups?]
1665+
list-cp (fn [rows]
16611666
(when (seq rows)
1662-
(if groups?
1663-
[:div.content
1664-
(for [[idx _row] (medley/indexed rows)]
1665-
(lazy-item-render rows idx))]
1666-
(ui/virtualized-list
1667-
{:ref #(reset! *scroller-ref %)
1668-
:class "content"
1669-
:custom-scroll-parent (get-scroll-parent config)
1670-
:increase-viewport-by {:top 64 :bottom 64}
1671-
:compute-item-key (fn [idx]
1672-
(let [block-id (util/nth-safe rows idx)]
1673-
(str "list-row-" block-id)))
1674-
:total-count (count rows)
1675-
:skipAnimationFrameInResizeObserver true
1676-
:item-content (fn [idx] (lazy-item-render rows idx))}))))
1667+
(virtualized-list
1668+
{:ref #(reset! *scroller-ref %)
1669+
:class "content"
1670+
:custom-scroll-parent (get-scroll-parent config)
1671+
:increase-viewport-by {:top 64 :bottom 64}
1672+
:compute-item-key (fn [idx]
1673+
(let [block-id (util/nth-safe rows idx)]
1674+
(str "list-row-" block-id)))
1675+
:total-count (count rows)
1676+
:skipAnimationFrameInResizeObserver true
1677+
:item-content (fn [idx] (lazy-item-render rows idx))}
1678+
disable-virtualized?)))
16771679
breadcrumb (state/get-component :block/breadcrumb)
16781680
all-numbers? (every? number? rows)]
16791681
(if all-numbers?
1680-
(list-cp rows groups?)
1682+
(list-cp rows)
16811683
(for [[idx row] (medley/indexed rows)]
16821684
(if (and (vector? row) (uuid? (first row)))
16831685
(let [[first-block-id blocks] row]
@@ -1687,7 +1689,7 @@
16871689
(breadcrumb (assoc config :list-view? true)
16881690
(state/get-current-repo) first-block-id
16891691
{:show-page? false})]
1690-
(list-cp blocks groups?)])
1692+
(list-cp blocks)])
16911693
(rum/with-key
16921694
(lazy-item-render rows idx)
16931695
(str "partition-" idx)))))))
@@ -1812,12 +1814,11 @@
18121814
(ui/icon "arrows-up-down")))
18131815

18141816
(rum/defc view-cp
1815-
[view-entity table option* {:keys [*scroller-ref display-type row-selection groups?]}]
1817+
[view-entity table option* {:keys [*scroller-ref display-type row-selection]}]
18161818
(let [[viewid] (hooks/use-state #(random-uuid))
18171819
option (assoc option*
18181820
:view-entity view-entity
1819-
:viewid viewid
1820-
:groups? groups?)]
1821+
:viewid viewid)]
18211822
[:div {:id viewid}
18221823
(case display-type
18231824
:logseq.property.view/type.list
@@ -2000,9 +2001,10 @@
20002001
(when (and db-based? add-new-object!) (new-record-button table view-entity))]]))
20012002

20022003
(rum/defc ^:large-vars/cleanup-todo view-inner < rum/static
2003-
[view-entity {:keys [view-parent data full-data set-data! columns add-new-object! foldable-options input set-input! sorting set-sorting! filters set-filters! display-type group-by-property-ident] :as option*}
2004+
[view-entity {:keys [view-parent data full-data set-data! columns add-new-object! foldable-options input set-input! sorting set-sorting! filters set-filters! display-type group-by-property-ident config] :as option*}
20042005
*scroller-ref]
20052006
(let [db-based? (config/db-based-graph?)
2007+
journals? (:journals? config)
20062008
option (assoc option* :properties
20072009
(-> (remove #{:id :select} (map :id columns))
20082010
(conj :block/uuid :block/name)
@@ -2072,6 +2074,7 @@
20722074
*view-ref (rum/use-ref nil)
20732075
gallery? (= display-type :logseq.property.view/type.gallery)
20742076
list-view? (= display-type :logseq.property.view/type.list)
2077+
disable-virtualized? journals?
20752078
[ready? set-ready?] (hooks/use-state false)]
20762079

20772080
(run-effects! option table-map *scroller-ref gallery? set-ready?)
@@ -2091,7 +2094,7 @@
20912094
(if (and group-by-property-ident (not (number? (first (:rows table)))))
20922095
(when (and ready? (seq (:rows table)))
20932096
[:div.flex.flex-col.border-t.pt-2.gap-2
2094-
(ui/virtualized-list
2097+
(virtualized-list
20952098
{:class (when list-view? "group-list-view")
20962099
:custom-scroll-parent (util/app-scroll-container-node (rum/deref *view-ref))
20972100
:increase-viewport-by {:top 300 :bottom 300}
@@ -2139,14 +2142,18 @@
21392142
(fn []
21402143
(let [render (view-cp view-entity
21412144
(assoc table' :rows group)
2142-
option
2143-
(assoc view-opts :groups? (or group-by-page?
2144-
group-by-property-ident)))]
2145+
(assoc option
2146+
;; disabled virtualization for nested view
2147+
:disable-virtualized? true)
2148+
view-opts)]
21452149
(if list-view? [:div.-ml-2 render] render)))
21462150
{:title-trigger? false})
2147-
(str (:db/id view-entity) "-group-idx-" idx))))})])
2151+
(str (:db/id view-entity) "-group-idx-" idx))))}
2152+
disable-virtualized?)])
21482153
(view-cp view-entity table
2149-
(assoc option :group-by-property-ident group-by-property-ident)
2154+
(assoc option
2155+
:group-by-property-ident group-by-property-ident
2156+
:disable-virtualized? disable-virtualized?)
21502157
view-opts)))])
21512158
(merge {:title-trigger? false} foldable-options))]))
21522159

@@ -2188,9 +2195,9 @@
21882195
:advanced-query? advanced-query?}))))))
21892196

21902197
(defn- load-view-data-aux
2191-
[config view-entity view-parent {:keys [query? query query-entity-ids sorting filters input
2192-
view-feature-type group-by-property-ident
2193-
set-data! set-ref-pages-count! set-ref-matched-children-ids! set-properties! set-loading!]}]
2198+
[view-entity view-parent {:keys [query? query query-entity-ids sorting filters input
2199+
view-feature-type group-by-property-ident
2200+
set-data! set-ref-pages-count! set-ref-matched-children-ids! set-properties! set-loading!]}]
21942201
(c.m/run-task*
21952202
(m/sp
21962203
(let [need-query? (and query? (seq query-entity-ids) (or sorting filters (not (string/blank? input))))]
@@ -2221,10 +2228,7 @@
22212228
(set-ref-matched-children-ids! ref-matched-children-ids))
22222229
(set-properties! properties))
22232230
(finally
2224-
(set-loading! false)
2225-
(when (contains? #{:class-objects :property-objects} view-feature-type)
2226-
(when-let [*objects-ready? (:*objects-ready? config)]
2227-
(reset! *objects-ready? true)))))))))))
2231+
(set-loading! false)))))))))
22282232

22292233
(rum/defc view-aux
22302234
[view-entity {:keys [config view-parent view-feature-type data query-entity-ids query set-view-entity!] :as option}]
@@ -2260,7 +2264,7 @@
22602264
[ref-pages-count set-ref-pages-count!] (hooks/use-state nil)
22612265
[ref-matched-children-ids set-ref-matched-children-ids!] (hooks/use-state nil)
22622266
load-view-data (fn load-view-data []
2263-
(load-view-data-aux config view-entity view-parent
2267+
(load-view-data-aux view-entity view-parent
22642268
{:query? query?
22652269
:query query
22662270
:query-entity-ids query-entity-ids
@@ -2307,8 +2311,8 @@
23072311
(+ total 1)
23082312
(let [[_k col] item]
23092313
(if (and (vector? (first col))
2310-
(and (not (map? col))
2311-
(uuid? (ffirst col))))
2314+
(not (map? col))
2315+
(uuid? (ffirst col)))
23122316
(+ total (count-col col))
23132317
(+ total (count col)))))) 0 data))]
23142318
(f data)))

0 commit comments

Comments
 (0)