fix debounce on onScrollEnd callback on ItemGridList

This commit is contained in:
jeffvli
2025-12-14 01:07:26 -08:00
parent 7ed847fecb
commit 8b0632495b
@@ -99,6 +99,7 @@ const VirtualizedGridList = React.memo(
width, width,
}: VirtualizedGridListProps) => { }: VirtualizedGridListProps) => {
const tableMeta = tableMetaRef.current; const tableMeta = tableMetaRef.current;
const scrollEndTimeoutRef = useRef<NodeJS.Timeout | null>(null);
const itemData: GridItemProps = useMemo(() => { const itemData: GridItemProps = useMemo(() => {
return { return {
@@ -130,11 +131,27 @@ const VirtualizedGridList = React.memo(
const handleOnScroll = useCallback( const handleOnScroll = useCallback(
({ scrollDirection, scrollOffset }: ListOnScrollProps) => { ({ scrollDirection, scrollOffset }: ListOnScrollProps) => {
onScroll?.(scrollOffset, scrollDirection === 'forward' ? 'down' : 'up'); 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], [onScroll, onScrollEnd],
); );
useEffect(() => {
return () => {
if (scrollEndTimeoutRef.current) {
clearTimeout(scrollEndTimeoutRef.current);
}
};
}, []);
const handleOnItemsRendered = useCallback( const handleOnItemsRendered = useCallback(
(items: ListOnItemsRenderedProps) => { (items: ListOnItemsRenderedProps) => {
const columnCount = tableMetaRef.current?.columnCount || 0; const columnCount = tableMetaRef.current?.columnCount || 0;