react-native-reanimated-carousel 4.0.0 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -40
- package/lib/commonjs/components/Carousel.js +1 -42
- package/lib/commonjs/components/Carousel.js.map +1 -1
- package/lib/commonjs/components/Carousel.test.js +2 -678
- package/lib/commonjs/components/Carousel.test.js.map +1 -1
- package/lib/commonjs/components/CarouselLayout.js +1 -211
- package/lib/commonjs/components/CarouselLayout.js.map +1 -1
- package/lib/commonjs/components/ItemLayout.js +1 -98
- package/lib/commonjs/components/ItemLayout.js.map +1 -1
- package/lib/commonjs/components/ItemRenderer.js +1 -79
- package/lib/commonjs/components/ItemRenderer.js.map +1 -1
- package/lib/commonjs/components/LazyView.js +1 -21
- package/lib/commonjs/components/LazyView.js.map +1 -1
- package/lib/commonjs/components/Pagination/Basic/PaginationItem.js +1 -83
- package/lib/commonjs/components/Pagination/Basic/PaginationItem.js.map +1 -1
- package/lib/commonjs/components/Pagination/Basic/index.js +1 -53
- package/lib/commonjs/components/Pagination/Basic/index.js.map +1 -1
- package/lib/commonjs/components/Pagination/Custom/PaginationItem.js +1 -88
- package/lib/commonjs/components/Pagination/Custom/PaginationItem.js.map +1 -1
- package/lib/commonjs/components/Pagination/Custom/index.js +1 -61
- package/lib/commonjs/components/Pagination/Custom/index.js.map +1 -1
- package/lib/commonjs/components/Pagination/index.js +1 -16
- package/lib/commonjs/components/Pagination/index.js.map +1 -1
- package/lib/commonjs/components/ScrollViewGesture.js +1 -362
- package/lib/commonjs/components/ScrollViewGesture.js.map +1 -1
- package/lib/commonjs/components/rnr-demo.test.js +1 -44
- package/lib/commonjs/components/rnr-demo.test.js.map +1 -1
- package/lib/commonjs/constants/index.js +1 -21
- package/lib/commonjs/constants/index.js.map +1 -1
- package/lib/commonjs/hooks/useAutoPlay.js +1 -56
- package/lib/commonjs/hooks/useAutoPlay.js.map +1 -1
- package/lib/commonjs/hooks/useAutoPlay.test.js +1 -154
- package/lib/commonjs/hooks/useAutoPlay.test.js.map +1 -1
- package/lib/commonjs/hooks/useCarouselController.js +1 -301
- package/lib/commonjs/hooks/useCarouselController.js.map +1 -1
- package/lib/commonjs/hooks/useCarouselController.test.js +1 -456
- package/lib/commonjs/hooks/useCarouselController.test.js.map +1 -1
- package/lib/commonjs/hooks/useCheckMounted.js +1 -23
- package/lib/commonjs/hooks/useCheckMounted.js.map +1 -1
- package/lib/commonjs/hooks/useCheckMounted.test.js +1 -44
- package/lib/commonjs/hooks/useCheckMounted.test.js.map +1 -1
- package/lib/commonjs/hooks/useCommonVariables.js +1 -102
- package/lib/commonjs/hooks/useCommonVariables.js.map +1 -1
- package/lib/commonjs/hooks/useCommonVariables.test.js +1 -37
- package/lib/commonjs/hooks/useCommonVariables.test.js.map +1 -1
- package/lib/commonjs/hooks/useInitProps.js +1 -78
- package/lib/commonjs/hooks/useInitProps.js.map +1 -1
- package/lib/commonjs/hooks/useInitProps.test.js +1 -126
- package/lib/commonjs/hooks/useInitProps.test.js.map +1 -1
- package/lib/commonjs/hooks/useLayoutConfig.js +1 -39
- package/lib/commonjs/hooks/useLayoutConfig.js.map +1 -1
- package/lib/commonjs/hooks/useLayoutConfig.test.js +1 -241
- package/lib/commonjs/hooks/useLayoutConfig.test.js.map +1 -1
- package/lib/commonjs/hooks/useOffsetX.js +1 -51
- package/lib/commonjs/hooks/useOffsetX.js.map +1 -1
- package/lib/commonjs/hooks/useOffsetX.test.js +2 -40
- package/lib/commonjs/hooks/useOffsetX.test.js.map +1 -1
- package/lib/commonjs/hooks/useOnProgressChange.js +1 -46
- package/lib/commonjs/hooks/useOnProgressChange.js.map +1 -1
- package/lib/commonjs/hooks/useOnProgressChange.test.js +1 -162
- package/lib/commonjs/hooks/useOnProgressChange.test.js.map +1 -1
- package/lib/commonjs/hooks/usePanGestureProxy.js +1 -117
- package/lib/commonjs/hooks/usePanGestureProxy.js.map +1 -1
- package/lib/commonjs/hooks/usePanGestureProxy.test.js +1 -419
- package/lib/commonjs/hooks/usePanGestureProxy.test.js.map +1 -1
- package/lib/commonjs/hooks/usePropsErrorBoundary.js +1 -36
- package/lib/commonjs/hooks/usePropsErrorBoundary.js.map +1 -1
- package/lib/commonjs/hooks/useUpdateGestureConfig.js +1 -19
- package/lib/commonjs/hooks/useUpdateGestureConfig.js.map +1 -1
- package/lib/commonjs/hooks/useUpdateGestureConfig.test.js +1 -91
- package/lib/commonjs/hooks/useUpdateGestureConfig.test.js.map +1 -1
- package/lib/commonjs/hooks/useVisibleRanges.js +1 -71
- package/lib/commonjs/hooks/useVisibleRanges.js.map +1 -1
- package/lib/commonjs/hooks/useVisibleRanges.test.js +7 -101
- package/lib/commonjs/hooks/useVisibleRanges.test.js.map +1 -1
- package/lib/commonjs/index.js +1 -21
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/layouts/index.js +1 -20
- package/lib/commonjs/layouts/index.js.map +1 -1
- package/lib/commonjs/layouts/normal.js +1 -27
- package/lib/commonjs/layouts/normal.js.map +1 -1
- package/lib/commonjs/layouts/parallax.js +1 -38
- package/lib/commonjs/layouts/parallax.js.map +1 -1
- package/lib/commonjs/layouts/stack.js +1 -213
- package/lib/commonjs/layouts/stack.js.map +1 -1
- package/lib/commonjs/layouts/stack.test.js +3 -22
- package/lib/commonjs/layouts/stack.test.js.map +1 -1
- package/lib/commonjs/store/index.js +1 -67
- package/lib/commonjs/store/index.js.map +1 -1
- package/lib/commonjs/types.js +1 -5
- package/lib/commonjs/utils/compute-offset-if-data-changed.js +1 -51
- package/lib/commonjs/utils/compute-offset-if-data-changed.js.map +1 -1
- package/lib/commonjs/utils/compute-offset-if-data-changed.test.js +1 -29
- package/lib/commonjs/utils/compute-offset-if-data-changed.test.js.map +1 -1
- package/lib/commonjs/utils/compute-offset-if-size-changed.js +1 -17
- package/lib/commonjs/utils/compute-offset-if-size-changed.js.map +1 -1
- package/lib/commonjs/utils/compute-offset-if-size-changed.test.js +1 -71
- package/lib/commonjs/utils/compute-offset-if-size-changed.test.js.map +1 -1
- package/lib/commonjs/utils/computed-with-auto-fill-data.js +1 -123
- package/lib/commonjs/utils/computed-with-auto-fill-data.js.map +1 -1
- package/lib/commonjs/utils/computed-with-auto-fill-data.test.js +1 -179
- package/lib/commonjs/utils/computed-with-auto-fill-data.test.js.map +1 -1
- package/lib/commonjs/utils/deal-with-animation.js +1 -20
- package/lib/commonjs/utils/deal-with-animation.js.map +1 -1
- package/lib/commonjs/utils/deal-with-animation.test.js +1 -75
- package/lib/commonjs/utils/deal-with-animation.test.js.map +1 -1
- package/lib/commonjs/utils/handleroffset-direction.js +1 -15
- package/lib/commonjs/utils/handleroffset-direction.js.map +1 -1
- package/lib/commonjs/utils/handleroffset-direction.test.js +1 -45
- package/lib/commonjs/utils/handleroffset-direction.test.js.map +1 -1
- package/lib/commonjs/utils/index.test.js +1 -73
- package/lib/commonjs/utils/index.test.js.map +1 -1
- package/lib/commonjs/utils/log.js +1 -21
- package/lib/commonjs/utils/log.js.map +1 -1
- package/lib/commonjs/utils/log.test.js +1 -57
- package/lib/commonjs/utils/log.test.js.map +1 -1
- package/lib/module/hooks/useOnProgressChange.js +1 -1
- package/lib/module/hooks/useOnProgressChange.js.map +1 -1
- package/package.json +7 -2
- package/src/hooks/useOnProgressChange.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ScrollViewGesture.tsx"],"names":["IScrollViewGesture","props","onConfigurePanGesture","vertical","pagingEnabled","snapEnabled","loop","scrollAnimationDuration","withAnimation","enabled","dataLength","overscrollEnabled","maxScrollDistancePerSwipe","minScrollDistancePerSwipe","fixedDirection","common","size","layout","updateContainerSize","translation","testID","style","onScrollStart","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","isHorizontal","max","panOffset","undefined","touching","validStart","scrollEndTranslation","scrollEndVelocity","containerRef","maxScrollDistancePerSwipeIsSet","minScrollDistancePerSwipeIsSet","getLimit","React","useCallback","measurement","containerWidth","width","withSpring","toValue","onFinished","defaultWithAnimation","type","config","duration","easing","Easing","easeOutQuart","isFinished","endWithSpring","scrollEndTranslationValue","scrollEndVelocityValue","origin","value","velocity","finalTranslation","deceleration","Math","abs","nextPage","round","offset","computed","ceil","floor","page","velocityDirection","sign","withProcessTranslation","finalPage","min","limit","onFinish","activeDecay","resetBoundary","onGestureStart","_","onGestureUpdate","e","translationX","translationY","panTranslation","boundary","fixed","dynamic","translationValue","onGestureEnd","_success","velocityX","velocityY","totalTranslation","gesture","options","onLayout","nativeEvent","height","children","ScrollViewGesture"],"mappings":"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","sourcesContent":["import type { PropsWithChildren } from \"react\";\nimport React, { useCallback } from \"react\";\nimport type { LayoutChangeEvent, StyleProp, ViewStyle } from \"react-native\";\nimport type {\n GestureStateChangeEvent,\n PanGestureHandlerEventPayload,\n} from \"react-native-gesture-handler\";\nimport { GestureDetector } from \"react-native-gesture-handler\";\nimport Animated, {\n cancelAnimation,\n measure,\n runOnJS,\n useAnimatedReaction,\n useAnimatedRef,\n useDerivedValue,\n useSharedValue,\n withDecay,\n} from \"react-native-reanimated\";\n\nimport { Easing } from \"../constants\";\nimport { usePanGestureProxy } from \"../hooks/usePanGestureProxy\";\nimport { useGlobalState } from \"../store\";\nimport type { WithTimingAnimation } from \"../types\";\nimport { dealWithAnimation } from \"../utils/deal-with-animation\";\n\ninterface Props {\n size: number;\n infinite?: boolean;\n testID?: string;\n style?: StyleProp<ViewStyle>;\n translation: Animated.SharedValue<number>;\n onLayout?: (e: LayoutChangeEvent) => void;\n onScrollStart?: () => void;\n onScrollEnd?: () => void;\n onTouchBegin?: () => void;\n onTouchEnd?: () => void;\n}\n\nconst IScrollViewGesture: React.FC<PropsWithChildren<Props>> = (props) => {\n const {\n props: {\n onConfigurePanGesture,\n vertical,\n pagingEnabled,\n snapEnabled,\n loop,\n scrollAnimationDuration,\n withAnimation,\n enabled,\n dataLength,\n overscrollEnabled,\n maxScrollDistancePerSwipe,\n minScrollDistancePerSwipe,\n fixedDirection,\n },\n common: { size },\n layout: { updateContainerSize },\n } = useGlobalState();\n\n const {\n translation,\n testID,\n style = {},\n onScrollStart,\n onScrollEnd,\n onTouchBegin,\n onTouchEnd,\n } = props;\n\n const maxPage = dataLength;\n const isHorizontal = useDerivedValue(() => !vertical, [vertical]);\n const max = useSharedValue(0);\n const panOffset = useSharedValue<number | undefined>(undefined); // set to undefined when not actively in a pan gesture\n const touching = useSharedValue(false);\n const validStart = useSharedValue(false);\n const scrollEndTranslation = useSharedValue(0);\n const scrollEndVelocity = useSharedValue(0);\n const containerRef = useAnimatedRef<Animated.View>();\n const maxScrollDistancePerSwipeIsSet = typeof maxScrollDistancePerSwipe === \"number\";\n const minScrollDistancePerSwipeIsSet = typeof minScrollDistancePerSwipe === \"number\";\n\n // Get the limit of the scroll.\n const getLimit = React.useCallback(() => {\n \"worklet\";\n\n if (!loop && !overscrollEnabled) {\n const measurement = measure(containerRef);\n const containerWidth = measurement?.width || 0;\n\n // If the item's total width is less than the container's width, then there is no need to scroll.\n if (dataLength * size < containerWidth) return 0;\n\n // Disable the \"overscroll\" effect\n return dataLength * size - containerWidth;\n }\n\n return dataLength * size;\n }, [loop, size, dataLength, overscrollEnabled]);\n\n const withSpring = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n \"worklet\";\n const defaultWithAnimation: WithTimingAnimation = {\n type: \"timing\",\n config: {\n duration: scrollAnimationDuration + 100,\n easing: Easing.easeOutQuart,\n },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n (isFinished: boolean) => {\n \"worklet\";\n if (isFinished) onFinished && runOnJS(onFinished)();\n }\n );\n },\n [scrollAnimationDuration, withAnimation]\n );\n\n const endWithSpring = React.useCallback(\n (\n scrollEndTranslationValue: number,\n scrollEndVelocityValue: number,\n onFinished?: () => void\n ) => {\n \"worklet\";\n const origin = translation.value;\n const velocity = scrollEndVelocityValue;\n // Default to scroll in the direction of the slide (with deceleration)\n let finalTranslation: number = withDecay({ velocity, deceleration: 0.999 });\n\n // If the distance of the swipe exceeds the max scroll distance, keep the view at the current position\n if (\n maxScrollDistancePerSwipeIsSet &&\n Math.abs(scrollEndTranslationValue) > maxScrollDistancePerSwipe\n ) {\n finalTranslation = origin;\n } else {\n /**\n * The page size is the same as the item size.\n * If direction is vertical, the page size is the height of the item.\n * If direction is horizontal, the page size is the width of the item.\n *\n * `page size` equals to `size` variable.\n * */\n\n // calculate target \"nextPage\" based on the final pan position and the velocity of\n // the pan gesture at termination; this allows for a quick \"flick\" to indicate a far\n // off page change.\n const nextPage = -Math.round((origin + velocity * 2) / size);\n\n if (pagingEnabled) {\n // we'll never go further than a single page away from the current page when paging\n // is enabled.\n\n // distance with direction\n const offset = -(scrollEndTranslationValue >= 0 ? 1 : -1); // 1 or -1\n const computed = offset < 0 ? Math.ceil : Math.floor;\n const page = computed(-origin / size);\n\n const velocityDirection = -Math.sign(velocity);\n if (page === nextPage || velocityDirection !== offset) {\n // not going anywhere! Velocity was insufficient to overcome the distance to get to a\n // further page. Let's reset gently to the current page.\n finalTranslation = withSpring(withProcessTranslation(-page * size), onFinished);\n } else if (loop) {\n const finalPage = page + offset;\n finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);\n } else {\n const finalPage = Math.min(maxPage - 1, Math.max(0, page + offset));\n finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);\n }\n }\n\n if (!pagingEnabled && snapEnabled) {\n // scroll to the nearest item\n finalTranslation = withSpring(withProcessTranslation(-nextPage * size), onFinished);\n }\n }\n\n translation.value = finalTranslation;\n\n function withProcessTranslation(translation: number) {\n if (!loop && !overscrollEnabled) {\n const limit = getLimit();\n const sign = Math.sign(translation);\n return sign * Math.max(0, Math.min(limit, Math.abs(translation)));\n }\n\n return translation;\n }\n },\n [\n withSpring,\n size,\n maxPage,\n loop,\n snapEnabled,\n translation,\n pagingEnabled,\n maxScrollDistancePerSwipe,\n maxScrollDistancePerSwipeIsSet,\n ]\n );\n\n const onFinish = React.useCallback(\n (isFinished: boolean) => {\n \"worklet\";\n if (isFinished) {\n touching.value = false;\n onScrollEnd && runOnJS(onScrollEnd)();\n }\n },\n [onScrollEnd, touching]\n );\n\n const activeDecay = React.useCallback(() => {\n \"worklet\";\n touching.value = true;\n translation.value = withDecay({ velocity: scrollEndVelocity.value }, (isFinished) =>\n onFinish(isFinished as boolean)\n );\n }, [onFinish, scrollEndVelocity, touching, translation]);\n\n const resetBoundary = React.useCallback(() => {\n \"worklet\";\n if (touching.value) return;\n\n if (translation.value > 0) {\n if (scrollEndTranslation.value < 0) {\n activeDecay();\n return;\n }\n if (!loop) {\n translation.value = withSpring(0);\n return;\n }\n }\n\n if (translation.value < -((maxPage - 1) * size)) {\n if (scrollEndTranslation.value > 0) {\n activeDecay();\n return;\n }\n if (!loop) translation.value = withSpring(-((maxPage - 1) * size));\n }\n }, [touching, translation, maxPage, size, scrollEndTranslation, loop, activeDecay, withSpring]);\n\n useAnimatedReaction(\n () => translation.value,\n () => {\n if (!pagingEnabled) resetBoundary();\n },\n [pagingEnabled, resetBoundary]\n );\n\n function withProcessTranslation(translation: number) {\n \"worklet\";\n\n if (!loop && !overscrollEnabled) {\n const limit = getLimit();\n const sign = Math.sign(translation);\n return sign * Math.max(0, Math.min(limit, Math.abs(translation)));\n }\n\n return translation;\n }\n\n const onGestureStart = useCallback(\n (_: PanGestureHandlerEventPayload) => {\n \"worklet\";\n\n touching.value = true;\n validStart.value = true;\n onScrollStart && runOnJS(onScrollStart)();\n\n max.value = (maxPage - 1) * size;\n if (!loop && !overscrollEnabled) max.value = getLimit();\n\n panOffset.value = translation.value;\n },\n [\n max,\n size,\n maxPage,\n loop,\n touching,\n panOffset,\n validStart,\n translation,\n overscrollEnabled,\n getLimit,\n onScrollStart,\n ]\n );\n\n const onGestureUpdate = useCallback(\n (e: PanGestureHandlerEventPayload) => {\n \"worklet\";\n\n if (panOffset.value === undefined) {\n // This may happen if `onGestureStart` is called as a part of the\n // JS thread (instead of the UI thread / worklet). If so, when\n // `onGestureStart` sets panOffset.value, the set will be asynchronous,\n // and so it may not actually occur before `onGestureUpdate` is called.\n //\n // Keeping this value as `undefined` when it is not active protects us\n // from the situation where we may use the previous value for panOffset\n // instead; this would cause a visual flicker in the carousel.\n\n // console.warn(\"onGestureUpdate: panOffset is undefined\");\n return;\n }\n\n if (validStart.value) {\n validStart.value = false;\n cancelAnimation(translation);\n }\n touching.value = true;\n const { translationX, translationY } = e;\n\n let panTranslation = isHorizontal.value ? translationX : translationY;\n\n if (fixedDirection === \"negative\") panTranslation = -Math.abs(panTranslation);\n else if (fixedDirection === \"positive\") panTranslation = +Math.abs(panTranslation);\n\n if (!loop) {\n if (translation.value > 0 || translation.value < -max.value) {\n const boundary = translation.value > 0 ? 0 : -max.value;\n const fixed = boundary - panOffset.value;\n const dynamic = panTranslation - fixed;\n translation.value = boundary + dynamic * 0.5;\n return;\n }\n }\n\n const translationValue = panOffset.value + panTranslation;\n translation.value = translationValue;\n },\n [\n isHorizontal,\n max,\n panOffset,\n loop,\n overscrollEnabled,\n fixedDirection,\n translation,\n validStart,\n touching,\n ]\n );\n\n const onGestureEnd = useCallback(\n (e: GestureStateChangeEvent<PanGestureHandlerEventPayload>, _success: boolean) => {\n \"worklet\";\n\n if (panOffset.value === undefined) {\n // console.warn(\"onGestureEnd: panOffset is undefined\");\n return;\n }\n\n const { velocityX, velocityY, translationX, translationY } = e;\n const scrollEndVelocityValue = isHorizontal.value ? velocityX : velocityY;\n scrollEndVelocity.value = scrollEndVelocityValue; // may update async: see https://docs.swmansion.com/react-native-reanimated/docs/core/useSharedValue#remarks\n\n let panTranslation = isHorizontal.value ? translationX : translationY;\n\n if (fixedDirection === \"negative\") panTranslation = -Math.abs(panTranslation);\n else if (fixedDirection === \"positive\") panTranslation = +Math.abs(panTranslation);\n\n scrollEndTranslation.value = panTranslation; // may update async: see https://docs.swmansion.com/react-native-reanimated/docs/core/useSharedValue#remarks\n\n const totalTranslation = scrollEndVelocityValue + panTranslation;\n\n /**\n * If the maximum scroll distance is set and the translation `exceeds the maximum scroll distance`,\n * the carousel will keep the view at the current position.\n */\n if (\n maxScrollDistancePerSwipeIsSet &&\n Math.abs(totalTranslation) > maxScrollDistancePerSwipe\n ) {\n const nextPage =\n Math.round(\n (panOffset.value + maxScrollDistancePerSwipe * Math.sign(totalTranslation)) / size\n ) * size;\n translation.value = withSpring(withProcessTranslation(nextPage), onScrollEnd);\n } else if (\n /**\n * If the minimum scroll distance is set and the translation `didn't exceeds the minimum scroll distance`,\n * the carousel will keep the view at the current position.\n */\n minScrollDistancePerSwipeIsSet &&\n Math.abs(totalTranslation) < minScrollDistancePerSwipe\n ) {\n const nextPage =\n Math.round(\n (panOffset.value + minScrollDistancePerSwipe * Math.sign(totalTranslation)) / size\n ) * size;\n translation.value = withSpring(withProcessTranslation(nextPage), onScrollEnd);\n } else {\n endWithSpring(panTranslation, scrollEndVelocityValue, onScrollEnd);\n }\n\n if (!loop) touching.value = false;\n\n panOffset.value = undefined;\n },\n [\n size,\n loop,\n touching,\n panOffset,\n translation,\n isHorizontal,\n scrollEndVelocity,\n scrollEndTranslation,\n fixedDirection,\n maxScrollDistancePerSwipeIsSet,\n maxScrollDistancePerSwipe,\n maxScrollDistancePerSwipeIsSet,\n minScrollDistancePerSwipe,\n endWithSpring,\n withSpring,\n onScrollEnd,\n ]\n );\n\n const gesture = usePanGestureProxy({\n onConfigurePanGesture,\n onGestureStart,\n onGestureUpdate,\n onGestureEnd,\n options: { enabled },\n });\n\n const onLayout = React.useCallback(\n (e: LayoutChangeEvent) => {\n \"worklet\";\n updateContainerSize({\n width: e.nativeEvent.layout.width,\n height: e.nativeEvent.layout.height,\n });\n },\n [updateContainerSize]\n );\n\n return (\n <GestureDetector gesture={gesture}>\n <Animated.View\n ref={containerRef}\n testID={testID}\n style={style}\n onTouchStart={onTouchBegin}\n onTouchEnd={onTouchEnd}\n onLayout={onLayout}\n >\n {props.children}\n </Animated.View>\n </GestureDetector>\n );\n};\n\nexport const ScrollViewGesture = IScrollViewGesture;\n"]}
|
|
1
|
+
{"version":3,"sources":["ScrollViewGesture.tsx"],"names":["IScrollViewGesture","props","onConfigurePanGesture","vertical","pagingEnabled","snapEnabled","loop","scrollAnimationDuration","withAnimation","enabled","dataLength","overscrollEnabled","maxScrollDistancePerSwipe","minScrollDistancePerSwipe","fixedDirection","size","common","updateContainerSize","layout","translation","testID","style","onScrollStart","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","isHorizontal","max","panOffset","undefined","touching","validStart","scrollEndTranslation","scrollEndVelocity","containerRef","maxScrollDistancePerSwipeIsSet","minScrollDistancePerSwipeIsSet","getLimit","React","useCallback","measurement","containerWidth","width","measure","withSpring","toValue","onFinished","defaultWithAnimation","type","config","duration","easing","Easing","easeOutQuart","isFinished","runOnJS","dealWithAnimation","endWithSpring","scrollEndTranslationValue","scrollEndVelocityValue","origin","value","velocity","finalTranslation","deceleration","Math","abs","nextPage","round","offset","computed","ceil","floor","page","velocityDirection","sign","withProcessTranslation","finalPage","min","limit","withDecay","onFinish","activeDecay","resetBoundary","onGestureStart","_","onGestureUpdate","e","translationX","translationY","panTranslation","boundary","fixed","dynamic","translationValue","cancelAnimation","onGestureEnd","_success","velocityX","velocityY","totalTranslation","gesture","options","onLayout","nativeEvent","height","children","ScrollViewGesture"],"mappings":"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","sourcesContent":["import type { PropsWithChildren } from \"react\";\nimport React, { useCallback } from \"react\";\nimport type { LayoutChangeEvent, StyleProp, ViewStyle } from \"react-native\";\nimport type {\n GestureStateChangeEvent,\n PanGestureHandlerEventPayload,\n} from \"react-native-gesture-handler\";\nimport { GestureDetector } from \"react-native-gesture-handler\";\nimport Animated, {\n cancelAnimation,\n measure,\n runOnJS,\n useAnimatedReaction,\n useAnimatedRef,\n useDerivedValue,\n useSharedValue,\n withDecay,\n} from \"react-native-reanimated\";\n\nimport { Easing } from \"../constants\";\nimport { usePanGestureProxy } from \"../hooks/usePanGestureProxy\";\nimport { useGlobalState } from \"../store\";\nimport type { WithTimingAnimation } from \"../types\";\nimport { dealWithAnimation } from \"../utils/deal-with-animation\";\n\ninterface Props {\n size: number;\n infinite?: boolean;\n testID?: string;\n style?: StyleProp<ViewStyle>;\n translation: Animated.SharedValue<number>;\n onLayout?: (e: LayoutChangeEvent) => void;\n onScrollStart?: () => void;\n onScrollEnd?: () => void;\n onTouchBegin?: () => void;\n onTouchEnd?: () => void;\n}\n\nconst IScrollViewGesture: React.FC<PropsWithChildren<Props>> = (props) => {\n const {\n props: {\n onConfigurePanGesture,\n vertical,\n pagingEnabled,\n snapEnabled,\n loop,\n scrollAnimationDuration,\n withAnimation,\n enabled,\n dataLength,\n overscrollEnabled,\n maxScrollDistancePerSwipe,\n minScrollDistancePerSwipe,\n fixedDirection,\n },\n common: { size },\n layout: { updateContainerSize },\n } = useGlobalState();\n\n const {\n translation,\n testID,\n style = {},\n onScrollStart,\n onScrollEnd,\n onTouchBegin,\n onTouchEnd,\n } = props;\n\n const maxPage = dataLength;\n const isHorizontal = useDerivedValue(() => !vertical, [vertical]);\n const max = useSharedValue(0);\n const panOffset = useSharedValue<number | undefined>(undefined); // set to undefined when not actively in a pan gesture\n const touching = useSharedValue(false);\n const validStart = useSharedValue(false);\n const scrollEndTranslation = useSharedValue(0);\n const scrollEndVelocity = useSharedValue(0);\n const containerRef = useAnimatedRef<Animated.View>();\n const maxScrollDistancePerSwipeIsSet = typeof maxScrollDistancePerSwipe === \"number\";\n const minScrollDistancePerSwipeIsSet = typeof minScrollDistancePerSwipe === \"number\";\n\n // Get the limit of the scroll.\n const getLimit = React.useCallback(() => {\n \"worklet\";\n\n if (!loop && !overscrollEnabled) {\n const measurement = measure(containerRef);\n const containerWidth = measurement?.width || 0;\n\n // If the item's total width is less than the container's width, then there is no need to scroll.\n if (dataLength * size < containerWidth) return 0;\n\n // Disable the \"overscroll\" effect\n return dataLength * size - containerWidth;\n }\n\n return dataLength * size;\n }, [loop, size, dataLength, overscrollEnabled]);\n\n const withSpring = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n \"worklet\";\n const defaultWithAnimation: WithTimingAnimation = {\n type: \"timing\",\n config: {\n duration: scrollAnimationDuration + 100,\n easing: Easing.easeOutQuart,\n },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n (isFinished: boolean) => {\n \"worklet\";\n if (isFinished) onFinished && runOnJS(onFinished)();\n }\n );\n },\n [scrollAnimationDuration, withAnimation]\n );\n\n const endWithSpring = React.useCallback(\n (\n scrollEndTranslationValue: number,\n scrollEndVelocityValue: number,\n onFinished?: () => void\n ) => {\n \"worklet\";\n const origin = translation.value;\n const velocity = scrollEndVelocityValue;\n // Default to scroll in the direction of the slide (with deceleration)\n let finalTranslation: number = withDecay({ velocity, deceleration: 0.999 });\n\n // If the distance of the swipe exceeds the max scroll distance, keep the view at the current position\n if (\n maxScrollDistancePerSwipeIsSet &&\n Math.abs(scrollEndTranslationValue) > maxScrollDistancePerSwipe\n ) {\n finalTranslation = origin;\n } else {\n /**\n * The page size is the same as the item size.\n * If direction is vertical, the page size is the height of the item.\n * If direction is horizontal, the page size is the width of the item.\n *\n * `page size` equals to `size` variable.\n * */\n\n // calculate target \"nextPage\" based on the final pan position and the velocity of\n // the pan gesture at termination; this allows for a quick \"flick\" to indicate a far\n // off page change.\n const nextPage = -Math.round((origin + velocity * 2) / size);\n\n if (pagingEnabled) {\n // we'll never go further than a single page away from the current page when paging\n // is enabled.\n\n // distance with direction\n const offset = -(scrollEndTranslationValue >= 0 ? 1 : -1); // 1 or -1\n const computed = offset < 0 ? Math.ceil : Math.floor;\n const page = computed(-origin / size);\n\n const velocityDirection = -Math.sign(velocity);\n if (page === nextPage || velocityDirection !== offset) {\n // not going anywhere! Velocity was insufficient to overcome the distance to get to a\n // further page. Let's reset gently to the current page.\n finalTranslation = withSpring(withProcessTranslation(-page * size), onFinished);\n } else if (loop) {\n const finalPage = page + offset;\n finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);\n } else {\n const finalPage = Math.min(maxPage - 1, Math.max(0, page + offset));\n finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);\n }\n }\n\n if (!pagingEnabled && snapEnabled) {\n // scroll to the nearest item\n finalTranslation = withSpring(withProcessTranslation(-nextPage * size), onFinished);\n }\n }\n\n translation.value = finalTranslation;\n\n function withProcessTranslation(translation: number) {\n if (!loop && !overscrollEnabled) {\n const limit = getLimit();\n const sign = Math.sign(translation);\n return sign * Math.max(0, Math.min(limit, Math.abs(translation)));\n }\n\n return translation;\n }\n },\n [\n withSpring,\n size,\n maxPage,\n loop,\n snapEnabled,\n translation,\n pagingEnabled,\n maxScrollDistancePerSwipe,\n maxScrollDistancePerSwipeIsSet,\n ]\n );\n\n const onFinish = React.useCallback(\n (isFinished: boolean) => {\n \"worklet\";\n if (isFinished) {\n touching.value = false;\n onScrollEnd && runOnJS(onScrollEnd)();\n }\n },\n [onScrollEnd, touching]\n );\n\n const activeDecay = React.useCallback(() => {\n \"worklet\";\n touching.value = true;\n translation.value = withDecay({ velocity: scrollEndVelocity.value }, (isFinished) =>\n onFinish(isFinished as boolean)\n );\n }, [onFinish, scrollEndVelocity, touching, translation]);\n\n const resetBoundary = React.useCallback(() => {\n \"worklet\";\n if (touching.value) return;\n\n if (translation.value > 0) {\n if (scrollEndTranslation.value < 0) {\n activeDecay();\n return;\n }\n if (!loop) {\n translation.value = withSpring(0);\n return;\n }\n }\n\n if (translation.value < -((maxPage - 1) * size)) {\n if (scrollEndTranslation.value > 0) {\n activeDecay();\n return;\n }\n if (!loop) translation.value = withSpring(-((maxPage - 1) * size));\n }\n }, [touching, translation, maxPage, size, scrollEndTranslation, loop, activeDecay, withSpring]);\n\n useAnimatedReaction(\n () => translation.value,\n () => {\n if (!pagingEnabled) resetBoundary();\n },\n [pagingEnabled, resetBoundary]\n );\n\n function withProcessTranslation(translation: number) {\n \"worklet\";\n\n if (!loop && !overscrollEnabled) {\n const limit = getLimit();\n const sign = Math.sign(translation);\n return sign * Math.max(0, Math.min(limit, Math.abs(translation)));\n }\n\n return translation;\n }\n\n const onGestureStart = useCallback(\n (_: PanGestureHandlerEventPayload) => {\n \"worklet\";\n\n touching.value = true;\n validStart.value = true;\n onScrollStart && runOnJS(onScrollStart)();\n\n max.value = (maxPage - 1) * size;\n if (!loop && !overscrollEnabled) max.value = getLimit();\n\n panOffset.value = translation.value;\n },\n [\n max,\n size,\n maxPage,\n loop,\n touching,\n panOffset,\n validStart,\n translation,\n overscrollEnabled,\n getLimit,\n onScrollStart,\n ]\n );\n\n const onGestureUpdate = useCallback(\n (e: PanGestureHandlerEventPayload) => {\n \"worklet\";\n\n if (panOffset.value === undefined) {\n // This may happen if `onGestureStart` is called as a part of the\n // JS thread (instead of the UI thread / worklet). If so, when\n // `onGestureStart` sets panOffset.value, the set will be asynchronous,\n // and so it may not actually occur before `onGestureUpdate` is called.\n //\n // Keeping this value as `undefined` when it is not active protects us\n // from the situation where we may use the previous value for panOffset\n // instead; this would cause a visual flicker in the carousel.\n\n // console.warn(\"onGestureUpdate: panOffset is undefined\");\n return;\n }\n\n if (validStart.value) {\n validStart.value = false;\n cancelAnimation(translation);\n }\n touching.value = true;\n const { translationX, translationY } = e;\n\n let panTranslation = isHorizontal.value ? translationX : translationY;\n\n if (fixedDirection === \"negative\") panTranslation = -Math.abs(panTranslation);\n else if (fixedDirection === \"positive\") panTranslation = +Math.abs(panTranslation);\n\n if (!loop) {\n if (translation.value > 0 || translation.value < -max.value) {\n const boundary = translation.value > 0 ? 0 : -max.value;\n const fixed = boundary - panOffset.value;\n const dynamic = panTranslation - fixed;\n translation.value = boundary + dynamic * 0.5;\n return;\n }\n }\n\n const translationValue = panOffset.value + panTranslation;\n translation.value = translationValue;\n },\n [\n isHorizontal,\n max,\n panOffset,\n loop,\n overscrollEnabled,\n fixedDirection,\n translation,\n validStart,\n touching,\n ]\n );\n\n const onGestureEnd = useCallback(\n (e: GestureStateChangeEvent<PanGestureHandlerEventPayload>, _success: boolean) => {\n \"worklet\";\n\n if (panOffset.value === undefined) {\n // console.warn(\"onGestureEnd: panOffset is undefined\");\n return;\n }\n\n const { velocityX, velocityY, translationX, translationY } = e;\n const scrollEndVelocityValue = isHorizontal.value ? velocityX : velocityY;\n scrollEndVelocity.value = scrollEndVelocityValue; // may update async: see https://docs.swmansion.com/react-native-reanimated/docs/core/useSharedValue#remarks\n\n let panTranslation = isHorizontal.value ? translationX : translationY;\n\n if (fixedDirection === \"negative\") panTranslation = -Math.abs(panTranslation);\n else if (fixedDirection === \"positive\") panTranslation = +Math.abs(panTranslation);\n\n scrollEndTranslation.value = panTranslation; // may update async: see https://docs.swmansion.com/react-native-reanimated/docs/core/useSharedValue#remarks\n\n const totalTranslation = scrollEndVelocityValue + panTranslation;\n\n /**\n * If the maximum scroll distance is set and the translation `exceeds the maximum scroll distance`,\n * the carousel will keep the view at the current position.\n */\n if (\n maxScrollDistancePerSwipeIsSet &&\n Math.abs(totalTranslation) > maxScrollDistancePerSwipe\n ) {\n const nextPage =\n Math.round(\n (panOffset.value + maxScrollDistancePerSwipe * Math.sign(totalTranslation)) / size\n ) * size;\n translation.value = withSpring(withProcessTranslation(nextPage), onScrollEnd);\n } else if (\n /**\n * If the minimum scroll distance is set and the translation `didn't exceeds the minimum scroll distance`,\n * the carousel will keep the view at the current position.\n */\n minScrollDistancePerSwipeIsSet &&\n Math.abs(totalTranslation) < minScrollDistancePerSwipe\n ) {\n const nextPage =\n Math.round(\n (panOffset.value + minScrollDistancePerSwipe * Math.sign(totalTranslation)) / size\n ) * size;\n translation.value = withSpring(withProcessTranslation(nextPage), onScrollEnd);\n } else {\n endWithSpring(panTranslation, scrollEndVelocityValue, onScrollEnd);\n }\n\n if (!loop) touching.value = false;\n\n panOffset.value = undefined;\n },\n [\n size,\n loop,\n touching,\n panOffset,\n translation,\n isHorizontal,\n scrollEndVelocity,\n scrollEndTranslation,\n fixedDirection,\n maxScrollDistancePerSwipeIsSet,\n maxScrollDistancePerSwipe,\n maxScrollDistancePerSwipeIsSet,\n minScrollDistancePerSwipe,\n endWithSpring,\n withSpring,\n onScrollEnd,\n ]\n );\n\n const gesture = usePanGestureProxy({\n onConfigurePanGesture,\n onGestureStart,\n onGestureUpdate,\n onGestureEnd,\n options: { enabled },\n });\n\n const onLayout = React.useCallback(\n (e: LayoutChangeEvent) => {\n \"worklet\";\n updateContainerSize({\n width: e.nativeEvent.layout.width,\n height: e.nativeEvent.layout.height,\n });\n },\n [updateContainerSize]\n );\n\n return (\n <GestureDetector gesture={gesture}>\n <Animated.View\n ref={containerRef}\n testID={testID}\n style={style}\n onTouchStart={onTouchBegin}\n onTouchEnd={onTouchEnd}\n onLayout={onLayout}\n >\n {props.children}\n </Animated.View>\n </GestureDetector>\n );\n};\n\nexport const ScrollViewGesture = IScrollViewGesture;\n"]}
|
|
@@ -1,45 +1,2 @@
|
|
|
1
|
-
"
|
|
2
|
-
|
|
3
|
-
var _react = _interopRequireDefault(require("react"));
|
|
4
|
-
|
|
5
|
-
var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
|
|
6
|
-
|
|
7
|
-
var _reactTestRenderer = _interopRequireDefault(require("react-test-renderer"));
|
|
8
|
-
|
|
9
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
10
|
-
|
|
11
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
12
|
-
|
|
13
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
|
-
|
|
15
|
-
describe("useSharedValue", () => {
|
|
16
|
-
it("retains value on rerender", () => {
|
|
17
|
-
const initialValue = 0;
|
|
18
|
-
const updatedValue = 1;
|
|
19
|
-
|
|
20
|
-
const TestComponent = props => {
|
|
21
|
-
const opacity = (0, _reactNativeReanimated.useDerivedValue)(() => props.value, [props.value]);
|
|
22
|
-
const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({
|
|
23
|
-
opacity: opacity.value
|
|
24
|
-
}), [opacity]);
|
|
25
|
-
return /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
|
|
26
|
-
style: animatedStyle
|
|
27
|
-
});
|
|
28
|
-
}; // When rendering with initial value
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const wrapper = _reactTestRenderer.default.create( /*#__PURE__*/_react.default.createElement(TestComponent, {
|
|
32
|
-
key: "box",
|
|
33
|
-
value: initialValue
|
|
34
|
-
}));
|
|
35
|
-
|
|
36
|
-
expect(typeof wrapper.root.children[0] !== "string" ? wrapper.root.children[0].props.style.jestAnimatedStyle.current.value.opacity : false).toBe(initialValue); // When rendering with updated value
|
|
37
|
-
|
|
38
|
-
wrapper.update( /*#__PURE__*/_react.default.createElement(TestComponent, {
|
|
39
|
-
key: "box",
|
|
40
|
-
value: updatedValue
|
|
41
|
-
}));
|
|
42
|
-
expect(typeof wrapper.root.children[0] !== "string" ? wrapper.root.children[0].props.style.jestAnimatedStyle.current.value.opacity : false).toBe(initialValue);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
1
|
+
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _react=_interopRequireDefault(require("react"));var _reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated"));var _reactTestRenderer=_interopRequireDefault(require("react-test-renderer"));var _jsxRuntime=require("react/jsx-runtime");var _this=this,_jsxFileName="/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/components/rnr-demo.test.tsx";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var _worklet_17255320597305_init_data={code:"function anonymous(){const{props}=this.__closure;return props.value;}",location:"/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/components/rnr-demo.test.tsx",sourceMap:"{\"version\":3,\"mappings\":\"AAgBsC,QAAAA,UAAA,qCAAMC,MAAMC,MAAZ\",\"names\":[\"anonymous\",\"props\",\"value\"],\"sources\":[\"/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/components/rnr-demo.test.tsx\"]}",version:"3.10.1"};var _worklet_8964404333244_init_data={code:"function anonymous(){const{opacity}=this.__closure;return{opacity:opacity.value};}",location:"/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/components/rnr-demo.test.tsx",sourceMap:"{\"version\":3,\"mappings\":\"AAkBQ,QAAAA,UAAA,uCAAO,CACLC,OAAO,CAAEA,OAAO,CAACC,KADZ,CAAP\",\"names\":[\"anonymous\",\"opacity\",\"value\"],\"sources\":[\"/home/runner/work/react-native-reanimated-carousel/react-native-reanimated-carousel/src/components/rnr-demo.test.tsx\"]}",version:"3.10.1"};describe("useSharedValue",function(){it("retains value on rerender",function(){var initialValue=0;var updatedValue=1;var TestComponent=function TestComponent(props){var opacity=(0,_reactNativeReanimated.useDerivedValue)(function(){var _e=[new global.Error(),-2,-27];var anonymous=function anonymous(){return props.value;};anonymous.__closure={props:props};anonymous.__workletHash=17255320597305;anonymous.__initData=_worklet_17255320597305_init_data;anonymous.__stackDetails=_e;return anonymous;}(),[props.value]);var animatedStyle=(0,_reactNativeReanimated.useAnimatedStyle)(function(){var _e=[new global.Error(),-2,-27];var anonymous=function anonymous(){return{opacity:opacity.value};};anonymous.__closure={opacity:opacity};anonymous.__workletHash=8964404333244;anonymous.__initData=_worklet_8964404333244_init_data;anonymous.__stackDetails=_e;return anonymous;}(),[opacity]);return(0,_jsxRuntime.jsx)(_reactNativeReanimated.default.View,{style:animatedStyle});};var wrapper=_reactTestRenderer.default.create((0,_jsxRuntime.jsx)(TestComponent,{value:initialValue},"box"));expect(typeof wrapper.root.children[0]!=="string"?wrapper.root.children[0].props.style.jestAnimatedStyle.current.value.opacity:false).toBe(initialValue);wrapper.update((0,_jsxRuntime.jsx)(TestComponent,{value:updatedValue},"box"));expect(typeof wrapper.root.children[0]!=="string"?wrapper.root.children[0].props.style.jestAnimatedStyle.current.value.opacity:false).toBe(initialValue);});});
|
|
45
2
|
//# sourceMappingURL=rnr-demo.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["rnr-demo.test.tsx"],"names":["describe","it","initialValue","updatedValue","TestComponent","props","opacity","value","animatedStyle","wrapper","renderer","create","expect","root","children","style","jestAnimatedStyle","current","toBe","update"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["rnr-demo.test.tsx"],"names":["describe","it","initialValue","updatedValue","TestComponent","props","opacity","value","animatedStyle","wrapper","renderer","create","expect","root","children","style","jestAnimatedStyle","current","toBe","update"],"mappings":"mFACA,oDACA,uFACA,8E,yvEAEAA,QAAQ,CAAC,gBAAD,CAAmB,UAAM,CAC/BC,EAAE,CAAC,2BAAD,CAA8B,UAAM,CACpC,GAAMC,CAAAA,YAAY,CAAG,CAArB,CACA,GAAMC,CAAAA,YAAY,CAAG,CAArB,CAOA,GAAMC,CAAAA,aAAwB,CAAG,QAA3BA,CAAAA,aAA2B,CAACC,KAAD,CAAW,CAC1C,GAAMC,CAAAA,OAAO,CAAG,2CAAgB,uFAAMD,CAAAA,KAAK,CAACE,KAAZ,8BAAMF,KAAN,8IAAhB,GAAmC,CAACA,KAAK,CAACE,KAAP,CAAnC,CAAhB,CACA,GAAMC,CAAAA,aAAa,CAAG,4CACpB,uFAAO,CACLF,OAAO,CAAEA,OAAO,CAACC,KADZ,CAAP,gCACWD,OADX,4IADoB,GAIpB,CAACA,OAAD,CAJoB,CAAtB,CAOA,MAAO,oBAAC,8BAAD,CAAU,IAAV,EAAe,KAAK,CAAEE,aAAtB,EAAP,CACD,CAVD,CAaA,GAAMC,CAAAA,OAAO,CAAGC,2BAASC,MAAT,CAAgB,oBAAC,aAAD,EAAyB,KAAK,CAAET,YAAhC,EAAmB,KAAnB,CAAhB,CAAhB,CAEAU,MAAM,CACJ,MAAOH,CAAAA,OAAO,CAACI,IAAR,CAAaC,QAAb,CAAsB,CAAtB,CAAP,GAAoC,QAApC,CACIL,OAAO,CAACI,IAAR,CAAaC,QAAb,CAAsB,CAAtB,EAAyBT,KAAzB,CAA+BU,KAA/B,CAAqCC,iBAArC,CAAuDC,OAAvD,CAA+DV,KAA/D,CAAqED,OADzE,CAEI,KAHA,CAAN,CAIEY,IAJF,CAIOhB,YAJP,EAOAO,OAAO,CAACU,MAAR,CAAe,oBAAC,aAAD,EAAyB,KAAK,CAAEhB,YAAhC,EAAmB,KAAnB,CAAf,EAEAS,MAAM,CACJ,MAAOH,CAAAA,OAAO,CAACI,IAAR,CAAaC,QAAb,CAAsB,CAAtB,CAAP,GAAoC,QAApC,CACIL,OAAO,CAACI,IAAR,CAAaC,QAAb,CAAsB,CAAtB,EAAyBT,KAAzB,CAA+BU,KAA/B,CAAqCC,iBAArC,CAAuDC,OAAvD,CAA+DV,KAA/D,CAAqED,OADzE,CAEI,KAHA,CAAN,CAIEY,IAJF,CAIOhB,YAJP,EAKD,CAtCC,CAAF,CAuCD,CAxCO,CAAR","sourcesContent":["import type { FC } from \"react\";\nimport React from \"react\";\nimport Animated, { useAnimatedStyle, useDerivedValue } from \"react-native-reanimated\";\nimport renderer from \"react-test-renderer\";\n\ndescribe(\"useSharedValue\", () => {\n it(\"retains value on rerender\", () => {\n const initialValue = 0;\n const updatedValue = 1;\n\n interface Props {\n key: string;\n value: number;\n }\n\n const TestComponent: FC<Props> = (props) => {\n const opacity = useDerivedValue(() => props.value, [props.value]);\n const animatedStyle = useAnimatedStyle(\n () => ({\n opacity: opacity.value,\n }),\n [opacity]\n );\n\n return <Animated.View style={animatedStyle} />;\n };\n\n // When rendering with initial value\n const wrapper = renderer.create(<TestComponent key=\"box\" value={initialValue} />);\n\n expect(\n typeof wrapper.root.children[0] !== \"string\"\n ? wrapper.root.children[0].props.style.jestAnimatedStyle.current.value.opacity\n : false\n ).toBe(initialValue);\n\n // When rendering with updated value\n wrapper.update(<TestComponent key=\"box\" value={updatedValue} />);\n\n expect(\n typeof wrapper.root.children[0] !== \"string\"\n ? wrapper.root.children[0].props.style.jestAnimatedStyle.current.value.opacity\n : false\n ).toBe(initialValue);\n });\n});\n"]}
|
|
@@ -1,22 +1,2 @@
|
|
|
1
|
-
"
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.Easing = exports.DATA_LENGTH = void 0;
|
|
7
|
-
|
|
8
|
-
var _reactNativeReanimated = require("react-native-reanimated");
|
|
9
|
-
|
|
10
|
-
let DATA_LENGTH;
|
|
11
|
-
exports.DATA_LENGTH = DATA_LENGTH;
|
|
12
|
-
|
|
13
|
-
(function (DATA_LENGTH) {
|
|
14
|
-
DATA_LENGTH[DATA_LENGTH["SINGLE_ITEM"] = 1] = "SINGLE_ITEM";
|
|
15
|
-
DATA_LENGTH[DATA_LENGTH["DOUBLE_ITEM"] = 2] = "DOUBLE_ITEM";
|
|
16
|
-
})(DATA_LENGTH || (exports.DATA_LENGTH = DATA_LENGTH = {}));
|
|
17
|
-
|
|
18
|
-
const Easing = {
|
|
19
|
-
easeOutQuart: _reactNativeReanimated.Easing.bezier(0.25, 1, 0.5, 1)
|
|
20
|
-
};
|
|
21
|
-
exports.Easing = Easing;
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:true});exports.Easing=exports.DATA_LENGTH=void 0;var _reactNativeReanimated=require("react-native-reanimated");var DATA_LENGTH;exports.DATA_LENGTH=DATA_LENGTH;(function(DATA_LENGTH){DATA_LENGTH[DATA_LENGTH["SINGLE_ITEM"]=1]="SINGLE_ITEM";DATA_LENGTH[DATA_LENGTH["DOUBLE_ITEM"]=2]="DOUBLE_ITEM";})(DATA_LENGTH||(exports.DATA_LENGTH=DATA_LENGTH={}));var Easing={easeOutQuart:_reactNativeReanimated.Easing.bezier(0.25,1,0.5,1)};exports.Easing=Easing;
|
|
22
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"names":["DATA_LENGTH","Easing","easeOutQuart","_Easing","bezier"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":["DATA_LENGTH","Easing","easeOutQuart","_Easing","bezier"],"mappings":"mGACA,8D,GAEYA,CAAAA,W,2CAAAA,W,EAAAA,W,CAAAA,W,iCAAAA,W,CAAAA,W,oCAAAA,W,uBAAAA,W,MAKL,GAAMC,CAAAA,MAAM,CAAG,CACpBC,YAAY,CAAEC,8BAAQC,MAAR,CAAe,IAAf,CAAqB,CAArB,CAAwB,GAAxB,CAA6B,CAA7B,CADM,CAAf,C","sourcesContent":["import type Animated from \"react-native-reanimated\";\nimport { Easing as _Easing } from \"react-native-reanimated\";\n\nexport enum DATA_LENGTH {\n SINGLE_ITEM = 1,\n DOUBLE_ITEM = 2,\n}\n\nexport const Easing = {\n easeOutQuart: _Easing.bezier(0.25, 1, 0.5, 1) as unknown as Animated.EasingFunction,\n};\n"]}
|
|
@@ -1,57 +1,2 @@
|
|
|
1
|
-
"
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.useAutoPlay = useAutoPlay;
|
|
7
|
-
|
|
8
|
-
var React = _interopRequireWildcard(require("react"));
|
|
9
|
-
|
|
10
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
11
|
-
|
|
12
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
13
|
-
|
|
14
|
-
function useAutoPlay(opts) {
|
|
15
|
-
const {
|
|
16
|
-
autoPlay = false,
|
|
17
|
-
autoPlayReverse = false,
|
|
18
|
-
autoPlayInterval,
|
|
19
|
-
carouselController
|
|
20
|
-
} = opts;
|
|
21
|
-
const {
|
|
22
|
-
prev,
|
|
23
|
-
next
|
|
24
|
-
} = carouselController;
|
|
25
|
-
const timer = React.useRef();
|
|
26
|
-
const stopped = React.useRef(!autoPlay);
|
|
27
|
-
const play = React.useCallback(() => {
|
|
28
|
-
if (stopped.current) return;
|
|
29
|
-
timer.current && clearTimeout(timer.current);
|
|
30
|
-
timer.current = setTimeout(() => {
|
|
31
|
-
autoPlayReverse ? prev({
|
|
32
|
-
onFinished: play
|
|
33
|
-
}) : next({
|
|
34
|
-
onFinished: play
|
|
35
|
-
});
|
|
36
|
-
}, autoPlayInterval);
|
|
37
|
-
}, [autoPlayReverse, autoPlayInterval, prev, next]);
|
|
38
|
-
const pause = React.useCallback(() => {
|
|
39
|
-
if (!autoPlay) return;
|
|
40
|
-
timer.current && clearTimeout(timer.current);
|
|
41
|
-
stopped.current = true;
|
|
42
|
-
}, [autoPlay]);
|
|
43
|
-
const start = React.useCallback(() => {
|
|
44
|
-
if (!autoPlay) return;
|
|
45
|
-
stopped.current = false;
|
|
46
|
-
play();
|
|
47
|
-
}, [play, autoPlay]);
|
|
48
|
-
React.useEffect(() => {
|
|
49
|
-
if (autoPlay) start();else pause();
|
|
50
|
-
return pause;
|
|
51
|
-
}, [pause, start, autoPlay]);
|
|
52
|
-
return {
|
|
53
|
-
pause,
|
|
54
|
-
start
|
|
55
|
-
};
|
|
56
|
-
}
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:true});exports.useAutoPlay=useAutoPlay;var React=_interopRequireWildcard(require("react"));function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}function useAutoPlay(opts){var _opts$autoPlay=opts.autoPlay,autoPlay=_opts$autoPlay===void 0?false:_opts$autoPlay,_opts$autoPlayReverse=opts.autoPlayReverse,autoPlayReverse=_opts$autoPlayReverse===void 0?false:_opts$autoPlayReverse,autoPlayInterval=opts.autoPlayInterval,carouselController=opts.carouselController;var prev=carouselController.prev,next=carouselController.next;var timer=React.useRef();var stopped=React.useRef(!autoPlay);var play=React.useCallback(function(){if(stopped.current)return;timer.current&&clearTimeout(timer.current);timer.current=setTimeout(function(){autoPlayReverse?prev({onFinished:play}):next({onFinished:play});},autoPlayInterval);},[autoPlayReverse,autoPlayInterval,prev,next]);var pause=React.useCallback(function(){if(!autoPlay)return;timer.current&&clearTimeout(timer.current);stopped.current=true;},[autoPlay]);var start=React.useCallback(function(){if(!autoPlay)return;stopped.current=false;play();},[play,autoPlay]);React.useEffect(function(){if(autoPlay)start();else pause();return pause;},[pause,start,autoPlay]);return{pause:pause,start:start};}
|
|
57
2
|
//# sourceMappingURL=useAutoPlay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useAutoPlay.ts"],"names":["useAutoPlay","opts","autoPlay","autoPlayReverse","autoPlayInterval","carouselController","prev","next","timer","React","useRef","stopped","play","useCallback","current","clearTimeout","setTimeout","onFinished","pause","start","useEffect"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["useAutoPlay.ts"],"names":["useAutoPlay","opts","autoPlay","autoPlayReverse","autoPlayInterval","carouselController","prev","next","timer","React","useRef","stopped","play","useCallback","current","clearTimeout","setTimeout","onFinished","pause","start","useEffect"],"mappings":"yFAAA,oD,0/BAIO,QAASA,CAAAA,WAAT,CAAqBC,IAArB,CAKJ,CACD,mBAA4FA,IAA5F,CAAQC,QAAR,CAAQA,QAAR,yBAAmB,KAAnB,sCAA4FD,IAA5F,CAA0BE,eAA1B,CAA0BA,eAA1B,gCAA4C,KAA5C,uBAAmDC,gBAAnD,CAA4FH,IAA5F,CAAmDG,gBAAnD,CAAqEC,kBAArE,CAA4FJ,IAA5F,CAAqEI,kBAArE,CAEA,GAAQC,CAAAA,IAAR,CAAuBD,kBAAvB,CAAQC,IAAR,CAAcC,IAAd,CAAuBF,kBAAvB,CAAcE,IAAd,CACA,GAAMC,CAAAA,KAAK,CAAGC,KAAK,CAACC,MAAN,EAAd,CACA,GAAMC,CAAAA,OAAO,CAAGF,KAAK,CAACC,MAAN,CAAsB,CAACR,QAAvB,CAAhB,CAEA,GAAMU,CAAAA,IAAI,CAAGH,KAAK,CAACI,WAAN,CAAkB,UAAM,CACnC,GAAIF,OAAO,CAACG,OAAZ,CAAqB,OAErBN,KAAK,CAACM,OAAN,EAAiBC,YAAY,CAACP,KAAK,CAACM,OAAP,CAA7B,CACAN,KAAK,CAACM,OAAN,CAAgBE,UAAU,CAAC,UAAM,CAC/Bb,eAAe,CAAGG,IAAI,CAAC,CAAEW,UAAU,CAAEL,IAAd,CAAD,CAAP,CAAgCL,IAAI,CAAC,CAAEU,UAAU,CAAEL,IAAd,CAAD,CAAnD,CACD,CAFyB,CAEvBR,gBAFuB,CAA1B,CAGD,CAPY,CAOV,CAACD,eAAD,CAAkBC,gBAAlB,CAAoCE,IAApC,CAA0CC,IAA1C,CAPU,CAAb,CASA,GAAMW,CAAAA,KAAK,CAAGT,KAAK,CAACI,WAAN,CAAkB,UAAM,CACpC,GAAI,CAACX,QAAL,CAAe,OAEfM,KAAK,CAACM,OAAN,EAAiBC,YAAY,CAACP,KAAK,CAACM,OAAP,CAA7B,CACAH,OAAO,CAACG,OAAR,CAAkB,IAAlB,CACD,CALa,CAKX,CAACZ,QAAD,CALW,CAAd,CAOA,GAAMiB,CAAAA,KAAK,CAAGV,KAAK,CAACI,WAAN,CAAkB,UAAM,CACpC,GAAI,CAACX,QAAL,CAAe,OAEfS,OAAO,CAACG,OAAR,CAAkB,KAAlB,CACAF,IAAI,GACL,CALa,CAKX,CAACA,IAAD,CAAOV,QAAP,CALW,CAAd,CAOAO,KAAK,CAACW,SAAN,CAAgB,UAAM,CACpB,GAAIlB,QAAJ,CAAciB,KAAK,GAAnB,IACKD,CAAAA,KAAK,GAEV,MAAOA,CAAAA,KAAP,CACD,CALD,CAKG,CAACA,KAAD,CAAQC,KAAR,CAAejB,QAAf,CALH,EAOA,MAAO,CACLgB,KAAK,CAALA,KADK,CAELC,KAAK,CAALA,KAFK,CAAP,CAID","sourcesContent":["import * as React from \"react\";\n\nimport type { ICarouselController } from \"./useCarouselController\";\n\nexport function useAutoPlay(opts: {\n autoPlay?: boolean;\n autoPlayInterval?: number;\n autoPlayReverse?: boolean;\n carouselController: ICarouselController;\n}) {\n const { autoPlay = false, autoPlayReverse = false, autoPlayInterval, carouselController } = opts;\n\n const { prev, next } = carouselController;\n const timer = React.useRef<ReturnType<typeof setTimeout>>();\n const stopped = React.useRef<boolean>(!autoPlay);\n\n const play = React.useCallback(() => {\n if (stopped.current) return;\n\n timer.current && clearTimeout(timer.current);\n timer.current = setTimeout(() => {\n autoPlayReverse ? prev({ onFinished: play }) : next({ onFinished: play });\n }, autoPlayInterval);\n }, [autoPlayReverse, autoPlayInterval, prev, next]);\n\n const pause = React.useCallback(() => {\n if (!autoPlay) return;\n\n timer.current && clearTimeout(timer.current);\n stopped.current = true;\n }, [autoPlay]);\n\n const start = React.useCallback(() => {\n if (!autoPlay) return;\n\n stopped.current = false;\n play();\n }, [play, autoPlay]);\n\n React.useEffect(() => {\n if (autoPlay) start();\n else pause();\n\n return pause;\n }, [pause, start, autoPlay]);\n\n return {\n pause,\n start,\n };\n}\n"]}
|
|
@@ -1,155 +1,2 @@
|
|
|
1
|
-
"
|
|
2
|
-
|
|
3
|
-
var _reactHooks = require("@testing-library/react-hooks");
|
|
4
|
-
|
|
5
|
-
var _useAutoPlay = require("./useAutoPlay");
|
|
6
|
-
|
|
7
|
-
describe("useAutoPlay", () => {
|
|
8
|
-
// Mock timer
|
|
9
|
-
beforeEach(() => {
|
|
10
|
-
jest.useFakeTimers();
|
|
11
|
-
jest.clearAllMocks();
|
|
12
|
-
});
|
|
13
|
-
afterEach(() => {
|
|
14
|
-
jest.clearAllTimers();
|
|
15
|
-
jest.useRealTimers();
|
|
16
|
-
}); // Mock carousel controller
|
|
17
|
-
|
|
18
|
-
const mockCarouselController = {
|
|
19
|
-
prev: jest.fn(),
|
|
20
|
-
next: jest.fn(),
|
|
21
|
-
getCurrentIndex: jest.fn(),
|
|
22
|
-
getSharedIndex: jest.fn(),
|
|
23
|
-
scrollTo: jest.fn()
|
|
24
|
-
};
|
|
25
|
-
it("should start autoplay when autoPlay is true", () => {
|
|
26
|
-
(0, _reactHooks.renderHook)(() => (0, _useAutoPlay.useAutoPlay)({
|
|
27
|
-
autoPlay: true,
|
|
28
|
-
autoPlayInterval: 1000,
|
|
29
|
-
carouselController: mockCarouselController
|
|
30
|
-
}));
|
|
31
|
-
(0, _reactHooks.act)(() => {
|
|
32
|
-
jest.runOnlyPendingTimers();
|
|
33
|
-
});
|
|
34
|
-
expect(mockCarouselController.next).toHaveBeenCalledTimes(1);
|
|
35
|
-
expect(mockCarouselController.next).toHaveBeenCalledWith(expect.objectContaining({
|
|
36
|
-
onFinished: expect.any(Function)
|
|
37
|
-
}));
|
|
38
|
-
});
|
|
39
|
-
it("should not start autoplay when autoPlay is false", () => {
|
|
40
|
-
(0, _reactHooks.renderHook)(() => (0, _useAutoPlay.useAutoPlay)({
|
|
41
|
-
autoPlay: false,
|
|
42
|
-
autoPlayInterval: 1000,
|
|
43
|
-
carouselController: mockCarouselController
|
|
44
|
-
}));
|
|
45
|
-
(0, _reactHooks.act)(() => {
|
|
46
|
-
jest.runOnlyPendingTimers();
|
|
47
|
-
});
|
|
48
|
-
expect(mockCarouselController.next).not.toHaveBeenCalled();
|
|
49
|
-
});
|
|
50
|
-
it("should play in reverse when autoPlayReverse is true", () => {
|
|
51
|
-
(0, _reactHooks.renderHook)(() => (0, _useAutoPlay.useAutoPlay)({
|
|
52
|
-
autoPlay: true,
|
|
53
|
-
autoPlayReverse: true,
|
|
54
|
-
autoPlayInterval: 1000,
|
|
55
|
-
carouselController: mockCarouselController
|
|
56
|
-
}));
|
|
57
|
-
(0, _reactHooks.act)(() => {
|
|
58
|
-
jest.runOnlyPendingTimers();
|
|
59
|
-
});
|
|
60
|
-
expect(mockCarouselController.prev).toHaveBeenCalledTimes(1);
|
|
61
|
-
expect(mockCarouselController.next).not.toHaveBeenCalled();
|
|
62
|
-
});
|
|
63
|
-
it("should clear timer on unmount", () => {
|
|
64
|
-
const {
|
|
65
|
-
unmount
|
|
66
|
-
} = (0, _reactHooks.renderHook)(() => (0, _useAutoPlay.useAutoPlay)({
|
|
67
|
-
autoPlay: true,
|
|
68
|
-
autoPlayInterval: 1000,
|
|
69
|
-
carouselController: mockCarouselController
|
|
70
|
-
})); // Run the timer once to ensure it's set
|
|
71
|
-
|
|
72
|
-
(0, _reactHooks.act)(() => {
|
|
73
|
-
jest.runOnlyPendingTimers();
|
|
74
|
-
}); // Clear previous call records
|
|
75
|
-
|
|
76
|
-
mockCarouselController.next.mockClear(); // Then unmount the component and run the timer again
|
|
77
|
-
|
|
78
|
-
(0, _reactHooks.act)(() => {
|
|
79
|
-
unmount();
|
|
80
|
-
jest.runOnlyPendingTimers();
|
|
81
|
-
});
|
|
82
|
-
expect(mockCarouselController.next).not.toHaveBeenCalled();
|
|
83
|
-
});
|
|
84
|
-
it("should pause and resume autoplay", () => {
|
|
85
|
-
const {
|
|
86
|
-
result
|
|
87
|
-
} = (0, _reactHooks.renderHook)(() => (0, _useAutoPlay.useAutoPlay)({
|
|
88
|
-
autoPlay: true,
|
|
89
|
-
autoPlayInterval: 1000,
|
|
90
|
-
carouselController: mockCarouselController
|
|
91
|
-
})); // Run the timer once to ensure it's set
|
|
92
|
-
|
|
93
|
-
(0, _reactHooks.act)(() => {
|
|
94
|
-
jest.runOnlyPendingTimers();
|
|
95
|
-
}); // Clear previous call records
|
|
96
|
-
|
|
97
|
-
mockCarouselController.next.mockClear(); // Pause autoplay
|
|
98
|
-
|
|
99
|
-
(0, _reactHooks.act)(() => {
|
|
100
|
-
result.current.pause();
|
|
101
|
-
jest.runOnlyPendingTimers();
|
|
102
|
-
});
|
|
103
|
-
expect(mockCarouselController.next).not.toHaveBeenCalled(); // Resume autoplay
|
|
104
|
-
|
|
105
|
-
(0, _reactHooks.act)(() => {
|
|
106
|
-
result.current.start();
|
|
107
|
-
jest.runOnlyPendingTimers();
|
|
108
|
-
});
|
|
109
|
-
expect(mockCarouselController.next).toHaveBeenCalledTimes(1);
|
|
110
|
-
});
|
|
111
|
-
it("should respect autoPlayInterval timing", () => {
|
|
112
|
-
(0, _reactHooks.renderHook)(() => (0, _useAutoPlay.useAutoPlay)({
|
|
113
|
-
autoPlay: true,
|
|
114
|
-
autoPlayInterval: 2000,
|
|
115
|
-
carouselController: mockCarouselController
|
|
116
|
-
})); // Advance less than interval
|
|
117
|
-
|
|
118
|
-
(0, _reactHooks.act)(() => {
|
|
119
|
-
jest.advanceTimersByTime(1500);
|
|
120
|
-
});
|
|
121
|
-
expect(mockCarouselController.next).not.toHaveBeenCalled(); // Advance to complete interval
|
|
122
|
-
|
|
123
|
-
(0, _reactHooks.act)(() => {
|
|
124
|
-
jest.advanceTimersByTime(500);
|
|
125
|
-
});
|
|
126
|
-
expect(mockCarouselController.next).toHaveBeenCalledTimes(1);
|
|
127
|
-
});
|
|
128
|
-
it("should chain autoplay calls correctly", () => {
|
|
129
|
-
(0, _reactHooks.renderHook)(() => (0, _useAutoPlay.useAutoPlay)({
|
|
130
|
-
autoPlay: true,
|
|
131
|
-
autoPlayInterval: 1000,
|
|
132
|
-
carouselController: mockCarouselController
|
|
133
|
-
})); // First interval
|
|
134
|
-
|
|
135
|
-
(0, _reactHooks.act)(() => {
|
|
136
|
-
jest.runOnlyPendingTimers();
|
|
137
|
-
});
|
|
138
|
-
expect(mockCarouselController.next).toHaveBeenCalledTimes(1); // Trigger onFinished callback to start the next timer
|
|
139
|
-
|
|
140
|
-
const onFinished = mockCarouselController.next.mock.calls[0][0].onFinished;
|
|
141
|
-
(0, _reactHooks.act)(() => {
|
|
142
|
-
onFinished();
|
|
143
|
-
jest.runOnlyPendingTimers();
|
|
144
|
-
});
|
|
145
|
-
expect(mockCarouselController.next).toHaveBeenCalledTimes(2); // Trigger onFinished callback to start the next timer
|
|
146
|
-
|
|
147
|
-
const onFinished2 = mockCarouselController.next.mock.calls[1][0].onFinished;
|
|
148
|
-
(0, _reactHooks.act)(() => {
|
|
149
|
-
onFinished2();
|
|
150
|
-
jest.runOnlyPendingTimers();
|
|
151
|
-
});
|
|
152
|
-
expect(mockCarouselController.next).toHaveBeenCalledTimes(3);
|
|
153
|
-
});
|
|
154
|
-
});
|
|
1
|
+
var _reactHooks=require("@testing-library/react-hooks");var _useAutoPlay=require("./useAutoPlay");describe("useAutoPlay",function(){beforeEach(function(){jest.useFakeTimers();jest.clearAllMocks();});afterEach(function(){jest.clearAllTimers();jest.useRealTimers();});var mockCarouselController={prev:jest.fn(),next:jest.fn(),getCurrentIndex:jest.fn(),getSharedIndex:jest.fn(),scrollTo:jest.fn()};it("should start autoplay when autoPlay is true",function(){(0,_reactHooks.renderHook)(function(){return(0,_useAutoPlay.useAutoPlay)({autoPlay:true,autoPlayInterval:1000,carouselController:mockCarouselController});});(0,_reactHooks.act)(function(){jest.runOnlyPendingTimers();});expect(mockCarouselController.next).toHaveBeenCalledTimes(1);expect(mockCarouselController.next).toHaveBeenCalledWith(expect.objectContaining({onFinished:expect.any(Function)}));});it("should not start autoplay when autoPlay is false",function(){(0,_reactHooks.renderHook)(function(){return(0,_useAutoPlay.useAutoPlay)({autoPlay:false,autoPlayInterval:1000,carouselController:mockCarouselController});});(0,_reactHooks.act)(function(){jest.runOnlyPendingTimers();});expect(mockCarouselController.next).not.toHaveBeenCalled();});it("should play in reverse when autoPlayReverse is true",function(){(0,_reactHooks.renderHook)(function(){return(0,_useAutoPlay.useAutoPlay)({autoPlay:true,autoPlayReverse:true,autoPlayInterval:1000,carouselController:mockCarouselController});});(0,_reactHooks.act)(function(){jest.runOnlyPendingTimers();});expect(mockCarouselController.prev).toHaveBeenCalledTimes(1);expect(mockCarouselController.next).not.toHaveBeenCalled();});it("should clear timer on unmount",function(){var _renderHook=(0,_reactHooks.renderHook)(function(){return(0,_useAutoPlay.useAutoPlay)({autoPlay:true,autoPlayInterval:1000,carouselController:mockCarouselController});}),unmount=_renderHook.unmount;(0,_reactHooks.act)(function(){jest.runOnlyPendingTimers();});mockCarouselController.next.mockClear();(0,_reactHooks.act)(function(){unmount();jest.runOnlyPendingTimers();});expect(mockCarouselController.next).not.toHaveBeenCalled();});it("should pause and resume autoplay",function(){var _renderHook2=(0,_reactHooks.renderHook)(function(){return(0,_useAutoPlay.useAutoPlay)({autoPlay:true,autoPlayInterval:1000,carouselController:mockCarouselController});}),result=_renderHook2.result;(0,_reactHooks.act)(function(){jest.runOnlyPendingTimers();});mockCarouselController.next.mockClear();(0,_reactHooks.act)(function(){result.current.pause();jest.runOnlyPendingTimers();});expect(mockCarouselController.next).not.toHaveBeenCalled();(0,_reactHooks.act)(function(){result.current.start();jest.runOnlyPendingTimers();});expect(mockCarouselController.next).toHaveBeenCalledTimes(1);});it("should respect autoPlayInterval timing",function(){(0,_reactHooks.renderHook)(function(){return(0,_useAutoPlay.useAutoPlay)({autoPlay:true,autoPlayInterval:2000,carouselController:mockCarouselController});});(0,_reactHooks.act)(function(){jest.advanceTimersByTime(1500);});expect(mockCarouselController.next).not.toHaveBeenCalled();(0,_reactHooks.act)(function(){jest.advanceTimersByTime(500);});expect(mockCarouselController.next).toHaveBeenCalledTimes(1);});it("should chain autoplay calls correctly",function(){(0,_reactHooks.renderHook)(function(){return(0,_useAutoPlay.useAutoPlay)({autoPlay:true,autoPlayInterval:1000,carouselController:mockCarouselController});});(0,_reactHooks.act)(function(){jest.runOnlyPendingTimers();});expect(mockCarouselController.next).toHaveBeenCalledTimes(1);var onFinished=mockCarouselController.next.mock.calls[0][0].onFinished;(0,_reactHooks.act)(function(){onFinished();jest.runOnlyPendingTimers();});expect(mockCarouselController.next).toHaveBeenCalledTimes(2);var onFinished2=mockCarouselController.next.mock.calls[1][0].onFinished;(0,_reactHooks.act)(function(){onFinished2();jest.runOnlyPendingTimers();});expect(mockCarouselController.next).toHaveBeenCalledTimes(3);});});
|
|
155
2
|
//# sourceMappingURL=useAutoPlay.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useAutoPlay.test.ts"],"names":["describe","beforeEach","jest","useFakeTimers","clearAllMocks","afterEach","clearAllTimers","useRealTimers","mockCarouselController","prev","fn","next","getCurrentIndex","getSharedIndex","scrollTo","it","autoPlay","autoPlayInterval","carouselController","runOnlyPendingTimers","expect","toHaveBeenCalledTimes","toHaveBeenCalledWith","objectContaining","onFinished","any","Function","not","toHaveBeenCalled","autoPlayReverse","unmount","mockClear","result","current","pause","start","advanceTimersByTime","mock","calls","onFinished2"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["useAutoPlay.test.ts"],"names":["describe","beforeEach","jest","useFakeTimers","clearAllMocks","afterEach","clearAllTimers","useRealTimers","mockCarouselController","prev","fn","next","getCurrentIndex","getSharedIndex","scrollTo","it","autoPlay","autoPlayInterval","carouselController","runOnlyPendingTimers","expect","toHaveBeenCalledTimes","toHaveBeenCalledWith","objectContaining","onFinished","any","Function","not","toHaveBeenCalled","autoPlayReverse","unmount","mockClear","result","current","pause","start","advanceTimersByTime","mock","calls","onFinished2"],"mappings":"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","sourcesContent":["import { act, renderHook } from \"@testing-library/react-hooks\";\n\nimport { useAutoPlay } from \"./useAutoPlay\";\n\ndescribe(\"useAutoPlay\", () => {\n // Mock timer\n beforeEach(() => {\n jest.useFakeTimers();\n jest.clearAllMocks();\n });\n\n afterEach(() => {\n jest.clearAllTimers();\n jest.useRealTimers();\n });\n\n // Mock carousel controller\n const mockCarouselController = {\n prev: jest.fn(),\n next: jest.fn(),\n getCurrentIndex: jest.fn(),\n getSharedIndex: jest.fn(),\n scrollTo: jest.fn(),\n };\n\n it(\"should start autoplay when autoPlay is true\", () => {\n renderHook(() =>\n useAutoPlay({\n autoPlay: true,\n autoPlayInterval: 1000,\n carouselController: mockCarouselController,\n })\n );\n\n act(() => {\n jest.runOnlyPendingTimers();\n });\n\n expect(mockCarouselController.next).toHaveBeenCalledTimes(1);\n expect(mockCarouselController.next).toHaveBeenCalledWith(\n expect.objectContaining({\n onFinished: expect.any(Function),\n })\n );\n });\n\n it(\"should not start autoplay when autoPlay is false\", () => {\n renderHook(() =>\n useAutoPlay({\n autoPlay: false,\n autoPlayInterval: 1000,\n carouselController: mockCarouselController,\n })\n );\n\n act(() => {\n jest.runOnlyPendingTimers();\n });\n\n expect(mockCarouselController.next).not.toHaveBeenCalled();\n });\n\n it(\"should play in reverse when autoPlayReverse is true\", () => {\n renderHook(() =>\n useAutoPlay({\n autoPlay: true,\n autoPlayReverse: true,\n autoPlayInterval: 1000,\n carouselController: mockCarouselController,\n })\n );\n\n act(() => {\n jest.runOnlyPendingTimers();\n });\n\n expect(mockCarouselController.prev).toHaveBeenCalledTimes(1);\n expect(mockCarouselController.next).not.toHaveBeenCalled();\n });\n\n it(\"should clear timer on unmount\", () => {\n const { unmount } = renderHook(() =>\n useAutoPlay({\n autoPlay: true,\n autoPlayInterval: 1000,\n carouselController: mockCarouselController,\n })\n );\n\n // Run the timer once to ensure it's set\n act(() => {\n jest.runOnlyPendingTimers();\n });\n\n // Clear previous call records\n mockCarouselController.next.mockClear();\n\n // Then unmount the component and run the timer again\n act(() => {\n unmount();\n jest.runOnlyPendingTimers();\n });\n\n expect(mockCarouselController.next).not.toHaveBeenCalled();\n });\n\n it(\"should pause and resume autoplay\", () => {\n const { result } = renderHook(() =>\n useAutoPlay({\n autoPlay: true,\n autoPlayInterval: 1000,\n carouselController: mockCarouselController,\n })\n );\n\n // Run the timer once to ensure it's set\n act(() => {\n jest.runOnlyPendingTimers();\n });\n\n // Clear previous call records\n mockCarouselController.next.mockClear();\n\n // Pause autoplay\n act(() => {\n result.current.pause();\n jest.runOnlyPendingTimers();\n });\n\n expect(mockCarouselController.next).not.toHaveBeenCalled();\n\n // Resume autoplay\n act(() => {\n result.current.start();\n jest.runOnlyPendingTimers();\n });\n\n expect(mockCarouselController.next).toHaveBeenCalledTimes(1);\n });\n\n it(\"should respect autoPlayInterval timing\", () => {\n renderHook(() =>\n useAutoPlay({\n autoPlay: true,\n autoPlayInterval: 2000,\n carouselController: mockCarouselController,\n })\n );\n\n // Advance less than interval\n act(() => {\n jest.advanceTimersByTime(1500);\n });\n expect(mockCarouselController.next).not.toHaveBeenCalled();\n\n // Advance to complete interval\n act(() => {\n jest.advanceTimersByTime(500);\n });\n expect(mockCarouselController.next).toHaveBeenCalledTimes(1);\n });\n\n it(\"should chain autoplay calls correctly\", () => {\n renderHook(() =>\n useAutoPlay({\n autoPlay: true,\n autoPlayInterval: 1000,\n carouselController: mockCarouselController,\n })\n );\n\n // First interval\n act(() => {\n jest.runOnlyPendingTimers();\n });\n expect(mockCarouselController.next).toHaveBeenCalledTimes(1);\n\n // Trigger onFinished callback to start the next timer\n const onFinished = mockCarouselController.next.mock.calls[0][0].onFinished;\n act(() => {\n onFinished();\n jest.runOnlyPendingTimers();\n });\n expect(mockCarouselController.next).toHaveBeenCalledTimes(2);\n\n // Trigger onFinished callback to start the next timer\n const onFinished2 = mockCarouselController.next.mock.calls[1][0].onFinished;\n act(() => {\n onFinished2();\n jest.runOnlyPendingTimers();\n });\n expect(mockCarouselController.next).toHaveBeenCalledTimes(3);\n });\n});\n"]}
|