🐛 Fix sidebar scroll to shape (#10600)

This commit is contained in:
Elena Torró 2026-07-08 20:38:16 +02:00 committed by GitHub
parent bcf77767b2
commit 8ac2e8c8a8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -490,8 +490,7 @@
selected-child-render-idx selected-child-render-idx
(when (> total default-chunk-size) (when (> total default-chunk-size)
(some (fn [sel-id] (some (fn [sel-id]
(let [idx (.indexOf shapes sel-id)] (d/index-of-pred shapes #(= (get % :id) sel-id)))
(when (>= idx 0) idx)))
selected)) selected))
;; Load at least enough to include the selected child plus extra ;; Load at least enough to include the selected child plus extra
@ -509,12 +508,7 @@
(reset! children-count* new-count)) (reset! children-count* new-count))
(reset! children-count* 0)) (reset! children-count* 0))))
(fn []
(when-let [obs (mf/ref-val observer-ref)]
(.disconnect obs)
(mf/set-ref-val! obs nil)))))
;; Re-observe sentinel whenever children-count changes (sentinel moves) ;; Re-observe sentinel whenever children-count changes (sentinel moves)
;; and (shapes item) to reconnect observer after shape changes ;; and (shapes item) to reconnect observer after shape changes
@ -524,11 +518,6 @@
scroll-node (dom/get-parent-with-data name-node "scroll-container") scroll-node (dom/get-parent-with-data name-node "scroll-container")
lazy-node (mf/ref-val lazy-ref)] lazy-node (mf/ref-val lazy-ref)]
;; Disconnect previous observer
(when-let [obs (mf/ref-val observer-ref)]
(.disconnect obs)
(mf/set-ref-val! observer-ref nil))
;; Setup new observer if there are more children to load ;; Setup new observer if there are more children to load
(when (and ^boolean is-expanded (when (and ^boolean is-expanded
^boolean (< children-count total) ^boolean (< children-count total)
@ -542,7 +531,13 @@
(reset! children-count* next-count)))) (reset! children-count* next-count))))
observer (js/IntersectionObserver. cb #js {:root scroll-node})] observer (js/IntersectionObserver. cb #js {:root scroll-node})]
(.observe observer lazy-node) (.observe observer lazy-node)
(mf/set-ref-val! observer-ref observer))))) (mf/set-ref-val! observer-ref observer)))
;; Disconnect on deps change or unmount; this effect owns the observer
(fn []
(when-let [obs (mf/ref-val observer-ref)]
(.disconnect obs)
(mf/set-ref-val! observer-ref nil)))))
[:> layer-item-inner* [:> layer-item-inner*
{:ref dref {:ref dref