react-native-tab-view 3.1.1 → 3.2.1
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 +13 -1
- package/lib/commonjs/Pager.android.js.map +1 -1
- package/lib/commonjs/Pager.ios.js.map +1 -1
- package/lib/commonjs/Pager.js.map +1 -1
- package/lib/commonjs/PagerViewAdapter.js +40 -22
- package/lib/commonjs/PagerViewAdapter.js.map +1 -1
- package/lib/commonjs/PanResponderAdapter.js +41 -29
- package/lib/commonjs/PanResponderAdapter.js.map +1 -1
- package/lib/commonjs/PlatformPressable.js +19 -15
- package/lib/commonjs/PlatformPressable.js.map +1 -1
- package/lib/commonjs/SceneMap.js +14 -11
- package/lib/commonjs/SceneMap.js.map +1 -1
- package/lib/commonjs/SceneView.js +2 -2
- package/lib/commonjs/SceneView.js.map +1 -1
- package/lib/commonjs/TabBar.js +124 -81
- package/lib/commonjs/TabBar.js.map +1 -1
- package/lib/commonjs/TabBarIndicator.js +7 -6
- package/lib/commonjs/TabBarIndicator.js.map +1 -1
- package/lib/commonjs/TabBarItem.js +7 -6
- package/lib/commonjs/TabBarItem.js.map +1 -1
- package/lib/commonjs/TabView.js +42 -33
- package/lib/commonjs/TabView.js.map +1 -1
- package/lib/commonjs/index.js +6 -6
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/types.js +4 -0
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/useAnimatedValue.js.map +1 -1
- package/lib/module/Pager.android.js.map +1 -1
- package/lib/module/Pager.ios.js.map +1 -1
- package/lib/module/Pager.js.map +1 -1
- package/lib/module/PagerViewAdapter.js +40 -22
- package/lib/module/PagerViewAdapter.js.map +1 -1
- package/lib/module/PanResponderAdapter.js +41 -28
- package/lib/module/PanResponderAdapter.js.map +1 -1
- package/lib/module/PlatformPressable.js +19 -15
- package/lib/module/PlatformPressable.js.map +1 -1
- package/lib/module/SceneMap.js +14 -11
- package/lib/module/SceneMap.js.map +1 -1
- package/lib/module/SceneView.js +2 -2
- package/lib/module/SceneView.js.map +1 -1
- package/lib/module/TabBar.js +125 -81
- package/lib/module/TabBar.js.map +1 -1
- package/lib/module/TabBarIndicator.js +7 -6
- package/lib/module/TabBarIndicator.js.map +1 -1
- package/lib/module/TabBarItem.js +7 -6
- package/lib/module/TabBarItem.js.map +1 -1
- package/lib/module/TabView.js +41 -32
- package/lib/module/TabView.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/types.js +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/useAnimatedValue.js.map +1 -1
- package/lib/typescript/PagerViewAdapter.d.ts +1 -1
- package/lib/typescript/PanResponderAdapter.d.ts +1 -1
- package/lib/typescript/TabBar.d.ts +3 -1
- package/lib/typescript/TabBarIndicator.d.ts +1 -0
- package/lib/typescript/TabView.d.ts +2 -1
- package/lib/typescript/types.d.ts +1 -0
- package/package.json +19 -18
- package/src/PagerViewAdapter.tsx +23 -9
- package/src/PanResponderAdapter.tsx +23 -17
- package/src/TabBar.tsx +75 -31
- package/src/TabBarIndicator.tsx +14 -5
- package/src/TabView.tsx +5 -0
- package/src/types.tsx +1 -0
package/lib/module/TabBarItem.js
CHANGED
|
@@ -6,8 +6,8 @@ import PlatformPressable from './PlatformPressable';
|
|
|
6
6
|
const DEFAULT_ACTIVE_COLOR = 'rgba(255, 255, 255, 1)';
|
|
7
7
|
const DEFAULT_INACTIVE_COLOR = 'rgba(255, 255, 255, 0.7)';
|
|
8
8
|
export default class TabBarItem extends React.Component {
|
|
9
|
-
constructor(
|
|
10
|
-
super(...
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
11
|
|
|
12
12
|
_defineProperty(this, "getActiveOpacity", (position, routes, tabIndex) => {
|
|
13
13
|
if (routes.length > 1) {
|
|
@@ -93,10 +93,11 @@ export default class TabBarItem extends React.Component {
|
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
const renderLabel = renderLabelCustom !== undefined ? renderLabelCustom :
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
96
|
+
const renderLabel = renderLabelCustom !== undefined ? renderLabelCustom : _ref => {
|
|
97
|
+
let {
|
|
98
|
+
route,
|
|
99
|
+
color
|
|
100
|
+
} = _ref;
|
|
100
101
|
const labelText = getLabelText({
|
|
101
102
|
route
|
|
102
103
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["TabBarItem.tsx"],"names":["React","Animated","StyleSheet","View","PlatformPressable","DEFAULT_ACTIVE_COLOR","DEFAULT_INACTIVE_COLOR","TabBarItem","Component","position","routes","tabIndex","length","inputRange","map","_","i","interpolate","outputRange","render","route","navigationState","renderLabel","renderLabelCustom","renderIcon","renderBadge","getLabelText","getTestID","getAccessibilityLabel","getAccessible","activeColor","activeColorCustom","inactiveColor","inactiveColorCustom","pressColor","pressOpacity","labelStyle","style","onLayout","onPress","onLongPress","props","indexOf","isFocused","index","labelColorFromStyle","flatten","color","undefined","activeOpacity","getActiveOpacity","inactiveOpacity","getInactiveOpacity","icon","label","activeIcon","focused","inactiveIcon","styles","opacity","absoluteFill","labelText","marginTop","activeLabel","inactiveLabel","tabStyle","isWidthSet","width","tabContainerStyle","flex","scene","accessibilityLabel","badge","borderless","selected","pressable","item","create","margin","backgroundColor","textTransform","alignItems","justifyContent","padding","minHeight","top","right"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport {\n Animated,\n StyleSheet,\n View,\n StyleProp,\n LayoutChangeEvent,\n TextStyle,\n ViewStyle,\n} from 'react-native';\nimport PlatformPressable from './PlatformPressable';\nimport type { Scene, Route, NavigationState } from './types';\n\nexport type Props<T extends Route> = {\n position: Animated.AnimatedInterpolation;\n route: T;\n navigationState: NavigationState<T>;\n activeColor?: string;\n inactiveColor?: string;\n pressColor?: string;\n pressOpacity?: number;\n getLabelText: (scene: Scene<T>) => string | undefined;\n getAccessible: (scene: Scene<T>) => boolean | undefined;\n getAccessibilityLabel: (scene: Scene<T>) => string | undefined;\n getTestID: (scene: Scene<T>) => string | undefined;\n renderLabel?: (scene: {\n route: T;\n focused: boolean;\n color: string;\n }) => React.ReactNode;\n renderIcon?: (scene: {\n route: T;\n focused: boolean;\n color: string;\n }) => React.ReactNode;\n renderBadge?: (scene: Scene<T>) => React.ReactNode;\n onLayout?: (event: LayoutChangeEvent) => void;\n onPress: () => void;\n onLongPress: () => void;\n labelStyle?: StyleProp<TextStyle>;\n style: StyleProp<ViewStyle>;\n};\n\nconst DEFAULT_ACTIVE_COLOR = 'rgba(255, 255, 255, 1)';\nconst DEFAULT_INACTIVE_COLOR = 'rgba(255, 255, 255, 0.7)';\n\nexport default class TabBarItem<T extends Route> extends React.Component<\n Props<T>\n> {\n private getActiveOpacity = (\n position: Animated.AnimatedInterpolation,\n routes: Route[],\n tabIndex: number\n ) => {\n if (routes.length > 1) {\n const inputRange = routes.map((_, i) => i);\n\n return position.interpolate({\n inputRange,\n outputRange: inputRange.map((i) => (i === tabIndex ? 1 : 0)),\n });\n } else {\n return 1;\n }\n };\n\n private getInactiveOpacity = (\n position: Animated.AnimatedInterpolation,\n routes: Route[],\n tabIndex: number\n ) => {\n if (routes.length > 1) {\n const inputRange = routes.map((_: Route, i: number) => i);\n\n return position.interpolate({\n inputRange,\n outputRange: inputRange.map((i: number) => (i === tabIndex ? 0 : 1)),\n });\n } else {\n return 0;\n }\n };\n\n render() {\n const {\n route,\n position,\n navigationState,\n renderLabel: renderLabelCustom,\n renderIcon,\n renderBadge,\n getLabelText,\n getTestID,\n getAccessibilityLabel,\n getAccessible,\n activeColor: activeColorCustom,\n inactiveColor: inactiveColorCustom,\n pressColor,\n pressOpacity,\n labelStyle,\n style,\n onLayout,\n onPress,\n onLongPress,\n } = this.props;\n\n const tabIndex = navigationState.routes.indexOf(route);\n const isFocused = navigationState.index === tabIndex;\n\n const labelColorFromStyle = StyleSheet.flatten(labelStyle || {}).color;\n\n const activeColor =\n activeColorCustom !== undefined\n ? activeColorCustom\n : typeof labelColorFromStyle === 'string'\n ? labelColorFromStyle\n : DEFAULT_ACTIVE_COLOR;\n const inactiveColor =\n inactiveColorCustom !== undefined\n ? inactiveColorCustom\n : typeof labelColorFromStyle === 'string'\n ? labelColorFromStyle\n : DEFAULT_INACTIVE_COLOR;\n\n const activeOpacity = this.getActiveOpacity(\n position,\n navigationState.routes,\n tabIndex\n );\n const inactiveOpacity = this.getInactiveOpacity(\n position,\n navigationState.routes,\n tabIndex\n );\n\n let icon: React.ReactNode | null = null;\n let label: React.ReactNode | null = null;\n\n if (renderIcon) {\n const activeIcon = renderIcon({\n route,\n focused: true,\n color: activeColor,\n });\n const inactiveIcon = renderIcon({\n route,\n focused: false,\n color: inactiveColor,\n });\n\n if (inactiveIcon != null && activeIcon != null) {\n icon = (\n <View style={styles.icon}>\n <Animated.View style={{ opacity: inactiveOpacity }}>\n {inactiveIcon}\n </Animated.View>\n <Animated.View\n style={[StyleSheet.absoluteFill, { opacity: activeOpacity }]}\n >\n {activeIcon}\n </Animated.View>\n </View>\n );\n }\n }\n\n const renderLabel =\n renderLabelCustom !== undefined\n ? renderLabelCustom\n : ({ route, color }: { route: T; color: string }) => {\n const labelText = getLabelText({ route });\n\n if (typeof labelText === 'string') {\n return (\n <Animated.Text\n style={[\n styles.label,\n icon ? { marginTop: 0 } : null,\n labelStyle,\n { color },\n ]}\n >\n {labelText}\n </Animated.Text>\n );\n }\n\n return labelText;\n };\n\n if (renderLabel) {\n const activeLabel = renderLabel({\n route,\n focused: true,\n color: activeColor,\n });\n const inactiveLabel = renderLabel({\n route,\n focused: false,\n color: inactiveColor,\n });\n\n label = (\n <View>\n <Animated.View style={{ opacity: inactiveOpacity }}>\n {inactiveLabel}\n </Animated.View>\n <Animated.View\n style={[StyleSheet.absoluteFill, { opacity: activeOpacity }]}\n >\n {activeLabel}\n </Animated.View>\n </View>\n );\n }\n\n const tabStyle = StyleSheet.flatten(style);\n const isWidthSet = tabStyle?.width !== undefined;\n const tabContainerStyle: ViewStyle | null = isWidthSet ? null : { flex: 1 };\n\n const scene = { route };\n\n let accessibilityLabel = getAccessibilityLabel(scene);\n\n accessibilityLabel =\n typeof accessibilityLabel !== 'undefined'\n ? accessibilityLabel\n : getLabelText(scene);\n\n const badge = renderBadge ? renderBadge(scene) : null;\n\n return (\n <PlatformPressable\n android_ripple={{ borderless: true }}\n testID={getTestID(scene)}\n accessible={getAccessible(scene)}\n accessibilityLabel={accessibilityLabel}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: isFocused }}\n // @ts-ignore: this is to support older React Native versions\n accessibilityStates={isFocused ? ['selected'] : []}\n pressColor={pressColor}\n pressOpacity={pressOpacity}\n delayPressIn={0}\n onLayout={onLayout}\n onPress={onPress}\n onLongPress={onLongPress}\n style={[styles.pressable, tabContainerStyle]}\n >\n <View pointerEvents=\"none\" style={[styles.item, tabStyle]}>\n {icon}\n {label}\n {badge != null ? <View style={styles.badge}>{badge}</View> : null}\n </View>\n </PlatformPressable>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n label: {\n margin: 4,\n backgroundColor: 'transparent',\n textTransform: 'uppercase',\n },\n icon: {\n margin: 2,\n },\n item: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n padding: 10,\n minHeight: 48,\n },\n badge: {\n position: 'absolute',\n top: 0,\n right: 0,\n },\n pressable: {\n // The label is not pressable on Windows\n // Adding backgroundColor: 'transparent' seems to fix it\n backgroundColor: 'transparent',\n },\n});\n"]}
|
|
1
|
+
{"version":3,"names":["React","Animated","StyleSheet","View","PlatformPressable","DEFAULT_ACTIVE_COLOR","DEFAULT_INACTIVE_COLOR","TabBarItem","Component","position","routes","tabIndex","length","inputRange","map","_","i","interpolate","outputRange","render","route","navigationState","renderLabel","renderLabelCustom","renderIcon","renderBadge","getLabelText","getTestID","getAccessibilityLabel","getAccessible","activeColor","activeColorCustom","inactiveColor","inactiveColorCustom","pressColor","pressOpacity","labelStyle","style","onLayout","onPress","onLongPress","props","indexOf","isFocused","index","labelColorFromStyle","flatten","color","undefined","activeOpacity","getActiveOpacity","inactiveOpacity","getInactiveOpacity","icon","label","activeIcon","focused","inactiveIcon","styles","opacity","absoluteFill","labelText","marginTop","activeLabel","inactiveLabel","tabStyle","isWidthSet","width","tabContainerStyle","flex","scene","accessibilityLabel","badge","borderless","selected","pressable","item","create","margin","backgroundColor","textTransform","alignItems","justifyContent","padding","minHeight","top","right"],"sources":["TabBarItem.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n Animated,\n StyleSheet,\n View,\n StyleProp,\n LayoutChangeEvent,\n TextStyle,\n ViewStyle,\n} from 'react-native';\nimport PlatformPressable from './PlatformPressable';\nimport type { Scene, Route, NavigationState } from './types';\n\nexport type Props<T extends Route> = {\n position: Animated.AnimatedInterpolation;\n route: T;\n navigationState: NavigationState<T>;\n activeColor?: string;\n inactiveColor?: string;\n pressColor?: string;\n pressOpacity?: number;\n getLabelText: (scene: Scene<T>) => string | undefined;\n getAccessible: (scene: Scene<T>) => boolean | undefined;\n getAccessibilityLabel: (scene: Scene<T>) => string | undefined;\n getTestID: (scene: Scene<T>) => string | undefined;\n renderLabel?: (scene: {\n route: T;\n focused: boolean;\n color: string;\n }) => React.ReactNode;\n renderIcon?: (scene: {\n route: T;\n focused: boolean;\n color: string;\n }) => React.ReactNode;\n renderBadge?: (scene: Scene<T>) => React.ReactNode;\n onLayout?: (event: LayoutChangeEvent) => void;\n onPress: () => void;\n onLongPress: () => void;\n labelStyle?: StyleProp<TextStyle>;\n style: StyleProp<ViewStyle>;\n};\n\nconst DEFAULT_ACTIVE_COLOR = 'rgba(255, 255, 255, 1)';\nconst DEFAULT_INACTIVE_COLOR = 'rgba(255, 255, 255, 0.7)';\n\nexport default class TabBarItem<T extends Route> extends React.Component<\n Props<T>\n> {\n private getActiveOpacity = (\n position: Animated.AnimatedInterpolation,\n routes: Route[],\n tabIndex: number\n ) => {\n if (routes.length > 1) {\n const inputRange = routes.map((_, i) => i);\n\n return position.interpolate({\n inputRange,\n outputRange: inputRange.map((i) => (i === tabIndex ? 1 : 0)),\n });\n } else {\n return 1;\n }\n };\n\n private getInactiveOpacity = (\n position: Animated.AnimatedInterpolation,\n routes: Route[],\n tabIndex: number\n ) => {\n if (routes.length > 1) {\n const inputRange = routes.map((_: Route, i: number) => i);\n\n return position.interpolate({\n inputRange,\n outputRange: inputRange.map((i: number) => (i === tabIndex ? 0 : 1)),\n });\n } else {\n return 0;\n }\n };\n\n render() {\n const {\n route,\n position,\n navigationState,\n renderLabel: renderLabelCustom,\n renderIcon,\n renderBadge,\n getLabelText,\n getTestID,\n getAccessibilityLabel,\n getAccessible,\n activeColor: activeColorCustom,\n inactiveColor: inactiveColorCustom,\n pressColor,\n pressOpacity,\n labelStyle,\n style,\n onLayout,\n onPress,\n onLongPress,\n } = this.props;\n\n const tabIndex = navigationState.routes.indexOf(route);\n const isFocused = navigationState.index === tabIndex;\n\n const labelColorFromStyle = StyleSheet.flatten(labelStyle || {}).color;\n\n const activeColor =\n activeColorCustom !== undefined\n ? activeColorCustom\n : typeof labelColorFromStyle === 'string'\n ? labelColorFromStyle\n : DEFAULT_ACTIVE_COLOR;\n const inactiveColor =\n inactiveColorCustom !== undefined\n ? inactiveColorCustom\n : typeof labelColorFromStyle === 'string'\n ? labelColorFromStyle\n : DEFAULT_INACTIVE_COLOR;\n\n const activeOpacity = this.getActiveOpacity(\n position,\n navigationState.routes,\n tabIndex\n );\n const inactiveOpacity = this.getInactiveOpacity(\n position,\n navigationState.routes,\n tabIndex\n );\n\n let icon: React.ReactNode | null = null;\n let label: React.ReactNode | null = null;\n\n if (renderIcon) {\n const activeIcon = renderIcon({\n route,\n focused: true,\n color: activeColor,\n });\n const inactiveIcon = renderIcon({\n route,\n focused: false,\n color: inactiveColor,\n });\n\n if (inactiveIcon != null && activeIcon != null) {\n icon = (\n <View style={styles.icon}>\n <Animated.View style={{ opacity: inactiveOpacity }}>\n {inactiveIcon}\n </Animated.View>\n <Animated.View\n style={[StyleSheet.absoluteFill, { opacity: activeOpacity }]}\n >\n {activeIcon}\n </Animated.View>\n </View>\n );\n }\n }\n\n const renderLabel =\n renderLabelCustom !== undefined\n ? renderLabelCustom\n : ({ route, color }: { route: T; color: string }) => {\n const labelText = getLabelText({ route });\n\n if (typeof labelText === 'string') {\n return (\n <Animated.Text\n style={[\n styles.label,\n icon ? { marginTop: 0 } : null,\n labelStyle,\n { color },\n ]}\n >\n {labelText}\n </Animated.Text>\n );\n }\n\n return labelText;\n };\n\n if (renderLabel) {\n const activeLabel = renderLabel({\n route,\n focused: true,\n color: activeColor,\n });\n const inactiveLabel = renderLabel({\n route,\n focused: false,\n color: inactiveColor,\n });\n\n label = (\n <View>\n <Animated.View style={{ opacity: inactiveOpacity }}>\n {inactiveLabel}\n </Animated.View>\n <Animated.View\n style={[StyleSheet.absoluteFill, { opacity: activeOpacity }]}\n >\n {activeLabel}\n </Animated.View>\n </View>\n );\n }\n\n const tabStyle = StyleSheet.flatten(style);\n const isWidthSet = tabStyle?.width !== undefined;\n const tabContainerStyle: ViewStyle | null = isWidthSet ? null : { flex: 1 };\n\n const scene = { route };\n\n let accessibilityLabel = getAccessibilityLabel(scene);\n\n accessibilityLabel =\n typeof accessibilityLabel !== 'undefined'\n ? accessibilityLabel\n : getLabelText(scene);\n\n const badge = renderBadge ? renderBadge(scene) : null;\n\n return (\n <PlatformPressable\n android_ripple={{ borderless: true }}\n testID={getTestID(scene)}\n accessible={getAccessible(scene)}\n accessibilityLabel={accessibilityLabel}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: isFocused }}\n // @ts-ignore: this is to support older React Native versions\n accessibilityStates={isFocused ? ['selected'] : []}\n pressColor={pressColor}\n pressOpacity={pressOpacity}\n delayPressIn={0}\n onLayout={onLayout}\n onPress={onPress}\n onLongPress={onLongPress}\n style={[styles.pressable, tabContainerStyle]}\n >\n <View pointerEvents=\"none\" style={[styles.item, tabStyle]}>\n {icon}\n {label}\n {badge != null ? <View style={styles.badge}>{badge}</View> : null}\n </View>\n </PlatformPressable>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n label: {\n margin: 4,\n backgroundColor: 'transparent',\n textTransform: 'uppercase',\n },\n icon: {\n margin: 2,\n },\n item: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n padding: 10,\n minHeight: 48,\n },\n badge: {\n position: 'absolute',\n top: 0,\n right: 0,\n },\n pressable: {\n // The label is not pressable on Windows\n // Adding backgroundColor: 'transparent' seems to fix it\n backgroundColor: 'transparent',\n },\n});\n"],"mappings":"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"}
|
package/lib/module/TabView.js
CHANGED
|
@@ -1,27 +1,30 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign
|
|
1
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
2
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { StyleSheet, View } from 'react-native';
|
|
5
5
|
import TabBar from './TabBar';
|
|
6
6
|
import SceneView from './SceneView';
|
|
7
7
|
import Pager from './Pager';
|
|
8
|
-
export default function TabView({
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
8
|
+
export default function TabView(_ref) {
|
|
9
|
+
let {
|
|
10
|
+
onIndexChange,
|
|
11
|
+
navigationState,
|
|
12
|
+
renderScene,
|
|
13
|
+
initialLayout,
|
|
14
|
+
keyboardDismissMode = 'auto',
|
|
15
|
+
lazy = false,
|
|
16
|
+
lazyPreloadDistance = 0,
|
|
17
|
+
onSwipeStart,
|
|
18
|
+
onSwipeEnd,
|
|
19
|
+
renderLazyPlaceholder = () => null,
|
|
20
|
+
renderTabBar = props => /*#__PURE__*/React.createElement(TabBar, props),
|
|
21
|
+
sceneContainerStyle,
|
|
22
|
+
pagerStyle,
|
|
23
|
+
style,
|
|
24
|
+
swipeEnabled = true,
|
|
25
|
+
tabBarPosition = 'top',
|
|
26
|
+
animationEnabled = true
|
|
27
|
+
} = _ref;
|
|
25
28
|
const [layout, setLayout] = React.useState({
|
|
26
29
|
width: 0,
|
|
27
30
|
height: 0,
|
|
@@ -61,13 +64,16 @@ export default function TabView({
|
|
|
61
64
|
swipeEnabled: swipeEnabled,
|
|
62
65
|
onSwipeStart: onSwipeStart,
|
|
63
66
|
onSwipeEnd: onSwipeEnd,
|
|
64
|
-
onIndexChange: jumpToIndex
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
onIndexChange: jumpToIndex,
|
|
68
|
+
animationEnabled: animationEnabled,
|
|
69
|
+
style: pagerStyle
|
|
70
|
+
}, _ref2 => {
|
|
71
|
+
let {
|
|
72
|
+
position,
|
|
73
|
+
render,
|
|
74
|
+
addEnterListener,
|
|
75
|
+
jumpTo
|
|
76
|
+
} = _ref2;
|
|
71
77
|
// All of the props here must not change between re-renders
|
|
72
78
|
// This is crucial to optimizing the routes with PureComponent
|
|
73
79
|
const sceneRendererProps = {
|
|
@@ -88,13 +94,16 @@ export default function TabView({
|
|
|
88
94
|
lazyPreloadDistance: lazyPreloadDistance,
|
|
89
95
|
navigationState: navigationState,
|
|
90
96
|
style: sceneContainerStyle
|
|
91
|
-
}),
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
97
|
+
}), _ref3 => {
|
|
98
|
+
let {
|
|
99
|
+
loading
|
|
100
|
+
} = _ref3;
|
|
101
|
+
return loading ? renderLazyPlaceholder({
|
|
102
|
+
route
|
|
103
|
+
}) : renderScene({ ...sceneRendererProps,
|
|
104
|
+
route
|
|
105
|
+
});
|
|
106
|
+
});
|
|
98
107
|
})), tabBarPosition === 'bottom' && renderTabBar({ ...sceneRendererProps,
|
|
99
108
|
navigationState
|
|
100
109
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["React","StyleSheet","View","TabBar","SceneView","Pager","TabView","onIndexChange","navigationState","renderScene","initialLayout","keyboardDismissMode","lazy","lazyPreloadDistance","onSwipeStart","onSwipeEnd","renderLazyPlaceholder","renderTabBar","props","sceneContainerStyle","pagerStyle","style","swipeEnabled","tabBarPosition","animationEnabled","layout","setLayout","useState","width","height","jumpToIndex","index","handleLayout","e","nativeEvent","prevLayout","styles","pager","position","render","addEnterListener","jumpTo","sceneRendererProps","routes","map","route","i","key","loading","create","flex","overflow"],"sources":["TabView.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n StyleSheet,\n View,\n StyleProp,\n ViewStyle,\n LayoutChangeEvent,\n} from 'react-native';\nimport TabBar from './TabBar';\nimport SceneView from './SceneView';\nimport Pager from './Pager';\nimport type {\n Layout,\n NavigationState,\n Route,\n SceneRendererProps,\n PagerProps,\n} from './types';\n\nexport type Props<T extends Route> = PagerProps & {\n onIndexChange: (index: number) => void;\n navigationState: NavigationState<T>;\n renderScene: (props: SceneRendererProps & { route: T }) => React.ReactNode;\n renderLazyPlaceholder?: (props: { route: T }) => React.ReactNode;\n renderTabBar?: (\n props: SceneRendererProps & { navigationState: NavigationState<T> }\n ) => React.ReactNode;\n tabBarPosition?: 'top' | 'bottom';\n initialLayout?: Partial<Layout>;\n lazy?: ((props: { route: T }) => boolean) | boolean;\n lazyPreloadDistance?: number;\n sceneContainerStyle?: StyleProp<ViewStyle>;\n pagerStyle?: StyleProp<ViewStyle>;\n style?: StyleProp<ViewStyle>;\n};\n\nexport default function TabView<T extends Route>({\n onIndexChange,\n navigationState,\n renderScene,\n initialLayout,\n keyboardDismissMode = 'auto',\n lazy = false,\n lazyPreloadDistance = 0,\n onSwipeStart,\n onSwipeEnd,\n renderLazyPlaceholder = () => null,\n renderTabBar = (props) => <TabBar {...props} />,\n sceneContainerStyle,\n pagerStyle,\n style,\n swipeEnabled = true,\n tabBarPosition = 'top',\n animationEnabled = true,\n}: Props<T>) {\n const [layout, setLayout] = React.useState({\n width: 0,\n height: 0,\n ...initialLayout,\n });\n\n const jumpToIndex = (index: number) => {\n if (index !== navigationState.index) {\n onIndexChange(index);\n }\n };\n\n const handleLayout = (e: LayoutChangeEvent) => {\n const { height, width } = e.nativeEvent.layout;\n\n setLayout((prevLayout) => {\n if (prevLayout.width === width && prevLayout.height === height) {\n return prevLayout;\n }\n\n return { height, width };\n });\n };\n\n return (\n <View onLayout={handleLayout} style={[styles.pager, style]}>\n <Pager\n layout={layout}\n navigationState={navigationState}\n keyboardDismissMode={keyboardDismissMode}\n swipeEnabled={swipeEnabled}\n onSwipeStart={onSwipeStart}\n onSwipeEnd={onSwipeEnd}\n onIndexChange={jumpToIndex}\n animationEnabled={animationEnabled}\n style={pagerStyle}\n >\n {({ position, render, addEnterListener, jumpTo }) => {\n // All of the props here must not change between re-renders\n // This is crucial to optimizing the routes with PureComponent\n const sceneRendererProps = {\n position,\n layout,\n jumpTo,\n };\n\n return (\n <React.Fragment>\n {tabBarPosition === 'top' &&\n renderTabBar({\n ...sceneRendererProps,\n navigationState,\n })}\n {render(\n navigationState.routes.map((route, i) => {\n return (\n <SceneView\n {...sceneRendererProps}\n addEnterListener={addEnterListener}\n key={route.key}\n index={i}\n lazy={typeof lazy === 'function' ? lazy({ route }) : lazy}\n lazyPreloadDistance={lazyPreloadDistance}\n navigationState={navigationState}\n style={sceneContainerStyle}\n >\n {({ loading }) =>\n loading\n ? renderLazyPlaceholder({ route })\n : renderScene({\n ...sceneRendererProps,\n route,\n })\n }\n </SceneView>\n );\n })\n )}\n {tabBarPosition === 'bottom' &&\n renderTabBar({\n ...sceneRendererProps,\n navigationState,\n })}\n </React.Fragment>\n );\n }}\n </Pager>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n pager: {\n flex: 1,\n overflow: 'hidden',\n },\n});\n"],"mappings":"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"}
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["default","TabBar","TabView","TabBarIndicator","TabBarItem","SceneMap"],"sources":["index.tsx"],"sourcesContent":["export { default as TabBar } from './TabBar';\nexport type { Props as TabBarProps } from './TabBar';\n\nexport { default as TabView } from './TabView';\nexport type { Props as TabViewProps } from './TabView';\n\nexport { default as TabBarIndicator } from './TabBarIndicator';\nexport type { Props as TabBarIndicatorProps } from './TabBarIndicator';\n\nexport { default as TabBarItem } from './TabBarItem';\nexport type { Props as TabBarItemProps } from './TabBarItem';\n\nexport { default as SceneMap } from './SceneMap';\n\nexport type { Route, NavigationState, SceneRendererProps } from './types';\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,MAApB,QAAkC,UAAlC;AAGA,SAASD,OAAO,IAAIE,OAApB,QAAmC,WAAnC;AAGA,SAASF,OAAO,IAAIG,eAApB,QAA2C,mBAA3C;AAGA,SAASH,OAAO,IAAII,UAApB,QAAsC,cAAtC;AAGA,SAASJ,OAAO,IAAIK,QAApB,QAAoC,YAApC"}
|
package/lib/module/types.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
export {};
|
|
2
2
|
//# sourceMappingURL=types.js.map
|
package/lib/module/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":[],"sources":["types.tsx"],"sourcesContent":["import type { Animated } from 'react-native';\nimport type { PagerViewProps } from 'react-native-pager-view';\n\nexport type Route = {\n key: string;\n icon?: string;\n title?: string;\n accessible?: boolean;\n accessibilityLabel?: string;\n testID?: string;\n};\n\nexport type Event = {\n defaultPrevented: boolean;\n preventDefault(): void;\n};\n\nexport type Scene<T extends Route> = {\n route: T;\n};\n\nexport type NavigationState<T extends Route> = {\n index: number;\n routes: T[];\n};\n\nexport type Layout = {\n width: number;\n height: number;\n};\n\nexport type Listener = (value: number) => void;\n\nexport type SceneRendererProps = {\n layout: Layout;\n position: Animated.AnimatedInterpolation;\n jumpTo: (key: string) => void;\n};\n\nexport type EventEmitterProps = {\n addEnterListener: (listener: Listener) => () => void;\n};\n\nexport type PagerProps = Omit<\n PagerViewProps,\n | 'initialPage'\n | 'scrollEnabled'\n | 'onPageScroll'\n | 'onPageSelected'\n | 'onPageScrollStateChanged'\n | 'keyboardDismissMode'\n | 'children'\n> & {\n keyboardDismissMode?: 'none' | 'on-drag' | 'auto';\n swipeEnabled?: boolean;\n animationEnabled?: boolean;\n onSwipeStart?: () => void;\n onSwipeEnd?: () => void;\n};\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["React","Animated","useAnimatedValue","initialValue","lazyRef","useRef","current","undefined","Value"],"sources":["useAnimatedValue.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Animated } from 'react-native';\n\nexport default function useAnimatedValue(initialValue: number) {\n const lazyRef = React.useRef<Animated.Value>();\n\n if (lazyRef.current === undefined) {\n lazyRef.current = new Animated.Value(initialValue);\n }\n\n return lazyRef.current as Animated.Value;\n}\n"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,QAAT,QAAyB,cAAzB;AAEA,eAAe,SAASC,gBAAT,CAA0BC,YAA1B,EAAgD;EAC7D,MAAMC,OAAO,GAAGJ,KAAK,CAACK,MAAN,EAAhB;;EAEA,IAAID,OAAO,CAACE,OAAR,KAAoBC,SAAxB,EAAmC;IACjCH,OAAO,CAACE,OAAR,GAAkB,IAAIL,QAAQ,CAACO,KAAb,CAAmBL,YAAnB,CAAlB;EACD;;EAED,OAAOC,OAAO,CAACE,OAAf;AACD"}
|
|
@@ -10,5 +10,5 @@ declare type Props<T extends Route> = PagerProps & {
|
|
|
10
10
|
jumpTo: (key: string) => void;
|
|
11
11
|
}) => React.ReactElement;
|
|
12
12
|
};
|
|
13
|
-
export default function PagerViewAdapter<T extends Route>({ keyboardDismissMode, swipeEnabled, navigationState, onIndexChange, onSwipeStart, onSwipeEnd, children, style, ...rest }: Props<T>): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
13
|
+
export default function PagerViewAdapter<T extends Route>({ keyboardDismissMode, swipeEnabled, navigationState, onIndexChange, onSwipeStart, onSwipeEnd, children, style, animationEnabled, ...rest }: Props<T>): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
14
14
|
export {};
|
|
@@ -11,5 +11,5 @@ declare type Props<T extends Route> = PagerProps & {
|
|
|
11
11
|
jumpTo: (key: string) => void;
|
|
12
12
|
}) => React.ReactElement;
|
|
13
13
|
};
|
|
14
|
-
export default function PanResponderAdapter<T extends Route>({ layout, keyboardDismissMode, swipeEnabled, navigationState, onIndexChange, onSwipeStart, onSwipeEnd, children, style, }: Props<T>): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
14
|
+
export default function PanResponderAdapter<T extends Route>({ layout, keyboardDismissMode, swipeEnabled, navigationState, onIndexChange, onSwipeStart, onSwipeEnd, children, style, animationEnabled, }: Props<T>): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
15
15
|
export {};
|
|
@@ -36,6 +36,7 @@ export declare type Props<T extends Route> = SceneRendererProps & {
|
|
|
36
36
|
labelStyle?: StyleProp<TextStyle>;
|
|
37
37
|
contentContainerStyle?: StyleProp<ViewStyle>;
|
|
38
38
|
style?: StyleProp<ViewStyle>;
|
|
39
|
+
gap?: number;
|
|
39
40
|
};
|
|
40
41
|
declare type State = {
|
|
41
42
|
layout: Layout;
|
|
@@ -50,12 +51,13 @@ export default class TabBar<T extends Route> extends React.Component<Props<T>, S
|
|
|
50
51
|
getAccessibilityLabel: ({ route }: Scene<Route>) => string | undefined;
|
|
51
52
|
getTestID: ({ route }: Scene<Route>) => string | undefined;
|
|
52
53
|
renderIndicator: (props: IndicatorProps<Route>) => JSX.Element;
|
|
54
|
+
gap: number;
|
|
53
55
|
};
|
|
54
56
|
state: State;
|
|
55
57
|
componentDidUpdate(prevProps: Props<T>, prevState: State): void;
|
|
56
58
|
private measuredTabWidths;
|
|
57
59
|
private scrollAmount;
|
|
58
|
-
private
|
|
60
|
+
private flatListRef;
|
|
59
61
|
private getFlattenedTabWidth;
|
|
60
62
|
private getComputedTabWidth;
|
|
61
63
|
private getMaxScrollDistance;
|
|
@@ -7,6 +7,7 @@ export declare type Props<T extends Route> = SceneRendererProps & {
|
|
|
7
7
|
width: string | number;
|
|
8
8
|
style?: StyleProp<ViewStyle>;
|
|
9
9
|
getTabWidth: GetTabWidth;
|
|
10
|
+
gap?: number;
|
|
10
11
|
};
|
|
11
12
|
export default class TabBarIndicator<T extends Route> extends React.Component<Props<T>> {
|
|
12
13
|
componentDidMount(): void;
|
|
@@ -20,6 +20,7 @@ export declare type Props<T extends Route> = PagerProps & {
|
|
|
20
20
|
}) => boolean) | boolean;
|
|
21
21
|
lazyPreloadDistance?: number;
|
|
22
22
|
sceneContainerStyle?: StyleProp<ViewStyle>;
|
|
23
|
+
pagerStyle?: StyleProp<ViewStyle>;
|
|
23
24
|
style?: StyleProp<ViewStyle>;
|
|
24
25
|
};
|
|
25
|
-
export default function TabView<T extends Route>({ onIndexChange, navigationState, renderScene, initialLayout, keyboardDismissMode, lazy, lazyPreloadDistance, onSwipeStart, onSwipeEnd, renderLazyPlaceholder, renderTabBar, sceneContainerStyle, style, swipeEnabled, tabBarPosition, }: Props<T>): JSX.Element;
|
|
26
|
+
export default function TabView<T extends Route>({ onIndexChange, navigationState, renderScene, initialLayout, keyboardDismissMode, lazy, lazyPreloadDistance, onSwipeStart, onSwipeEnd, renderLazyPlaceholder, renderTabBar, sceneContainerStyle, pagerStyle, style, swipeEnabled, tabBarPosition, animationEnabled, }: Props<T>): JSX.Element;
|
|
@@ -35,6 +35,7 @@ export declare type EventEmitterProps = {
|
|
|
35
35
|
export declare type PagerProps = Omit<PagerViewProps, 'initialPage' | 'scrollEnabled' | 'onPageScroll' | 'onPageSelected' | 'onPageScrollStateChanged' | 'keyboardDismissMode' | 'children'> & {
|
|
36
36
|
keyboardDismissMode?: 'none' | 'on-drag' | 'auto';
|
|
37
37
|
swipeEnabled?: boolean;
|
|
38
|
+
animationEnabled?: boolean;
|
|
38
39
|
onSwipeStart?: () => void;
|
|
39
40
|
onSwipeEnd?: () => void;
|
|
40
41
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-tab-view",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.1",
|
|
4
4
|
"description": "Tab view component for React Native",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"react-native": "src/index.tsx",
|
|
@@ -44,26 +44,27 @@
|
|
|
44
44
|
},
|
|
45
45
|
"homepage": "https://github.com/satya164/react-native-tab-view#readme",
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"@commitlint/config-conventional": "^
|
|
48
|
-
"@expo/vector-icons": "^
|
|
49
|
-
"@release-it/conventional-changelog": "^
|
|
50
|
-
"@types/react": "^
|
|
51
|
-
"@types/react-native": "0.
|
|
52
|
-
"babel-jest": "^
|
|
47
|
+
"@commitlint/config-conventional": "^17.1.0",
|
|
48
|
+
"@expo/vector-icons": "^13.0.0",
|
|
49
|
+
"@release-it/conventional-changelog": "^5.1.0",
|
|
50
|
+
"@types/react": "^18.0.14",
|
|
51
|
+
"@types/react-native": "0.69.5",
|
|
52
|
+
"babel-jest": "^29.0.1",
|
|
53
|
+
"babel-loader": "^8.2.5",
|
|
53
54
|
"babel-preset-react-native": "^4.0.0",
|
|
54
|
-
"commitlint": "^
|
|
55
|
-
"eslint": "^
|
|
56
|
-
"eslint-config-satya164": "^3.1.
|
|
55
|
+
"commitlint": "^17.1.2",
|
|
56
|
+
"eslint": "^8.23.0",
|
|
57
|
+
"eslint-config-satya164": "^3.1.11",
|
|
57
58
|
"eslint-plugin-react-native-globals": "^0.1.2",
|
|
58
59
|
"husky": "^4.2.5",
|
|
59
|
-
"jest": "^
|
|
60
|
-
"prettier": "^2.
|
|
61
|
-
"react": "
|
|
62
|
-
"react-native": "
|
|
63
|
-
"react-native-builder-bob": "^0.18.
|
|
64
|
-
"react-native-pager-view": "
|
|
65
|
-
"release-it": "^
|
|
66
|
-
"typescript": "^4.
|
|
60
|
+
"jest": "^29.0.1",
|
|
61
|
+
"prettier": "^2.7.1",
|
|
62
|
+
"react": "18.0.0",
|
|
63
|
+
"react-native": "0.69.5",
|
|
64
|
+
"react-native-builder-bob": "^0.18.3",
|
|
65
|
+
"react-native-pager-view": "5.4.24",
|
|
66
|
+
"release-it": "^15.4.0",
|
|
67
|
+
"typescript": "^4.8.2"
|
|
67
68
|
},
|
|
68
69
|
"peerDependencies": {
|
|
69
70
|
"react": "*",
|
package/src/PagerViewAdapter.tsx
CHANGED
|
@@ -41,6 +41,7 @@ export default function PagerViewAdapter<T extends Route>({
|
|
|
41
41
|
onSwipeEnd,
|
|
42
42
|
children,
|
|
43
43
|
style,
|
|
44
|
+
animationEnabled,
|
|
44
45
|
...rest
|
|
45
46
|
}: Props<T>) {
|
|
46
47
|
const { index } = navigationState;
|
|
@@ -58,13 +59,21 @@ export default function PagerViewAdapter<T extends Route>({
|
|
|
58
59
|
navigationStateRef.current = navigationState;
|
|
59
60
|
});
|
|
60
61
|
|
|
61
|
-
const jumpTo = React.useCallback(
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
62
|
+
const jumpTo = React.useCallback(
|
|
63
|
+
(key: string) => {
|
|
64
|
+
const index = navigationStateRef.current.routes.findIndex(
|
|
65
|
+
(route: { key: string }) => route.key === key
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
if (animationEnabled) {
|
|
69
|
+
pagerRef.current?.setPage(index);
|
|
70
|
+
} else {
|
|
71
|
+
pagerRef.current?.setPageWithoutAnimation(index);
|
|
72
|
+
position.setValue(index);
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
[animationEnabled, position]
|
|
76
|
+
);
|
|
68
77
|
|
|
69
78
|
React.useEffect(() => {
|
|
70
79
|
if (keyboardDismissMode === 'auto') {
|
|
@@ -72,9 +81,14 @@ export default function PagerViewAdapter<T extends Route>({
|
|
|
72
81
|
}
|
|
73
82
|
|
|
74
83
|
if (indexRef.current !== index) {
|
|
75
|
-
|
|
84
|
+
if (animationEnabled) {
|
|
85
|
+
pagerRef.current?.setPage(index);
|
|
86
|
+
} else {
|
|
87
|
+
pagerRef.current?.setPageWithoutAnimation(index);
|
|
88
|
+
position.setValue(index);
|
|
89
|
+
}
|
|
76
90
|
}
|
|
77
|
-
}, [keyboardDismissMode, index]);
|
|
91
|
+
}, [keyboardDismissMode, index, animationEnabled, position]);
|
|
78
92
|
|
|
79
93
|
const onPageScrollStateChanged = (
|
|
80
94
|
state: PageScrollStateChangedNativeEvent
|
|
@@ -58,6 +58,7 @@ export default function PanResponderAdapter<T extends Route>({
|
|
|
58
58
|
onSwipeEnd,
|
|
59
59
|
children,
|
|
60
60
|
style,
|
|
61
|
+
animationEnabled = false,
|
|
61
62
|
}: Props<T>) {
|
|
62
63
|
const { routes, index } = navigationState;
|
|
63
64
|
|
|
@@ -76,27 +77,32 @@ export default function PanResponderAdapter<T extends Route>({
|
|
|
76
77
|
const swipeDistanceThreshold = layout.width / 1.75;
|
|
77
78
|
|
|
78
79
|
const jumpToIndex = React.useCallback(
|
|
79
|
-
(index: number) => {
|
|
80
|
+
(index: number, animate = animationEnabled) => {
|
|
80
81
|
const offset = -index * layoutRef.current.width;
|
|
81
82
|
|
|
82
83
|
const { timing, ...transitionConfig } = DefaultTransitionSpec;
|
|
83
84
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
85
|
+
if (animate) {
|
|
86
|
+
Animated.parallel([
|
|
87
|
+
timing(panX, {
|
|
88
|
+
...transitionConfig,
|
|
89
|
+
toValue: offset,
|
|
90
|
+
useNativeDriver: false,
|
|
91
|
+
}),
|
|
92
|
+
]).start(({ finished }) => {
|
|
93
|
+
if (finished) {
|
|
94
|
+
onIndexChangeRef.current(index);
|
|
95
|
+
pendingIndexRef.current = undefined;
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
pendingIndexRef.current = index;
|
|
99
|
+
} else {
|
|
100
|
+
panX.setValue(offset);
|
|
101
|
+
onIndexChangeRef.current(index);
|
|
102
|
+
pendingIndexRef.current = undefined;
|
|
103
|
+
}
|
|
98
104
|
},
|
|
99
|
-
[panX]
|
|
105
|
+
[animationEnabled, panX]
|
|
100
106
|
);
|
|
101
107
|
|
|
102
108
|
React.useEffect(() => {
|
|
@@ -230,7 +236,7 @@ export default function PanResponderAdapter<T extends Route>({
|
|
|
230
236
|
nextIndex = currentIndex;
|
|
231
237
|
}
|
|
232
238
|
|
|
233
|
-
jumpToIndex(nextIndex);
|
|
239
|
+
jumpToIndex(nextIndex, true);
|
|
234
240
|
};
|
|
235
241
|
|
|
236
242
|
// TODO: use the listeners
|