@r0b0t3d/react-native-carousel 3.4.3 → 3.4.4
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.
|
@@ -294,9 +294,8 @@ function Carousel({
|
|
|
294
294
|
|
|
295
295
|
return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
296
296
|
style: style
|
|
297
|
-
}, /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.ScrollView, _extends({
|
|
298
|
-
ref: scrollViewRef
|
|
299
|
-
}, scrollViewProps, {
|
|
297
|
+
}, /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.ScrollView, _extends({}, scrollViewProps, {
|
|
298
|
+
ref: scrollViewRef,
|
|
300
299
|
style: styles.container,
|
|
301
300
|
horizontal: true,
|
|
302
301
|
disableScrollViewPanResponder: true,
|
|
@@ -306,7 +305,7 @@ function Carousel({
|
|
|
306
305
|
snapToStart: true,
|
|
307
306
|
snapToEnd: true,
|
|
308
307
|
decelerationRate: "fast",
|
|
309
|
-
scrollEventThrottle:
|
|
308
|
+
scrollEventThrottle: 4,
|
|
310
309
|
onScroll: scrollHandler,
|
|
311
310
|
bounces: false,
|
|
312
311
|
contentContainerStyle: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Carousel.tsx"],"names":["width","wWidth","Dimensions","get","Carousel","style","data","initialPage","loop","additionalPagesPerSide","autoPlay","duration","animation","sliderWidth","itemWidth","firstItemAlignment","inactiveOpacity","inactiveScale","spaceBetween","spaceHeadTail","renderItem","onPageChange","scrollViewProps","keyExtractor","currentPage","animatedScroll","value","freeze","isDragging","setDragging","expectedPosition","pageMapper","animatedPage","totalPage","horizontalPadding","padding","scrollViewRef","offsets","itemCount","length","pageItems","headItems","slice","tailItems","newItems","i","current","getActualPage","page","getRef","scrollTo","getNode","handleScrollTo","animated","x","y","jumpTo","delay","Platform","OS","setTimeout","goNext","next","goPrev","prev","snapToItem","index","console","error","pageIndex","indices","Object","keys","filter","idx","Number","map","toIndex","setCarouselHandlers","handlePageChange","actualPage","refreshPage","offset","pageNum","beginDrag","endDrag","getItemKey","item","id","scrollHandler","onScroll","event","contentOffset","onBeginDrag","_e","onEndDrag","containerStyle","paddingLeft","paddingRight","renderPage","styles","container","paddingHorizontal","StyleSheet","create","flex"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n useMemo,\n} from 'react';\nimport { View, Dimensions, StyleSheet, Platform } from 'react-native';\nimport { useInterval } from '@r0b0t3d/react-native-hooks';\nimport Animated, {\n useSharedValue,\n useAnimatedScrollHandler,\n runOnJS,\n useAnimatedRef,\n} from 'react-native-reanimated';\nimport type { CarouselProps } from '../types';\nimport PageItem from './PageItem';\nimport { findNearestPage, generateOffsets } from '../utils';\nimport { useCarouselContext } from './useCarouselContext';\nimport { useInternalCarouselContext } from './useInternalCarouselContext';\n\nconst { width: wWidth } = Dimensions.get('screen');\n\nfunction Carousel<TData>({\n style,\n data,\n initialPage = 0,\n loop = false,\n additionalPagesPerSide = 2,\n autoPlay = false,\n duration = 1000,\n animation,\n sliderWidth = wWidth,\n itemWidth = wWidth,\n firstItemAlignment = 'center',\n inactiveOpacity = 1,\n inactiveScale = 1,\n spaceBetween = 0,\n spaceHeadTail = 0,\n renderItem,\n onPageChange,\n scrollViewProps = {},\n keyExtractor,\n}: CarouselProps<TData>) {\n const currentPage = useSharedValue(0);\n const animatedScroll = useSharedValue(currentPage.value * sliderWidth);\n const freeze = useSharedValue(false);\n const [isDragging, setDragging] = useState(false);\n const expectedPosition = useSharedValue(-1);\n const pageMapper = useRef<Record<number, number>>({});\n const { currentPage: animatedPage, totalPage } = useCarouselContext();\n\n const horizontalPadding = useMemo(() => {\n const padding = (sliderWidth - itemWidth) / 2;\n return firstItemAlignment === 'center' || loop ? padding : spaceHeadTail;\n }, [sliderWidth, itemWidth, firstItemAlignment, loop, spaceHeadTail]);\n\n const scrollViewRef = useAnimatedRef<any>();\n\n const offsets = useMemo(() => {\n return generateOffsets({\n sliderWidth,\n itemWidth,\n itemCount: data.length + (loop ? additionalPagesPerSide * 2 : 0),\n horizontalPadding,\n });\n }, [sliderWidth, itemWidth, data, horizontalPadding]);\n\n const pageItems = useMemo(() => {\n if (!data) {\n return [];\n }\n totalPage.value = data.length;\n if (loop) {\n const headItems = data.slice(\n data.length - additionalPagesPerSide,\n data.length\n );\n const tailItems = data.slice(0, additionalPagesPerSide);\n const newItems = [...headItems, ...data, ...tailItems];\n for (let i = 0; i < newItems.length; i++) {\n pageMapper.current[i] =\n (data.length - additionalPagesPerSide + i) % data.length;\n }\n return newItems;\n } else {\n for (let i = 0; i < data.length; i++) {\n pageMapper.current[i] = i;\n }\n return data;\n }\n }, [data, loop]);\n\n const getActualPage = useCallback((page: number) => {\n return pageMapper.current[page];\n }, []);\n\n const getRef = useCallback(() => {\n if (!scrollViewRef.current) return;\n if (scrollViewRef.current.scrollTo) {\n return scrollViewRef.current;\n }\n return scrollViewRef.current.getNode();\n }, []);\n\n const handleScrollTo = useCallback(\n (page: number, animated = true) => {\n if (getRef()) {\n getRef().scrollTo({ x: offsets[page], y: 0, animated });\n }\n },\n [getRef, offsets]\n );\n\n const jumpTo = useCallback(\n (page: number, delay = 200) => {\n expectedPosition.value = page;\n if (Platform.OS === 'android') {\n freeze.value = true;\n }\n setTimeout(() => {\n animatedScroll.value = offsets[page];\n handleScrollTo(page, false);\n }, delay);\n },\n [handleScrollTo, animatedScroll, freeze]\n );\n\n const goNext = useCallback(() => {\n const next = currentPage.value + 1;\n handleScrollTo(next);\n }, [handleScrollTo]);\n\n const goPrev = useCallback(() => {\n const prev = currentPage.value - 1;\n handleScrollTo(prev);\n }, [handleScrollTo]);\n\n const snapToItem = useCallback(\n (index: number, animated = true) => {\n if (index < 0 || index >= data.length) {\n console.error(`Index not valid ${index}`);\n return;\n }\n let pageIndex = index;\n if (loop) {\n const indices: number[] = Object.keys(pageMapper.current)\n .filter((idx) => pageMapper.current[Number(idx)] === index)\n .map((idx) => Number(idx));\n const toIndex = findNearestPage(currentPage.value, indices, 10);\n pageIndex = indices[toIndex];\n }\n handleScrollTo(pageIndex, animated);\n },\n [handleScrollTo]\n );\n\n const { setCarouselHandlers } = useInternalCarouselContext();\n\n useEffect(() => {\n if (setCarouselHandlers) {\n setCarouselHandlers({\n goNext,\n goPrev,\n snapToItem,\n });\n }\n }, [goNext, goPrev, snapToItem, setCarouselHandlers]);\n\n const handlePageChange = useCallback(\n (page: number) => {\n const actualPage = getActualPage(page);\n animatedPage.value = actualPage;\n if (onPageChange) {\n onPageChange(actualPage);\n }\n if (!loop) return;\n if (page === pageItems.length - 1) {\n jumpTo(additionalPagesPerSide * 2 - 1);\n } else if (page === 0) {\n jumpTo(pageItems.length - additionalPagesPerSide * 2);\n }\n },\n [onPageChange, loop, getActualPage, jumpTo, pageItems]\n );\n\n const refreshPage = useCallback(\n (offset) => {\n 'worklet';\n const pageNum = findNearestPage(offset, offsets, 20); \n if (pageNum === -1) {\n return;\n }\n if (pageNum !== currentPage.value) {\n if (expectedPosition.value === pageNum) {\n freeze.value = false;\n }\n currentPage.value = pageNum;\n runOnJS(handlePageChange)(pageNum);\n }\n },\n [isDragging, offsets, handlePageChange]\n );\n\n useInterval(\n () => {\n goNext();\n },\n !autoPlay || !loop || isDragging ? -1 : duration\n );\n\n useEffect(() => {\n if (initialPage < 0 || initialPage >= data.length) {\n console.error(`Invalid initialPage ${initialPage}`);\n return;\n }\n let pageIndex = initialPage;\n if (loop) {\n pageIndex = initialPage + additionalPagesPerSide;\n }\n if (currentPage.value !== pageIndex) {\n setTimeout(() => {\n handleScrollTo(pageIndex, false);\n freeze.value = false;\n });\n }\n }, []);\n\n const beginDrag = useCallback(() => {\n if (autoPlay) {\n setDragging(true);\n }\n }, [autoPlay]);\n\n const endDrag = useCallback(() => {\n if (autoPlay) {\n setTimeout(() => setDragging(false), 200);\n }\n }, [autoPlay]);\n\n const getItemKey = useCallback(\n (item: TData, index: number): string => {\n if (keyExtractor) {\n return `${keyExtractor(item, index)}-${index}`;\n }\n if ((item as any).id) {\n return `${(item as any).id}-${index}`;\n }\n console.error('You need implement keyExtractor');\n return '';\n },\n [keyExtractor]\n );\n\n const scrollHandler = useAnimatedScrollHandler(\n {\n onScroll: (event) => {\n animatedScroll.value = event.contentOffset.x;\n refreshPage(animatedScroll.value);\n },\n onBeginDrag: (_e) => {\n runOnJS(beginDrag)();\n },\n onEndDrag: (_e) => {\n runOnJS(endDrag)();\n },\n },\n [beginDrag, endDrag, refreshPage]\n );\n\n const containerStyle = useCallback(\n (index: number) => {\n if (firstItemAlignment === 'start') {\n return {\n paddingLeft: index === 0 ? 0 : spaceBetween / 2,\n paddingRight: index === data.length - 1 ? 0 : spaceBetween / 2,\n };\n }\n return {\n paddingLeft: spaceBetween / 2,\n paddingRight: spaceBetween / 2,\n };\n },\n [spaceBetween, firstItemAlignment]\n );\n\n function renderPage(item: TData, i: number) {\n return (\n <PageItem\n key={getItemKey(item, i)}\n containerStyle={containerStyle(i)}\n item={item}\n index={i}\n offset={offsets[i]}\n itemWidth={itemWidth}\n animatedValue={animatedScroll}\n animation={animation}\n renderItem={renderItem}\n freeze={freeze}\n inactiveOpacity={inactiveOpacity}\n inactiveScale={inactiveScale}\n />\n );\n }\n\n return (\n <View style={style}>\n <Animated.ScrollView\n ref={scrollViewRef}\n {...scrollViewProps}\n style={styles.container}\n horizontal\n disableScrollViewPanResponder\n disableIntervalMomentum\n showsHorizontalScrollIndicator={false}\n snapToOffsets={offsets}\n snapToStart\n snapToEnd\n decelerationRate=\"fast\"\n scrollEventThrottle={16}\n onScroll={scrollHandler}\n bounces={false}\n contentContainerStyle={{\n paddingHorizontal: horizontalPadding,\n }}\n >\n {pageItems.map(renderPage)}\n </Animated.ScrollView>\n </View>\n );\n}\n\nexport default Carousel;\n\nconst styles = StyleSheet.create({\n container: { flex: 1 },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["Carousel.tsx"],"names":["width","wWidth","Dimensions","get","Carousel","style","data","initialPage","loop","additionalPagesPerSide","autoPlay","duration","animation","sliderWidth","itemWidth","firstItemAlignment","inactiveOpacity","inactiveScale","spaceBetween","spaceHeadTail","renderItem","onPageChange","scrollViewProps","keyExtractor","currentPage","animatedScroll","value","freeze","isDragging","setDragging","expectedPosition","pageMapper","animatedPage","totalPage","horizontalPadding","padding","scrollViewRef","offsets","itemCount","length","pageItems","headItems","slice","tailItems","newItems","i","current","getActualPage","page","getRef","scrollTo","getNode","handleScrollTo","animated","x","y","jumpTo","delay","Platform","OS","setTimeout","goNext","next","goPrev","prev","snapToItem","index","console","error","pageIndex","indices","Object","keys","filter","idx","Number","map","toIndex","setCarouselHandlers","handlePageChange","actualPage","refreshPage","offset","pageNum","beginDrag","endDrag","getItemKey","item","id","scrollHandler","onScroll","event","contentOffset","onBeginDrag","_e","onEndDrag","containerStyle","paddingLeft","paddingRight","renderPage","styles","container","paddingHorizontal","StyleSheet","create","flex"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n useMemo,\n} from 'react';\nimport { View, Dimensions, StyleSheet, Platform } from 'react-native';\nimport { useInterval } from '@r0b0t3d/react-native-hooks';\nimport Animated, {\n useSharedValue,\n useAnimatedScrollHandler,\n runOnJS,\n useAnimatedRef,\n} from 'react-native-reanimated';\nimport type { CarouselProps } from '../types';\nimport PageItem from './PageItem';\nimport { findNearestPage, generateOffsets } from '../utils';\nimport { useCarouselContext } from './useCarouselContext';\nimport { useInternalCarouselContext } from './useInternalCarouselContext';\n\nconst { width: wWidth } = Dimensions.get('screen');\n\nfunction Carousel<TData>({\n style,\n data,\n initialPage = 0,\n loop = false,\n additionalPagesPerSide = 2,\n autoPlay = false,\n duration = 1000,\n animation,\n sliderWidth = wWidth,\n itemWidth = wWidth,\n firstItemAlignment = 'center',\n inactiveOpacity = 1,\n inactiveScale = 1,\n spaceBetween = 0,\n spaceHeadTail = 0,\n renderItem,\n onPageChange,\n scrollViewProps = {},\n keyExtractor,\n}: CarouselProps<TData>) {\n const currentPage = useSharedValue(0);\n const animatedScroll = useSharedValue(currentPage.value * sliderWidth);\n const freeze = useSharedValue(false);\n const [isDragging, setDragging] = useState(false);\n const expectedPosition = useSharedValue(-1);\n const pageMapper = useRef<Record<number, number>>({});\n const { currentPage: animatedPage, totalPage } = useCarouselContext();\n\n const horizontalPadding = useMemo(() => {\n const padding = (sliderWidth - itemWidth) / 2;\n return firstItemAlignment === 'center' || loop ? padding : spaceHeadTail;\n }, [sliderWidth, itemWidth, firstItemAlignment, loop, spaceHeadTail]);\n\n const scrollViewRef = useAnimatedRef<any>();\n\n const offsets = useMemo(() => {\n return generateOffsets({\n sliderWidth,\n itemWidth,\n itemCount: data.length + (loop ? additionalPagesPerSide * 2 : 0),\n horizontalPadding,\n });\n }, [sliderWidth, itemWidth, data, horizontalPadding]);\n\n const pageItems = useMemo(() => {\n if (!data) {\n return [];\n }\n totalPage.value = data.length;\n if (loop) {\n const headItems = data.slice(\n data.length - additionalPagesPerSide,\n data.length\n );\n const tailItems = data.slice(0, additionalPagesPerSide);\n const newItems = [...headItems, ...data, ...tailItems];\n for (let i = 0; i < newItems.length; i++) {\n pageMapper.current[i] =\n (data.length - additionalPagesPerSide + i) % data.length;\n }\n return newItems;\n } else {\n for (let i = 0; i < data.length; i++) {\n pageMapper.current[i] = i;\n }\n return data;\n }\n }, [data, loop]);\n\n const getActualPage = useCallback((page: number) => {\n return pageMapper.current[page];\n }, []);\n\n const getRef = useCallback(() => {\n if (!scrollViewRef.current) return;\n if (scrollViewRef.current.scrollTo) {\n return scrollViewRef.current;\n }\n return scrollViewRef.current.getNode();\n }, []);\n\n const handleScrollTo = useCallback(\n (page: number, animated = true) => {\n if (getRef()) {\n getRef().scrollTo({ x: offsets[page], y: 0, animated });\n }\n },\n [getRef, offsets]\n );\n\n const jumpTo = useCallback(\n (page: number, delay = 200) => {\n expectedPosition.value = page;\n if (Platform.OS === 'android') {\n freeze.value = true;\n }\n setTimeout(() => {\n animatedScroll.value = offsets[page];\n handleScrollTo(page, false);\n }, delay);\n },\n [handleScrollTo, animatedScroll, freeze]\n );\n\n const goNext = useCallback(() => {\n const next = currentPage.value + 1;\n handleScrollTo(next);\n }, [handleScrollTo]);\n\n const goPrev = useCallback(() => {\n const prev = currentPage.value - 1;\n handleScrollTo(prev);\n }, [handleScrollTo]);\n\n const snapToItem = useCallback(\n (index: number, animated = true) => {\n if (index < 0 || index >= data.length) {\n console.error(`Index not valid ${index}`);\n return;\n }\n let pageIndex = index;\n if (loop) {\n const indices: number[] = Object.keys(pageMapper.current)\n .filter((idx) => pageMapper.current[Number(idx)] === index)\n .map((idx) => Number(idx));\n const toIndex = findNearestPage(currentPage.value, indices, 10);\n pageIndex = indices[toIndex];\n }\n handleScrollTo(pageIndex, animated);\n },\n [handleScrollTo]\n );\n\n const { setCarouselHandlers } = useInternalCarouselContext();\n\n useEffect(() => {\n if (setCarouselHandlers) {\n setCarouselHandlers({\n goNext,\n goPrev,\n snapToItem,\n });\n }\n }, [goNext, goPrev, snapToItem, setCarouselHandlers]);\n\n const handlePageChange = useCallback(\n (page: number) => {\n const actualPage = getActualPage(page);\n animatedPage.value = actualPage;\n if (onPageChange) {\n onPageChange(actualPage);\n }\n if (!loop) return;\n if (page === pageItems.length - 1) {\n jumpTo(additionalPagesPerSide * 2 - 1);\n } else if (page === 0) {\n jumpTo(pageItems.length - additionalPagesPerSide * 2);\n }\n },\n [onPageChange, loop, getActualPage, jumpTo, pageItems]\n );\n\n const refreshPage = useCallback(\n (offset) => {\n 'worklet';\n const pageNum = findNearestPage(offset, offsets, 20); \n if (pageNum === -1) {\n return;\n }\n if (pageNum !== currentPage.value) {\n if (expectedPosition.value === pageNum) {\n freeze.value = false;\n }\n currentPage.value = pageNum;\n runOnJS(handlePageChange)(pageNum);\n }\n },\n [isDragging, offsets, handlePageChange]\n );\n\n useInterval(\n () => {\n goNext();\n },\n !autoPlay || !loop || isDragging ? -1 : duration\n );\n\n useEffect(() => {\n if (initialPage < 0 || initialPage >= data.length) {\n console.error(`Invalid initialPage ${initialPage}`);\n return;\n }\n let pageIndex = initialPage;\n if (loop) {\n pageIndex = initialPage + additionalPagesPerSide;\n }\n if (currentPage.value !== pageIndex) {\n setTimeout(() => {\n handleScrollTo(pageIndex, false);\n freeze.value = false;\n });\n }\n }, []);\n\n const beginDrag = useCallback(() => {\n if (autoPlay) {\n setDragging(true);\n }\n }, [autoPlay]);\n\n const endDrag = useCallback(() => {\n if (autoPlay) {\n setTimeout(() => setDragging(false), 200);\n }\n }, [autoPlay]);\n\n const getItemKey = useCallback(\n (item: TData, index: number): string => {\n if (keyExtractor) {\n return `${keyExtractor(item, index)}-${index}`;\n }\n if ((item as any).id) {\n return `${(item as any).id}-${index}`;\n }\n console.error('You need implement keyExtractor');\n return '';\n },\n [keyExtractor]\n );\n\n const scrollHandler = useAnimatedScrollHandler(\n {\n onScroll: (event) => {\n animatedScroll.value = event.contentOffset.x;\n refreshPage(animatedScroll.value);\n },\n onBeginDrag: (_e) => {\n runOnJS(beginDrag)();\n },\n onEndDrag: (_e) => {\n runOnJS(endDrag)();\n },\n },\n [beginDrag, endDrag, refreshPage]\n );\n\n const containerStyle = useCallback(\n (index: number) => {\n if (firstItemAlignment === 'start') {\n return {\n paddingLeft: index === 0 ? 0 : spaceBetween / 2,\n paddingRight: index === data.length - 1 ? 0 : spaceBetween / 2,\n };\n }\n return {\n paddingLeft: spaceBetween / 2,\n paddingRight: spaceBetween / 2,\n };\n },\n [spaceBetween, firstItemAlignment]\n );\n\n function renderPage(item: TData, i: number) {\n return (\n <PageItem\n key={getItemKey(item, i)}\n containerStyle={containerStyle(i)}\n item={item}\n index={i}\n offset={offsets[i]}\n itemWidth={itemWidth}\n animatedValue={animatedScroll}\n animation={animation}\n renderItem={renderItem}\n freeze={freeze}\n inactiveOpacity={inactiveOpacity}\n inactiveScale={inactiveScale}\n />\n );\n }\n\n return (\n <View style={style}>\n <Animated.ScrollView\n {...scrollViewProps}\n ref={scrollViewRef}\n style={styles.container}\n horizontal\n disableScrollViewPanResponder\n disableIntervalMomentum\n showsHorizontalScrollIndicator={false}\n snapToOffsets={offsets}\n snapToStart\n snapToEnd\n decelerationRate=\"fast\"\n scrollEventThrottle={4}\n onScroll={scrollHandler}\n bounces={false}\n contentContainerStyle={{\n paddingHorizontal: horizontalPadding,\n }}\n >\n {pageItems.map(renderPage)}\n </Animated.ScrollView>\n </View>\n );\n}\n\nexport default Carousel;\n\nconst styles = StyleSheet.create({\n container: { flex: 1 },\n});\n"]}
|
|
@@ -274,9 +274,8 @@ function Carousel({
|
|
|
274
274
|
|
|
275
275
|
return /*#__PURE__*/React.createElement(View, {
|
|
276
276
|
style: style
|
|
277
|
-
}, /*#__PURE__*/React.createElement(Animated.ScrollView, _extends({
|
|
278
|
-
ref: scrollViewRef
|
|
279
|
-
}, scrollViewProps, {
|
|
277
|
+
}, /*#__PURE__*/React.createElement(Animated.ScrollView, _extends({}, scrollViewProps, {
|
|
278
|
+
ref: scrollViewRef,
|
|
280
279
|
style: styles.container,
|
|
281
280
|
horizontal: true,
|
|
282
281
|
disableScrollViewPanResponder: true,
|
|
@@ -286,7 +285,7 @@ function Carousel({
|
|
|
286
285
|
snapToStart: true,
|
|
287
286
|
snapToEnd: true,
|
|
288
287
|
decelerationRate: "fast",
|
|
289
|
-
scrollEventThrottle:
|
|
288
|
+
scrollEventThrottle: 4,
|
|
290
289
|
onScroll: scrollHandler,
|
|
291
290
|
bounces: false,
|
|
292
291
|
contentContainerStyle: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Carousel.tsx"],"names":["React","useState","useRef","useEffect","useCallback","useMemo","View","Dimensions","StyleSheet","Platform","useInterval","Animated","useSharedValue","useAnimatedScrollHandler","runOnJS","useAnimatedRef","PageItem","findNearestPage","generateOffsets","useCarouselContext","useInternalCarouselContext","width","wWidth","get","Carousel","style","data","initialPage","loop","additionalPagesPerSide","autoPlay","duration","animation","sliderWidth","itemWidth","firstItemAlignment","inactiveOpacity","inactiveScale","spaceBetween","spaceHeadTail","renderItem","onPageChange","scrollViewProps","keyExtractor","currentPage","animatedScroll","value","freeze","isDragging","setDragging","expectedPosition","pageMapper","animatedPage","totalPage","horizontalPadding","padding","scrollViewRef","offsets","itemCount","length","pageItems","headItems","slice","tailItems","newItems","i","current","getActualPage","page","getRef","scrollTo","getNode","handleScrollTo","animated","x","y","jumpTo","delay","OS","setTimeout","goNext","next","goPrev","prev","snapToItem","index","console","error","pageIndex","indices","Object","keys","filter","idx","Number","map","toIndex","setCarouselHandlers","handlePageChange","actualPage","refreshPage","offset","pageNum","beginDrag","endDrag","getItemKey","item","id","scrollHandler","onScroll","event","contentOffset","onBeginDrag","_e","onEndDrag","containerStyle","paddingLeft","paddingRight","renderPage","styles","container","paddingHorizontal","create","flex"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n useMemo,\n} from 'react';\nimport { View, Dimensions, StyleSheet, Platform } from 'react-native';\nimport { useInterval } from '@r0b0t3d/react-native-hooks';\nimport Animated, {\n useSharedValue,\n useAnimatedScrollHandler,\n runOnJS,\n useAnimatedRef,\n} from 'react-native-reanimated';\nimport type { CarouselProps } from '../types';\nimport PageItem from './PageItem';\nimport { findNearestPage, generateOffsets } from '../utils';\nimport { useCarouselContext } from './useCarouselContext';\nimport { useInternalCarouselContext } from './useInternalCarouselContext';\n\nconst { width: wWidth } = Dimensions.get('screen');\n\nfunction Carousel<TData>({\n style,\n data,\n initialPage = 0,\n loop = false,\n additionalPagesPerSide = 2,\n autoPlay = false,\n duration = 1000,\n animation,\n sliderWidth = wWidth,\n itemWidth = wWidth,\n firstItemAlignment = 'center',\n inactiveOpacity = 1,\n inactiveScale = 1,\n spaceBetween = 0,\n spaceHeadTail = 0,\n renderItem,\n onPageChange,\n scrollViewProps = {},\n keyExtractor,\n}: CarouselProps<TData>) {\n const currentPage = useSharedValue(0);\n const animatedScroll = useSharedValue(currentPage.value * sliderWidth);\n const freeze = useSharedValue(false);\n const [isDragging, setDragging] = useState(false);\n const expectedPosition = useSharedValue(-1);\n const pageMapper = useRef<Record<number, number>>({});\n const { currentPage: animatedPage, totalPage } = useCarouselContext();\n\n const horizontalPadding = useMemo(() => {\n const padding = (sliderWidth - itemWidth) / 2;\n return firstItemAlignment === 'center' || loop ? padding : spaceHeadTail;\n }, [sliderWidth, itemWidth, firstItemAlignment, loop, spaceHeadTail]);\n\n const scrollViewRef = useAnimatedRef<any>();\n\n const offsets = useMemo(() => {\n return generateOffsets({\n sliderWidth,\n itemWidth,\n itemCount: data.length + (loop ? additionalPagesPerSide * 2 : 0),\n horizontalPadding,\n });\n }, [sliderWidth, itemWidth, data, horizontalPadding]);\n\n const pageItems = useMemo(() => {\n if (!data) {\n return [];\n }\n totalPage.value = data.length;\n if (loop) {\n const headItems = data.slice(\n data.length - additionalPagesPerSide,\n data.length\n );\n const tailItems = data.slice(0, additionalPagesPerSide);\n const newItems = [...headItems, ...data, ...tailItems];\n for (let i = 0; i < newItems.length; i++) {\n pageMapper.current[i] =\n (data.length - additionalPagesPerSide + i) % data.length;\n }\n return newItems;\n } else {\n for (let i = 0; i < data.length; i++) {\n pageMapper.current[i] = i;\n }\n return data;\n }\n }, [data, loop]);\n\n const getActualPage = useCallback((page: number) => {\n return pageMapper.current[page];\n }, []);\n\n const getRef = useCallback(() => {\n if (!scrollViewRef.current) return;\n if (scrollViewRef.current.scrollTo) {\n return scrollViewRef.current;\n }\n return scrollViewRef.current.getNode();\n }, []);\n\n const handleScrollTo = useCallback(\n (page: number, animated = true) => {\n if (getRef()) {\n getRef().scrollTo({ x: offsets[page], y: 0, animated });\n }\n },\n [getRef, offsets]\n );\n\n const jumpTo = useCallback(\n (page: number, delay = 200) => {\n expectedPosition.value = page;\n if (Platform.OS === 'android') {\n freeze.value = true;\n }\n setTimeout(() => {\n animatedScroll.value = offsets[page];\n handleScrollTo(page, false);\n }, delay);\n },\n [handleScrollTo, animatedScroll, freeze]\n );\n\n const goNext = useCallback(() => {\n const next = currentPage.value + 1;\n handleScrollTo(next);\n }, [handleScrollTo]);\n\n const goPrev = useCallback(() => {\n const prev = currentPage.value - 1;\n handleScrollTo(prev);\n }, [handleScrollTo]);\n\n const snapToItem = useCallback(\n (index: number, animated = true) => {\n if (index < 0 || index >= data.length) {\n console.error(`Index not valid ${index}`);\n return;\n }\n let pageIndex = index;\n if (loop) {\n const indices: number[] = Object.keys(pageMapper.current)\n .filter((idx) => pageMapper.current[Number(idx)] === index)\n .map((idx) => Number(idx));\n const toIndex = findNearestPage(currentPage.value, indices, 10);\n pageIndex = indices[toIndex];\n }\n handleScrollTo(pageIndex, animated);\n },\n [handleScrollTo]\n );\n\n const { setCarouselHandlers } = useInternalCarouselContext();\n\n useEffect(() => {\n if (setCarouselHandlers) {\n setCarouselHandlers({\n goNext,\n goPrev,\n snapToItem,\n });\n }\n }, [goNext, goPrev, snapToItem, setCarouselHandlers]);\n\n const handlePageChange = useCallback(\n (page: number) => {\n const actualPage = getActualPage(page);\n animatedPage.value = actualPage;\n if (onPageChange) {\n onPageChange(actualPage);\n }\n if (!loop) return;\n if (page === pageItems.length - 1) {\n jumpTo(additionalPagesPerSide * 2 - 1);\n } else if (page === 0) {\n jumpTo(pageItems.length - additionalPagesPerSide * 2);\n }\n },\n [onPageChange, loop, getActualPage, jumpTo, pageItems]\n );\n\n const refreshPage = useCallback(\n (offset) => {\n 'worklet';\n const pageNum = findNearestPage(offset, offsets, 20); \n if (pageNum === -1) {\n return;\n }\n if (pageNum !== currentPage.value) {\n if (expectedPosition.value === pageNum) {\n freeze.value = false;\n }\n currentPage.value = pageNum;\n runOnJS(handlePageChange)(pageNum);\n }\n },\n [isDragging, offsets, handlePageChange]\n );\n\n useInterval(\n () => {\n goNext();\n },\n !autoPlay || !loop || isDragging ? -1 : duration\n );\n\n useEffect(() => {\n if (initialPage < 0 || initialPage >= data.length) {\n console.error(`Invalid initialPage ${initialPage}`);\n return;\n }\n let pageIndex = initialPage;\n if (loop) {\n pageIndex = initialPage + additionalPagesPerSide;\n }\n if (currentPage.value !== pageIndex) {\n setTimeout(() => {\n handleScrollTo(pageIndex, false);\n freeze.value = false;\n });\n }\n }, []);\n\n const beginDrag = useCallback(() => {\n if (autoPlay) {\n setDragging(true);\n }\n }, [autoPlay]);\n\n const endDrag = useCallback(() => {\n if (autoPlay) {\n setTimeout(() => setDragging(false), 200);\n }\n }, [autoPlay]);\n\n const getItemKey = useCallback(\n (item: TData, index: number): string => {\n if (keyExtractor) {\n return `${keyExtractor(item, index)}-${index}`;\n }\n if ((item as any).id) {\n return `${(item as any).id}-${index}`;\n }\n console.error('You need implement keyExtractor');\n return '';\n },\n [keyExtractor]\n );\n\n const scrollHandler = useAnimatedScrollHandler(\n {\n onScroll: (event) => {\n animatedScroll.value = event.contentOffset.x;\n refreshPage(animatedScroll.value);\n },\n onBeginDrag: (_e) => {\n runOnJS(beginDrag)();\n },\n onEndDrag: (_e) => {\n runOnJS(endDrag)();\n },\n },\n [beginDrag, endDrag, refreshPage]\n );\n\n const containerStyle = useCallback(\n (index: number) => {\n if (firstItemAlignment === 'start') {\n return {\n paddingLeft: index === 0 ? 0 : spaceBetween / 2,\n paddingRight: index === data.length - 1 ? 0 : spaceBetween / 2,\n };\n }\n return {\n paddingLeft: spaceBetween / 2,\n paddingRight: spaceBetween / 2,\n };\n },\n [spaceBetween, firstItemAlignment]\n );\n\n function renderPage(item: TData, i: number) {\n return (\n <PageItem\n key={getItemKey(item, i)}\n containerStyle={containerStyle(i)}\n item={item}\n index={i}\n offset={offsets[i]}\n itemWidth={itemWidth}\n animatedValue={animatedScroll}\n animation={animation}\n renderItem={renderItem}\n freeze={freeze}\n inactiveOpacity={inactiveOpacity}\n inactiveScale={inactiveScale}\n />\n );\n }\n\n return (\n <View style={style}>\n <Animated.ScrollView\n ref={scrollViewRef}\n {...scrollViewProps}\n style={styles.container}\n horizontal\n disableScrollViewPanResponder\n disableIntervalMomentum\n showsHorizontalScrollIndicator={false}\n snapToOffsets={offsets}\n snapToStart\n snapToEnd\n decelerationRate=\"fast\"\n scrollEventThrottle={16}\n onScroll={scrollHandler}\n bounces={false}\n contentContainerStyle={{\n paddingHorizontal: horizontalPadding,\n }}\n >\n {pageItems.map(renderPage)}\n </Animated.ScrollView>\n </View>\n );\n}\n\nexport default Carousel;\n\nconst styles = StyleSheet.create({\n container: { flex: 1 },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["Carousel.tsx"],"names":["React","useState","useRef","useEffect","useCallback","useMemo","View","Dimensions","StyleSheet","Platform","useInterval","Animated","useSharedValue","useAnimatedScrollHandler","runOnJS","useAnimatedRef","PageItem","findNearestPage","generateOffsets","useCarouselContext","useInternalCarouselContext","width","wWidth","get","Carousel","style","data","initialPage","loop","additionalPagesPerSide","autoPlay","duration","animation","sliderWidth","itemWidth","firstItemAlignment","inactiveOpacity","inactiveScale","spaceBetween","spaceHeadTail","renderItem","onPageChange","scrollViewProps","keyExtractor","currentPage","animatedScroll","value","freeze","isDragging","setDragging","expectedPosition","pageMapper","animatedPage","totalPage","horizontalPadding","padding","scrollViewRef","offsets","itemCount","length","pageItems","headItems","slice","tailItems","newItems","i","current","getActualPage","page","getRef","scrollTo","getNode","handleScrollTo","animated","x","y","jumpTo","delay","OS","setTimeout","goNext","next","goPrev","prev","snapToItem","index","console","error","pageIndex","indices","Object","keys","filter","idx","Number","map","toIndex","setCarouselHandlers","handlePageChange","actualPage","refreshPage","offset","pageNum","beginDrag","endDrag","getItemKey","item","id","scrollHandler","onScroll","event","contentOffset","onBeginDrag","_e","onEndDrag","containerStyle","paddingLeft","paddingRight","renderPage","styles","container","paddingHorizontal","create","flex"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n useMemo,\n} from 'react';\nimport { View, Dimensions, StyleSheet, Platform } from 'react-native';\nimport { useInterval } from '@r0b0t3d/react-native-hooks';\nimport Animated, {\n useSharedValue,\n useAnimatedScrollHandler,\n runOnJS,\n useAnimatedRef,\n} from 'react-native-reanimated';\nimport type { CarouselProps } from '../types';\nimport PageItem from './PageItem';\nimport { findNearestPage, generateOffsets } from '../utils';\nimport { useCarouselContext } from './useCarouselContext';\nimport { useInternalCarouselContext } from './useInternalCarouselContext';\n\nconst { width: wWidth } = Dimensions.get('screen');\n\nfunction Carousel<TData>({\n style,\n data,\n initialPage = 0,\n loop = false,\n additionalPagesPerSide = 2,\n autoPlay = false,\n duration = 1000,\n animation,\n sliderWidth = wWidth,\n itemWidth = wWidth,\n firstItemAlignment = 'center',\n inactiveOpacity = 1,\n inactiveScale = 1,\n spaceBetween = 0,\n spaceHeadTail = 0,\n renderItem,\n onPageChange,\n scrollViewProps = {},\n keyExtractor,\n}: CarouselProps<TData>) {\n const currentPage = useSharedValue(0);\n const animatedScroll = useSharedValue(currentPage.value * sliderWidth);\n const freeze = useSharedValue(false);\n const [isDragging, setDragging] = useState(false);\n const expectedPosition = useSharedValue(-1);\n const pageMapper = useRef<Record<number, number>>({});\n const { currentPage: animatedPage, totalPage } = useCarouselContext();\n\n const horizontalPadding = useMemo(() => {\n const padding = (sliderWidth - itemWidth) / 2;\n return firstItemAlignment === 'center' || loop ? padding : spaceHeadTail;\n }, [sliderWidth, itemWidth, firstItemAlignment, loop, spaceHeadTail]);\n\n const scrollViewRef = useAnimatedRef<any>();\n\n const offsets = useMemo(() => {\n return generateOffsets({\n sliderWidth,\n itemWidth,\n itemCount: data.length + (loop ? additionalPagesPerSide * 2 : 0),\n horizontalPadding,\n });\n }, [sliderWidth, itemWidth, data, horizontalPadding]);\n\n const pageItems = useMemo(() => {\n if (!data) {\n return [];\n }\n totalPage.value = data.length;\n if (loop) {\n const headItems = data.slice(\n data.length - additionalPagesPerSide,\n data.length\n );\n const tailItems = data.slice(0, additionalPagesPerSide);\n const newItems = [...headItems, ...data, ...tailItems];\n for (let i = 0; i < newItems.length; i++) {\n pageMapper.current[i] =\n (data.length - additionalPagesPerSide + i) % data.length;\n }\n return newItems;\n } else {\n for (let i = 0; i < data.length; i++) {\n pageMapper.current[i] = i;\n }\n return data;\n }\n }, [data, loop]);\n\n const getActualPage = useCallback((page: number) => {\n return pageMapper.current[page];\n }, []);\n\n const getRef = useCallback(() => {\n if (!scrollViewRef.current) return;\n if (scrollViewRef.current.scrollTo) {\n return scrollViewRef.current;\n }\n return scrollViewRef.current.getNode();\n }, []);\n\n const handleScrollTo = useCallback(\n (page: number, animated = true) => {\n if (getRef()) {\n getRef().scrollTo({ x: offsets[page], y: 0, animated });\n }\n },\n [getRef, offsets]\n );\n\n const jumpTo = useCallback(\n (page: number, delay = 200) => {\n expectedPosition.value = page;\n if (Platform.OS === 'android') {\n freeze.value = true;\n }\n setTimeout(() => {\n animatedScroll.value = offsets[page];\n handleScrollTo(page, false);\n }, delay);\n },\n [handleScrollTo, animatedScroll, freeze]\n );\n\n const goNext = useCallback(() => {\n const next = currentPage.value + 1;\n handleScrollTo(next);\n }, [handleScrollTo]);\n\n const goPrev = useCallback(() => {\n const prev = currentPage.value - 1;\n handleScrollTo(prev);\n }, [handleScrollTo]);\n\n const snapToItem = useCallback(\n (index: number, animated = true) => {\n if (index < 0 || index >= data.length) {\n console.error(`Index not valid ${index}`);\n return;\n }\n let pageIndex = index;\n if (loop) {\n const indices: number[] = Object.keys(pageMapper.current)\n .filter((idx) => pageMapper.current[Number(idx)] === index)\n .map((idx) => Number(idx));\n const toIndex = findNearestPage(currentPage.value, indices, 10);\n pageIndex = indices[toIndex];\n }\n handleScrollTo(pageIndex, animated);\n },\n [handleScrollTo]\n );\n\n const { setCarouselHandlers } = useInternalCarouselContext();\n\n useEffect(() => {\n if (setCarouselHandlers) {\n setCarouselHandlers({\n goNext,\n goPrev,\n snapToItem,\n });\n }\n }, [goNext, goPrev, snapToItem, setCarouselHandlers]);\n\n const handlePageChange = useCallback(\n (page: number) => {\n const actualPage = getActualPage(page);\n animatedPage.value = actualPage;\n if (onPageChange) {\n onPageChange(actualPage);\n }\n if (!loop) return;\n if (page === pageItems.length - 1) {\n jumpTo(additionalPagesPerSide * 2 - 1);\n } else if (page === 0) {\n jumpTo(pageItems.length - additionalPagesPerSide * 2);\n }\n },\n [onPageChange, loop, getActualPage, jumpTo, pageItems]\n );\n\n const refreshPage = useCallback(\n (offset) => {\n 'worklet';\n const pageNum = findNearestPage(offset, offsets, 20); \n if (pageNum === -1) {\n return;\n }\n if (pageNum !== currentPage.value) {\n if (expectedPosition.value === pageNum) {\n freeze.value = false;\n }\n currentPage.value = pageNum;\n runOnJS(handlePageChange)(pageNum);\n }\n },\n [isDragging, offsets, handlePageChange]\n );\n\n useInterval(\n () => {\n goNext();\n },\n !autoPlay || !loop || isDragging ? -1 : duration\n );\n\n useEffect(() => {\n if (initialPage < 0 || initialPage >= data.length) {\n console.error(`Invalid initialPage ${initialPage}`);\n return;\n }\n let pageIndex = initialPage;\n if (loop) {\n pageIndex = initialPage + additionalPagesPerSide;\n }\n if (currentPage.value !== pageIndex) {\n setTimeout(() => {\n handleScrollTo(pageIndex, false);\n freeze.value = false;\n });\n }\n }, []);\n\n const beginDrag = useCallback(() => {\n if (autoPlay) {\n setDragging(true);\n }\n }, [autoPlay]);\n\n const endDrag = useCallback(() => {\n if (autoPlay) {\n setTimeout(() => setDragging(false), 200);\n }\n }, [autoPlay]);\n\n const getItemKey = useCallback(\n (item: TData, index: number): string => {\n if (keyExtractor) {\n return `${keyExtractor(item, index)}-${index}`;\n }\n if ((item as any).id) {\n return `${(item as any).id}-${index}`;\n }\n console.error('You need implement keyExtractor');\n return '';\n },\n [keyExtractor]\n );\n\n const scrollHandler = useAnimatedScrollHandler(\n {\n onScroll: (event) => {\n animatedScroll.value = event.contentOffset.x;\n refreshPage(animatedScroll.value);\n },\n onBeginDrag: (_e) => {\n runOnJS(beginDrag)();\n },\n onEndDrag: (_e) => {\n runOnJS(endDrag)();\n },\n },\n [beginDrag, endDrag, refreshPage]\n );\n\n const containerStyle = useCallback(\n (index: number) => {\n if (firstItemAlignment === 'start') {\n return {\n paddingLeft: index === 0 ? 0 : spaceBetween / 2,\n paddingRight: index === data.length - 1 ? 0 : spaceBetween / 2,\n };\n }\n return {\n paddingLeft: spaceBetween / 2,\n paddingRight: spaceBetween / 2,\n };\n },\n [spaceBetween, firstItemAlignment]\n );\n\n function renderPage(item: TData, i: number) {\n return (\n <PageItem\n key={getItemKey(item, i)}\n containerStyle={containerStyle(i)}\n item={item}\n index={i}\n offset={offsets[i]}\n itemWidth={itemWidth}\n animatedValue={animatedScroll}\n animation={animation}\n renderItem={renderItem}\n freeze={freeze}\n inactiveOpacity={inactiveOpacity}\n inactiveScale={inactiveScale}\n />\n );\n }\n\n return (\n <View style={style}>\n <Animated.ScrollView\n {...scrollViewProps}\n ref={scrollViewRef}\n style={styles.container}\n horizontal\n disableScrollViewPanResponder\n disableIntervalMomentum\n showsHorizontalScrollIndicator={false}\n snapToOffsets={offsets}\n snapToStart\n snapToEnd\n decelerationRate=\"fast\"\n scrollEventThrottle={4}\n onScroll={scrollHandler}\n bounces={false}\n contentContainerStyle={{\n paddingHorizontal: horizontalPadding,\n }}\n >\n {pageItems.map(renderPage)}\n </Animated.ScrollView>\n </View>\n );\n}\n\nexport default Carousel;\n\nconst styles = StyleSheet.create({\n container: { flex: 1 },\n});\n"]}
|
package/package.json
CHANGED
|
@@ -307,8 +307,8 @@ function Carousel<TData>({
|
|
|
307
307
|
return (
|
|
308
308
|
<View style={style}>
|
|
309
309
|
<Animated.ScrollView
|
|
310
|
-
ref={scrollViewRef}
|
|
311
310
|
{...scrollViewProps}
|
|
311
|
+
ref={scrollViewRef}
|
|
312
312
|
style={styles.container}
|
|
313
313
|
horizontal
|
|
314
314
|
disableScrollViewPanResponder
|
|
@@ -318,7 +318,7 @@ function Carousel<TData>({
|
|
|
318
318
|
snapToStart
|
|
319
319
|
snapToEnd
|
|
320
320
|
decelerationRate="fast"
|
|
321
|
-
scrollEventThrottle={
|
|
321
|
+
scrollEventThrottle={4}
|
|
322
322
|
onScroll={scrollHandler}
|
|
323
323
|
bounces={false}
|
|
324
324
|
contentContainerStyle={{
|