Skip to content

Commit

Permalink
fix: fix onSnapToItem no call when auto playing
Browse files Browse the repository at this point in the history
  • Loading branch information
dohooo committed Sep 30, 2021
1 parent 7e00489 commit 4953b98
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 50 deletions.
10 changes: 6 additions & 4 deletions src/Carousel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,8 @@ function Carousel<T extends unknown = any>(
lockController,
timingConfig,
disable: !data.length,
onNext: (isFinished) => isFinished && callComputedIndex(),
onPrev: (isFinished) => isFinished && callComputedIndex(),
});
useAutoPlay({
autoPlay,
Expand Down Expand Up @@ -193,12 +195,12 @@ function Carousel<T extends unknown = any>(
);

const next = React.useCallback(() => {
return carouselController.next(callComputedIndex);
}, [carouselController, callComputedIndex]);
return carouselController.next();
}, [carouselController]);

const prev = React.useCallback(() => {
return carouselController.prev(callComputedIndex);
}, [carouselController, callComputedIndex]);
return carouselController.prev();
}, [carouselController]);

const getCurrentIndex = React.useCallback(() => {
return index.value;
Expand Down
92 changes: 46 additions & 46 deletions src/useCarouselController.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@ interface IOpts {
lockController: ILockController;
timingConfig: Animated.WithTimingConfig;
disable?: boolean;
onPrev?: (isFinished: boolean) => void;
onNext?: (isFinished: boolean) => void;
}

export interface ICarouselController {
prev: (callback?: (isFinished: boolean) => void) => void;
next: (callback?: (isFinished: boolean) => void) => void;
prev: () => void;
next: () => void;
}

export function useCarouselController(opts: IOpts): ICarouselController {
Expand All @@ -23,6 +25,8 @@ export function useCarouselController(opts: IOpts): ICarouselController {
timingConfig,
lockController,
disable = false,
onPrev,
onNext,
} = opts;

const closeLock = React.useCallback(
Expand All @@ -34,53 +38,49 @@ export function useCarouselController(opts: IOpts): ICarouselController {
[lockController]
);

const next = React.useCallback(
(callback?: (isFinished: boolean) => void) => {
if (disable) return;
if (lockController.isLock()) return;
lockController.lock();
handlerOffsetX.value = withTiming(
handlerOffsetX.value - width,
timingConfig,
(isFinished: boolean) => {
!!callback && runOnJS(callback)(isFinished);
runOnJS(closeLock)(isFinished);
}
);
},
[
width,
lockController,
const next = React.useCallback(() => {
if (disable) return;
if (lockController.isLock()) return;
lockController.lock();
handlerOffsetX.value = withTiming(
handlerOffsetX.value - width,
timingConfig,
closeLock,
handlerOffsetX,
disable,
]
);
(isFinished: boolean) => {
!!onNext && runOnJS(onNext)(isFinished);
runOnJS(closeLock)(isFinished);
}
);
}, [
onNext,
width,
lockController,
timingConfig,
closeLock,
handlerOffsetX,
disable,
]);

const prev = React.useCallback(
(callback?: (isFinished: boolean) => void) => {
if (disable) return;
if (lockController.isLock()) return;
lockController.lock();
handlerOffsetX.value = withTiming(
handlerOffsetX.value + width,
timingConfig,
(isFinished: boolean) => {
!!callback && runOnJS(callback)(isFinished);
runOnJS(closeLock)(isFinished);
}
);
},
[
width,
lockController,
const prev = React.useCallback(() => {
if (disable) return;
if (lockController.isLock()) return;
lockController.lock();
handlerOffsetX.value = withTiming(
handlerOffsetX.value + width,
timingConfig,
closeLock,
handlerOffsetX,
disable,
]
);
(isFinished: boolean) => {
!!onPrev && runOnJS(onPrev)(isFinished);
runOnJS(closeLock)(isFinished);
}
);
}, [
onPrev,
width,
lockController,
timingConfig,
closeLock,
handlerOffsetX,
disable,
]);

return {
next,
Expand Down

0 comments on commit 4953b98

Please sign in to comment.