-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathreact-native-pager-view-mock.js
More file actions
70 lines (63 loc) · 1.88 KB
/
react-native-pager-view-mock.js
File metadata and controls
70 lines (63 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// Mock for react-native-pager-view on web platform
import React from 'react';
import { Dimensions, ScrollView, View } from 'react-native';
// Mock PagerView component for web
const PagerView = React.forwardRef(({
children,
style,
initialPage = 0,
onPageSelected,
...props
}, ref) => {
const scrollViewRef = React.useRef(null);
const [currentPage, setCurrentPage] = React.useState(initialPage);
// Expose setPage method like native PagerView
React.useImperativeHandle(ref, () => ({
setPage: (page) => {
const screenWidth = Dimensions.get('window').width;
scrollViewRef.current?.scrollTo({ x: page * screenWidth, animated: true });
},
}));
const handleScroll = (event) => {
const screenWidth = Dimensions.get('window').width;
const contentOffsetX = event.nativeEvent.contentOffset.x;
const newPage = Math.round(contentOffsetX / screenWidth);
if (newPage !== currentPage && newPage >= 0) {
setCurrentPage(newPage);
if (onPageSelected) {
onPageSelected({ nativeEvent: { position: newPage } });
}
}
};
return (
<ScrollView
ref={scrollViewRef}
horizontal
pagingEnabled
showsHorizontalScrollIndicator={false}
onScroll={handleScroll}
onMomentumScrollEnd={handleScroll}
scrollEventThrottle={16}
decelerationRate="fast"
snapToInterval={Dimensions.get('window').width}
snapToAlignment="center"
style={[style, { cursor: 'default' }]}
contentContainerStyle={{ flexGrow: 1 }}
{...props}
>
{React.Children.map(children, (child, index) => (
<View
key={index}
style={{
width: Dimensions.get('window').width,
height: '100%',
}}
>
{child}
</View>
))}
</ScrollView>
);
});
PagerView.displayName = 'PagerView';
export default PagerView;