@@ -143,7 +143,7 @@ export const CellList: React.FC<CellListProps> = (props: CellListProps) => {
143
143
frame_actions . cell_list_div = $ ( cell_list_node . current ) ;
144
144
145
145
return ( ) => {
146
- save_scroll ( ) ;
146
+ saveScroll ( ) ;
147
147
// handle focus via an event handler on window.
148
148
// We have to do this since, e.g., codemirror editors
149
149
// involve spans that aren't even children, etc...
@@ -180,7 +180,7 @@ export const CellList: React.FC<CellListProps> = (props: CellListProps) => {
180
180
return render_loading ( ) ;
181
181
}
182
182
183
- function save_scroll ( ) : void {
183
+ const saveScroll = useCallback ( ( ) => {
184
184
if ( use_windowed_list ) {
185
185
// TODO -- virtuoso
186
186
// We don't actually need to do anything though since our virtuoso
@@ -190,7 +190,11 @@ export const CellList: React.FC<CellListProps> = (props: CellListProps) => {
190
190
frameActions . current ?. set_scrollTop ( cell_list_node . current . scrollTop ) ;
191
191
}
192
192
}
193
- }
193
+ } , [ use_windowed_list ] ) ;
194
+
195
+ const saveScrollDebounce = useMemo ( ( ) => {
196
+ return debounce ( saveScroll , 2000 ) ;
197
+ } , [ use_windowed_list ] ) ;
194
198
195
199
async function restore_scroll ( ) : Promise < void > {
196
200
if ( scrollTop == null || use_windowed_list ) return ;
@@ -543,12 +547,13 @@ export const CellList: React.FC<CellListProps> = (props: CellListProps) => {
543
547
const scrollOrResize = useMemo ( ( ) => {
544
548
return { } ;
545
549
} , [ ] ) ;
546
- useEffect ( ( ) => {
547
- if ( ! use_windowed_list ) return ;
550
+ const updateScrollOrResize = useCallback ( ( ) => {
548
551
for ( const key in scrollOrResize ) {
549
552
scrollOrResize [ key ] ( ) ;
550
553
}
551
- } , [ cells ] ) ;
554
+ } , [ ] ) ;
555
+
556
+ useEffect ( updateScrollOrResize , [ cells ] ) ;
552
557
553
558
const fileContext = useFileContext ( ) ;
554
559
@@ -559,17 +564,14 @@ export const CellList: React.FC<CellListProps> = (props: CellListProps) => {
559
564
560
565
const cellListResize = useResizeObserver ( { ref : cellListDivRef } ) ;
561
566
useEffect ( ( ) => {
562
- if ( ! use_windowed_list ) return ;
563
567
for ( const key in scrollOrResize ) {
564
568
scrollOrResize [ key ] ( ) ;
565
569
}
566
570
} , [ cellListResize ] ) ;
567
571
568
572
if ( use_windowed_list ) {
569
573
body = (
570
- < StableHtmlContext . Provider
571
- value = { { cellListDivRef, scrollOrResize } }
572
- >
574
+ < StableHtmlContext . Provider value = { { cellListDivRef, scrollOrResize } } >
573
575
< div ref = { cellListDivRef } className = "smc-vfill" >
574
576
< Virtuoso
575
577
ref = { virtuosoRef }
@@ -658,24 +660,27 @@ export const CellList: React.FC<CellListProps> = (props: CellListProps) => {
658
660
v . push ( BOTTOM_PADDING_CELL ) ;
659
661
660
662
body = (
661
- < div
662
- key = "cells"
663
- className = "smc-vfill"
664
- style = { {
665
- fontSize : `${ font_size } px` ,
666
- paddingLeft : "5px" ,
667
- flex : 1 ,
668
- overflowY : "auto" ,
669
- overflowX : "hidden" ,
670
- } }
671
- ref = { handleCellListRef }
672
- onClick = { actions != null && complete != null ? on_click : undefined }
673
- onScroll = { debounce ( ( ) => {
674
- save_scroll ( ) ;
675
- } , 3000 ) }
676
- >
677
- { v }
678
- </ div >
663
+ < StableHtmlContext . Provider value = { { cellListDivRef, scrollOrResize } } >
664
+ < div
665
+ key = "cells"
666
+ className = "smc-vfill"
667
+ style = { {
668
+ fontSize : `${ font_size } px` ,
669
+ paddingLeft : "5px" ,
670
+ flex : 1 ,
671
+ overflowY : "auto" ,
672
+ overflowX : "hidden" ,
673
+ } }
674
+ ref = { cellListDivRef }
675
+ onClick = { actions != null && complete != null ? on_click : undefined }
676
+ onScroll = { ( ) => {
677
+ updateScrollOrResize ( ) ;
678
+ saveScrollDebounce ( ) ;
679
+ } }
680
+ >
681
+ { v }
682
+ </ div >
683
+ </ StableHtmlContext . Provider >
679
684
) ;
680
685
}
681
686
0 commit comments