From 8b0632495b5cdbc81a534f1041a51bd271829152 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Sun, 14 Dec 2025 01:07:26 -0800 Subject: [PATCH] fix debounce on onScrollEnd callback on ItemGridList --- .../item-grid-list/item-grid-list.tsx | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/renderer/components/item-list/item-grid-list/item-grid-list.tsx b/src/renderer/components/item-list/item-grid-list/item-grid-list.tsx index 490f406b4..8aba2f3c3 100644 --- a/src/renderer/components/item-list/item-grid-list/item-grid-list.tsx +++ b/src/renderer/components/item-list/item-grid-list/item-grid-list.tsx @@ -99,6 +99,7 @@ const VirtualizedGridList = React.memo( width, }: VirtualizedGridListProps) => { const tableMeta = tableMetaRef.current; + const scrollEndTimeoutRef = useRef(null); const itemData: GridItemProps = useMemo(() => { return { @@ -130,11 +131,27 @@ const VirtualizedGridList = React.memo( const handleOnScroll = useCallback( ({ scrollDirection, scrollOffset }: ListOnScrollProps) => { onScroll?.(scrollOffset, scrollDirection === 'forward' ? 'down' : 'up'); - onScrollEnd?.(scrollOffset, scrollDirection === 'forward' ? 'down' : 'up'); + + if (scrollEndTimeoutRef.current) { + clearTimeout(scrollEndTimeoutRef.current); + } + + scrollEndTimeoutRef.current = setTimeout(() => { + onScrollEnd?.(scrollOffset, scrollDirection === 'forward' ? 'down' : 'up'); + scrollEndTimeoutRef.current = null; + }, 150); }, [onScroll, onScrollEnd], ); + useEffect(() => { + return () => { + if (scrollEndTimeoutRef.current) { + clearTimeout(scrollEndTimeoutRef.current); + } + }; + }, []); + const handleOnItemsRendered = useCallback( (items: ListOnItemsRenderedProps) => { const columnCount = tableMetaRef.current?.columnCount || 0;