UNPKG

8.65 kBSource Map (JSON)View Raw
1{"version":3,"sources":["PagerViewAdapter.tsx"],"names":["React","Animated","Keyboard","StyleSheet","ViewPager","useAnimatedValue","AnimatedViewPager","createAnimatedComponent","PagerViewAdapter","keyboardDismissMode","swipeEnabled","navigationState","onIndexChange","onSwipeStart","onSwipeEnd","children","style","rest","index","listenersRef","useRef","pagerRef","indexRef","navigationStateRef","position","offset","useEffect","current","jumpTo","useCallback","key","routes","findIndex","route","setPage","dismiss","onPageScrollStateChanged","state","pageScrollState","nativeEvent","subscription","addListener","value","next","Math","ceil","floor","forEach","listener","removeListener","addEnterListener","push","indexOf","splice","add","render","styles","container","event","useNativeDriver","e","create","flex"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { Animated, Keyboard, StyleSheet } from 'react-native';\nimport ViewPager, {\n PageScrollStateChangedNativeEvent,\n} from 'react-native-pager-view';\nimport useAnimatedValue from './useAnimatedValue';\nimport type {\n NavigationState,\n Route,\n Listener,\n EventEmitterProps,\n PagerProps,\n} from './types';\n\nconst AnimatedViewPager = Animated.createAnimatedComponent(ViewPager);\n\ntype Props<T extends Route> = PagerProps & {\n onIndexChange: (index: number) => void;\n navigationState: NavigationState<T>;\n children: (\n props: EventEmitterProps & {\n // Animated value which represents the state of current index\n // It can include fractional digits as it represents the intermediate value\n position: Animated.AnimatedInterpolation;\n // Function to actually render the content of the pager\n // The parent component takes care of rendering\n render: (children: React.ReactNode) => React.ReactNode;\n // Callback to call when switching the tab\n // The tab switch animation is performed even if the index in state is unchanged\n jumpTo: (key: string) => void;\n }\n ) => React.ReactElement;\n};\n\nexport default function PagerViewAdapter<T extends Route>({\n keyboardDismissMode = 'auto',\n swipeEnabled = true,\n navigationState,\n onIndexChange,\n onSwipeStart,\n onSwipeEnd,\n children,\n style,\n ...rest\n}: Props<T>) {\n const { index } = navigationState;\n\n const listenersRef = React.useRef<Listener[]>([]);\n\n const pagerRef = React.useRef<ViewPager>();\n const indexRef = React.useRef<number>(index);\n const navigationStateRef = React.useRef(navigationState);\n\n const position = useAnimatedValue(index);\n const offset = useAnimatedValue(0);\n\n React.useEffect(() => {\n navigationStateRef.current = navigationState;\n });\n\n const jumpTo = React.useCallback((key: string) => {\n const index = navigationStateRef.current.routes.findIndex(\n (route: { key: string }) => route.key === key\n );\n\n pagerRef.current?.setPage(index);\n }, []);\n\n React.useEffect(() => {\n if (keyboardDismissMode === 'auto') {\n Keyboard.dismiss();\n }\n\n if (indexRef.current !== index) {\n pagerRef.current?.setPage(index);\n }\n }, [keyboardDismissMode, index]);\n\n const onPageScrollStateChanged = (\n state: PageScrollStateChangedNativeEvent\n ) => {\n const { pageScrollState } = state.nativeEvent;\n\n switch (pageScrollState) {\n case 'idle':\n onSwipeEnd?.();\n return;\n case 'dragging': {\n const subscription = offset.addListener(({ value }) => {\n const next =\n index + (value > 0 ? Math.ceil(value) : Math.floor(value));\n\n if (next !== index) {\n listenersRef.current.forEach((listener) => listener(next));\n }\n\n offset.removeListener(subscription);\n });\n\n onSwipeStart?.();\n return;\n }\n }\n };\n\n const addEnterListener = React.useCallback((listener: Listener) => {\n listenersRef.current.push(listener);\n\n return () => {\n const index = listenersRef.current.indexOf(listener);\n\n if (index > -1) {\n listenersRef.current.splice(index, 1);\n }\n };\n }, []);\n\n return children({\n position: Animated.add(position, offset),\n addEnterListener,\n jumpTo,\n render: (children) => (\n <AnimatedViewPager\n {...rest}\n ref={pagerRef}\n style={[styles.container, style]}\n initialPage={index}\n keyboardDismissMode={\n keyboardDismissMode === 'auto' ? 'on-drag' : keyboardDismissMode\n }\n onPageScroll={Animated.event(\n [\n {\n nativeEvent: {\n position: position,\n offset: offset,\n },\n },\n ],\n { useNativeDriver: true }\n )}\n onPageSelected={(e) => {\n const index = e.nativeEvent.position;\n indexRef.current = index;\n onIndexChange(index);\n }}\n onPageScrollStateChanged={onPageScrollStateChanged}\n scrollEnabled={swipeEnabled}\n >\n {children}\n </AnimatedViewPager>\n ),\n });\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n"]}
\No newline at end of file