Allow immediate swipe during transitions

This commit is contained in:
2025-12-22 21:19:55 +01:00
parent a1ae2a53a6
commit 9a85345d75

View File

@@ -239,10 +239,22 @@ export function SwipeTabs<T extends string | number>({
node.classList.toggle('swipe-tabs--dragging', value); node.classList.toggle('swipe-tabs--dragging', value);
}, []); }, []);
const cancelAnimationForDrag = useCallback(() => {
if (!isAnimatingRef.current) return;
const pendingIndex = pendingIndexRef.current;
pendingIndexRef.current = null;
isAnimatingRef.current = false;
needsResetRef.current = false;
const targetIndex = pendingIndex ?? activeIndex;
resetToIndex(targetIndex);
}, [activeIndex, resetToIndex]);
const startDrag = useCallback( const startDrag = useCallback(
(x: number, y: number, pointerId: number | null, touchId: number | null) => { (x: number, y: number, pointerId: number | null, touchId: number | null) => {
if (swipeDisabled || tabs.length <= 1) return; if (swipeDisabled || tabs.length <= 1) return;
if (isAnimatingRef.current) return; if (isAnimatingRef.current) {
cancelAnimationForDrag();
}
measureWidth(); measureWidth();
dragRef.current.pointerId = pointerId; dragRef.current.pointerId = pointerId;
dragRef.current.touchId = touchId; dragRef.current.touchId = touchId;
@@ -253,7 +265,7 @@ export function SwipeTabs<T extends string | number>({
dragRef.current.isDragging = false; dragRef.current.isDragging = false;
dragOffsetRef.current = 0; dragOffsetRef.current = 0;
}, },
[measureWidth, swipeDisabled, tabs.length] [cancelAnimationForDrag, measureWidth, swipeDisabled, tabs.length]
); );
const updateDrag = useCallback( const updateDrag = useCallback(