react-native-tab-view 4.2.1 → 5.0.0-alpha.0
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/lib/module/Pager.android.js +1 -1
- package/lib/module/Pager.android.js.map +1 -1
- package/lib/module/Pager.ios.js +1 -1
- package/lib/module/Pager.ios.js.map +1 -1
- package/lib/module/PagerViewAdapter.js +3 -127
- package/lib/module/PagerViewAdapter.js.map +1 -1
- package/lib/module/PagerViewAdapter.native.js +130 -0
- package/lib/module/PagerViewAdapter.native.js.map +1 -0
- package/lib/module/PanResponderAdapter.js +43 -31
- package/lib/module/PanResponderAdapter.js.map +1 -1
- package/lib/module/PlatformPressable.js.map +1 -1
- package/lib/module/SceneView.js +22 -31
- package/lib/module/SceneView.js.map +1 -1
- package/lib/module/ScrollViewAdapter.js +210 -0
- package/lib/module/ScrollViewAdapter.js.map +1 -0
- package/lib/module/TabBar.js +98 -61
- package/lib/module/TabBar.js.map +1 -1
- package/lib/module/TabBarIndicator.js +6 -9
- package/lib/module/TabBarIndicator.js.map +1 -1
- package/lib/module/TabBarItem.js +4 -4
- package/lib/module/TabBarItem.js.map +1 -1
- package/lib/module/TabView.js +65 -84
- package/lib/module/TabView.js.map +1 -1
- package/lib/module/index.js +3 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/useMeasureLayout.js +36 -0
- package/lib/module/useMeasureLayout.js.map +1 -0
- package/lib/typescript/src/PagerViewAdapter.d.ts +3 -17
- package/lib/typescript/src/PagerViewAdapter.d.ts.map +1 -1
- package/lib/typescript/src/PagerViewAdapter.native.d.ts +6 -0
- package/lib/typescript/src/PagerViewAdapter.native.d.ts.map +1 -0
- package/lib/typescript/src/PanResponderAdapter.d.ts +3 -17
- package/lib/typescript/src/PanResponderAdapter.d.ts.map +1 -1
- package/lib/typescript/src/PlatformPressable.d.ts +2 -2
- package/lib/typescript/src/PlatformPressable.d.ts.map +1 -1
- package/lib/typescript/src/SceneView.d.ts +1 -1
- package/lib/typescript/src/SceneView.d.ts.map +1 -1
- package/lib/typescript/src/ScrollViewAdapter.d.ts +12 -0
- package/lib/typescript/src/ScrollViewAdapter.d.ts.map +1 -0
- package/lib/typescript/src/TabBar.d.ts +7 -7
- package/lib/typescript/src/TabBar.d.ts.map +1 -1
- package/lib/typescript/src/TabBarIndicator.d.ts +1 -1
- package/lib/typescript/src/TabBarIndicator.d.ts.map +1 -1
- package/lib/typescript/src/TabBarItem.d.ts +4 -4
- package/lib/typescript/src/TabBarItem.d.ts.map +1 -1
- package/lib/typescript/src/TabBarItemLabel.d.ts +2 -2
- package/lib/typescript/src/TabBarItemLabel.d.ts.map +1 -1
- package/lib/typescript/src/TabView.d.ts +5 -5
- package/lib/typescript/src/TabView.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +4 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +64 -8
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/useMeasureLayout.d.ts +5 -0
- package/lib/typescript/src/useMeasureLayout.d.ts.map +1 -0
- package/package.json +11 -11
- package/src/PagerViewAdapter.native.tsx +174 -0
- package/src/PagerViewAdapter.tsx +8 -181
- package/src/PanResponderAdapter.tsx +64 -77
- package/src/PlatformPressable.tsx +2 -1
- package/src/SceneView.tsx +23 -45
- package/src/ScrollViewAdapter.tsx +268 -0
- package/src/TabBar.tsx +134 -133
- package/src/TabBarIndicator.tsx +7 -11
- package/src/TabBarItem.tsx +8 -6
- package/src/TabBarItemLabel.tsx +2 -2
- package/src/TabView.tsx +79 -100
- package/src/index.tsx +10 -0
- package/src/types.tsx +75 -17
- package/src/useMeasureLayout.tsx +34 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PagerViewAdapter","Pager"],"sourceRoot":"../../src","sources":["Pager.android.tsx"],"mappings":";;AAAA,SAASA,gBAAgB,IAAIC,KAAK,QAAQ,
|
|
1
|
+
{"version":3,"names":["PagerViewAdapter","Pager"],"sourceRoot":"../../src","sources":["Pager.android.tsx"],"mappings":";;AAAA,SAASA,gBAAgB,IAAIC,KAAK,QAAQ,oBAAoB","ignoreList":[]}
|
package/lib/module/Pager.ios.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PagerViewAdapter","Pager"],"sourceRoot":"../../src","sources":["Pager.ios.tsx"],"mappings":";;AAAA,SAASA,gBAAgB,IAAIC,KAAK,QAAQ,
|
|
1
|
+
{"version":3,"names":["PagerViewAdapter","Pager"],"sourceRoot":"../../src","sources":["Pager.ios.tsx"],"mappings":";;AAAA,SAASA,gBAAgB,IAAIC,KAAK,QAAQ,oBAAoB","ignoreList":[]}
|
|
@@ -1,130 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import useLatestCallback from 'use-latest-callback';
|
|
7
|
-
import { useAnimatedValue } from "./useAnimatedValue.js";
|
|
8
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
-
const AnimatedViewPager = Animated.createAnimatedComponent(ViewPager);
|
|
10
|
-
const useNativeDriver = Platform.OS !== 'web';
|
|
11
|
-
export function PagerViewAdapter({
|
|
12
|
-
keyboardDismissMode = 'auto',
|
|
13
|
-
swipeEnabled = true,
|
|
14
|
-
navigationState,
|
|
15
|
-
onIndexChange,
|
|
16
|
-
onTabSelect,
|
|
17
|
-
onSwipeStart,
|
|
18
|
-
onSwipeEnd,
|
|
19
|
-
children,
|
|
20
|
-
style,
|
|
21
|
-
animationEnabled,
|
|
22
|
-
...rest
|
|
23
|
-
}) {
|
|
24
|
-
const {
|
|
25
|
-
index
|
|
26
|
-
} = navigationState;
|
|
27
|
-
const listenersRef = React.useRef([]);
|
|
28
|
-
const pagerRef = React.useRef(null);
|
|
29
|
-
const indexRef = React.useRef(index);
|
|
30
|
-
const navigationStateRef = React.useRef(navigationState);
|
|
31
|
-
const position = useAnimatedValue(index);
|
|
32
|
-
const offset = useAnimatedValue(0);
|
|
33
|
-
React.useEffect(() => {
|
|
34
|
-
navigationStateRef.current = navigationState;
|
|
35
|
-
});
|
|
36
|
-
const jumpTo = useLatestCallback(key => {
|
|
37
|
-
const index = navigationStateRef.current.routes.findIndex(route => route.key === key);
|
|
38
|
-
if (animationEnabled) {
|
|
39
|
-
pagerRef.current?.setPage(index);
|
|
40
|
-
} else {
|
|
41
|
-
pagerRef.current?.setPageWithoutAnimation(index);
|
|
42
|
-
position.setValue(index);
|
|
43
|
-
}
|
|
44
|
-
onIndexChange(index);
|
|
45
|
-
});
|
|
46
|
-
React.useEffect(() => {
|
|
47
|
-
if (keyboardDismissMode === 'auto') {
|
|
48
|
-
Keyboard.dismiss();
|
|
49
|
-
}
|
|
50
|
-
if (indexRef.current !== index) {
|
|
51
|
-
if (animationEnabled) {
|
|
52
|
-
pagerRef.current?.setPage(index);
|
|
53
|
-
} else {
|
|
54
|
-
pagerRef.current?.setPageWithoutAnimation(index);
|
|
55
|
-
position.setValue(index);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}, [keyboardDismissMode, index, animationEnabled, position]);
|
|
59
|
-
const onPageScrollStateChanged = state => {
|
|
60
|
-
const {
|
|
61
|
-
pageScrollState
|
|
62
|
-
} = state.nativeEvent;
|
|
63
|
-
switch (pageScrollState) {
|
|
64
|
-
case 'idle':
|
|
65
|
-
onSwipeEnd?.();
|
|
66
|
-
return;
|
|
67
|
-
case 'dragging':
|
|
68
|
-
{
|
|
69
|
-
const subscription = offset.addListener(({
|
|
70
|
-
value
|
|
71
|
-
}) => {
|
|
72
|
-
const next = index + (value > 0 ? Math.ceil(value) : Math.floor(value));
|
|
73
|
-
if (next !== index) {
|
|
74
|
-
listenersRef.current.forEach(listener => listener(next));
|
|
75
|
-
}
|
|
76
|
-
offset.removeListener(subscription);
|
|
77
|
-
});
|
|
78
|
-
onSwipeStart?.();
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
const addEnterListener = useLatestCallback(listener => {
|
|
84
|
-
listenersRef.current.push(listener);
|
|
85
|
-
return () => {
|
|
86
|
-
const index = listenersRef.current.indexOf(listener);
|
|
87
|
-
if (index > -1) {
|
|
88
|
-
listenersRef.current.splice(index, 1);
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
});
|
|
92
|
-
const memoizedPosition = React.useMemo(() => Animated.add(position, offset), [offset, position]);
|
|
93
|
-
return children({
|
|
94
|
-
position: memoizedPosition,
|
|
95
|
-
addEnterListener,
|
|
96
|
-
jumpTo,
|
|
97
|
-
render: children => /*#__PURE__*/_jsx(AnimatedViewPager, {
|
|
98
|
-
...rest,
|
|
99
|
-
ref: pagerRef,
|
|
100
|
-
style: [styles.container, style],
|
|
101
|
-
initialPage: index,
|
|
102
|
-
keyboardDismissMode: keyboardDismissMode === 'auto' ? 'on-drag' : keyboardDismissMode,
|
|
103
|
-
onPageScroll: Animated.event([{
|
|
104
|
-
nativeEvent: {
|
|
105
|
-
position: position,
|
|
106
|
-
offset: offset
|
|
107
|
-
}
|
|
108
|
-
}], {
|
|
109
|
-
useNativeDriver
|
|
110
|
-
}),
|
|
111
|
-
onPageSelected: e => {
|
|
112
|
-
const index = e.nativeEvent.position;
|
|
113
|
-
indexRef.current = index;
|
|
114
|
-
onIndexChange(index);
|
|
115
|
-
onTabSelect?.({
|
|
116
|
-
index
|
|
117
|
-
});
|
|
118
|
-
},
|
|
119
|
-
onPageScrollStateChanged: onPageScrollStateChanged,
|
|
120
|
-
scrollEnabled: swipeEnabled,
|
|
121
|
-
children: children
|
|
122
|
-
})
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
const styles = StyleSheet.create({
|
|
126
|
-
container: {
|
|
127
|
-
flex: 1
|
|
128
|
-
}
|
|
129
|
-
});
|
|
3
|
+
export const PagerViewAdapter = () => {
|
|
4
|
+
throw new Error(`'PagerViewAdapter' is not supported on web. Use 'PanResponderAdapter' or 'ScrollViewAdapter' instead.`);
|
|
5
|
+
};
|
|
130
6
|
//# sourceMappingURL=PagerViewAdapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["PagerViewAdapter","Error"],"sourceRoot":"../../src","sources":["PagerViewAdapter.tsx"],"mappings":";;AAOA,OAAO,MAAMA,gBAA6C,GAAGA,CAAA,KAAM;EACjE,MAAM,IAAIC,KAAK,CACb,uGACF,CAAC;AACH,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Animated, Keyboard, Platform, StyleSheet } from 'react-native';
|
|
5
|
+
import ViewPager from 'react-native-pager-view';
|
|
6
|
+
import useLatestCallback from 'use-latest-callback';
|
|
7
|
+
import { useAnimatedValue } from "./useAnimatedValue.js";
|
|
8
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
+
const AnimatedViewPager = Animated.createAnimatedComponent(ViewPager);
|
|
10
|
+
const useNativeDriver = Platform.OS !== 'web';
|
|
11
|
+
export function PagerViewAdapter({
|
|
12
|
+
keyboardDismissMode = 'auto',
|
|
13
|
+
swipeEnabled = true,
|
|
14
|
+
navigationState,
|
|
15
|
+
onIndexChange,
|
|
16
|
+
onTabSelect,
|
|
17
|
+
onSwipeStart,
|
|
18
|
+
onSwipeEnd,
|
|
19
|
+
children,
|
|
20
|
+
style,
|
|
21
|
+
animationEnabled,
|
|
22
|
+
...rest
|
|
23
|
+
}) {
|
|
24
|
+
const {
|
|
25
|
+
index
|
|
26
|
+
} = navigationState;
|
|
27
|
+
const listeners = React.useRef(new Set()).current;
|
|
28
|
+
const pagerRef = React.useRef(null);
|
|
29
|
+
const indexRef = React.useRef(index);
|
|
30
|
+
const navigationStateRef = React.useRef(navigationState);
|
|
31
|
+
const position = useAnimatedValue(index);
|
|
32
|
+
const offset = useAnimatedValue(0);
|
|
33
|
+
React.useEffect(() => {
|
|
34
|
+
navigationStateRef.current = navigationState;
|
|
35
|
+
});
|
|
36
|
+
const jumpTo = useLatestCallback(key => {
|
|
37
|
+
const index = navigationStateRef.current.routes.findIndex(route => route.key === key);
|
|
38
|
+
if (animationEnabled) {
|
|
39
|
+
pagerRef.current?.setPage(index);
|
|
40
|
+
} else {
|
|
41
|
+
pagerRef.current?.setPageWithoutAnimation(index);
|
|
42
|
+
position.setValue(index);
|
|
43
|
+
}
|
|
44
|
+
onIndexChange(index);
|
|
45
|
+
});
|
|
46
|
+
React.useEffect(() => {
|
|
47
|
+
if (keyboardDismissMode === 'auto') {
|
|
48
|
+
Keyboard.dismiss();
|
|
49
|
+
}
|
|
50
|
+
if (indexRef.current !== index) {
|
|
51
|
+
if (animationEnabled) {
|
|
52
|
+
pagerRef.current?.setPage(index);
|
|
53
|
+
} else {
|
|
54
|
+
pagerRef.current?.setPageWithoutAnimation(index);
|
|
55
|
+
position.setValue(index);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}, [keyboardDismissMode, index, animationEnabled, position]);
|
|
59
|
+
const onPageScrollStateChanged = state => {
|
|
60
|
+
const {
|
|
61
|
+
pageScrollState
|
|
62
|
+
} = state.nativeEvent;
|
|
63
|
+
switch (pageScrollState) {
|
|
64
|
+
case 'idle':
|
|
65
|
+
onSwipeEnd?.();
|
|
66
|
+
return;
|
|
67
|
+
case 'dragging':
|
|
68
|
+
{
|
|
69
|
+
const subscription = offset.addListener(({
|
|
70
|
+
value
|
|
71
|
+
}) => {
|
|
72
|
+
const next = index + (value > 0 ? Math.ceil(value) : Math.floor(value));
|
|
73
|
+
if (next !== index) {
|
|
74
|
+
listeners.forEach(listener => listener({
|
|
75
|
+
type: 'enter',
|
|
76
|
+
index: next
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
offset.removeListener(subscription);
|
|
80
|
+
});
|
|
81
|
+
onSwipeStart?.();
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const subscribe = useLatestCallback(listener => {
|
|
87
|
+
listeners.add(listener);
|
|
88
|
+
return () => {
|
|
89
|
+
listeners.delete(listener);
|
|
90
|
+
};
|
|
91
|
+
});
|
|
92
|
+
const memoizedPosition = React.useMemo(() => Animated.add(position, offset), [offset, position]);
|
|
93
|
+
return children({
|
|
94
|
+
position: memoizedPosition,
|
|
95
|
+
subscribe,
|
|
96
|
+
jumpTo,
|
|
97
|
+
render: children => /*#__PURE__*/_jsx(AnimatedViewPager, {
|
|
98
|
+
...rest,
|
|
99
|
+
ref: pagerRef,
|
|
100
|
+
style: [styles.container, style],
|
|
101
|
+
initialPage: index,
|
|
102
|
+
keyboardDismissMode: keyboardDismissMode === 'auto' ? 'on-drag' : keyboardDismissMode,
|
|
103
|
+
onPageScroll: Animated.event([{
|
|
104
|
+
nativeEvent: {
|
|
105
|
+
position: position,
|
|
106
|
+
offset: offset
|
|
107
|
+
}
|
|
108
|
+
}], {
|
|
109
|
+
useNativeDriver
|
|
110
|
+
}),
|
|
111
|
+
onPageSelected: e => {
|
|
112
|
+
const index = e.nativeEvent.position;
|
|
113
|
+
indexRef.current = index;
|
|
114
|
+
onIndexChange(index);
|
|
115
|
+
onTabSelect?.({
|
|
116
|
+
index
|
|
117
|
+
});
|
|
118
|
+
},
|
|
119
|
+
onPageScrollStateChanged: onPageScrollStateChanged,
|
|
120
|
+
scrollEnabled: swipeEnabled,
|
|
121
|
+
children: children
|
|
122
|
+
})
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
const styles = StyleSheet.create({
|
|
126
|
+
container: {
|
|
127
|
+
flex: 1
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
//# sourceMappingURL=PagerViewAdapter.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Animated","Keyboard","Platform","StyleSheet","ViewPager","useLatestCallback","useAnimatedValue","jsx","_jsx","AnimatedViewPager","createAnimatedComponent","useNativeDriver","OS","PagerViewAdapter","keyboardDismissMode","swipeEnabled","navigationState","onIndexChange","onTabSelect","onSwipeStart","onSwipeEnd","children","style","animationEnabled","rest","index","listeners","useRef","Set","current","pagerRef","indexRef","navigationStateRef","position","offset","useEffect","jumpTo","key","routes","findIndex","route","setPage","setPageWithoutAnimation","setValue","dismiss","onPageScrollStateChanged","state","pageScrollState","nativeEvent","subscription","addListener","value","next","Math","ceil","floor","forEach","listener","type","removeListener","subscribe","add","delete","memoizedPosition","useMemo","render","ref","styles","container","initialPage","onPageScroll","event","onPageSelected","e","scrollEnabled","create","flex"],"sourceRoot":"../../src","sources":["PagerViewAdapter.native.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,6 +4,7 @@ import * as React from 'react';
|
|
|
4
4
|
import { Animated, Keyboard, PanResponder, StyleSheet, View } from 'react-native';
|
|
5
5
|
import useLatestCallback from 'use-latest-callback';
|
|
6
6
|
import { useAnimatedValue } from "./useAnimatedValue.js";
|
|
7
|
+
import { useMeasureLayout } from "./useMeasureLayout.js";
|
|
7
8
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
9
|
const DEAD_ZONE = 12;
|
|
9
10
|
const DefaultTransitionSpec = {
|
|
@@ -14,8 +15,7 @@ const DefaultTransitionSpec = {
|
|
|
14
15
|
overshootClamping: true
|
|
15
16
|
};
|
|
16
17
|
export function PanResponderAdapter({
|
|
17
|
-
|
|
18
|
-
keyboardDismissMode = 'auto',
|
|
18
|
+
keyboardDismissMode,
|
|
19
19
|
swipeEnabled = true,
|
|
20
20
|
navigationState,
|
|
21
21
|
onIndexChange,
|
|
@@ -31,10 +31,11 @@ export function PanResponderAdapter({
|
|
|
31
31
|
routes,
|
|
32
32
|
index
|
|
33
33
|
} = navigationState;
|
|
34
|
+
const containerRef = React.useRef(null);
|
|
35
|
+
const [layout, onLayout] = useMeasureLayout(containerRef);
|
|
34
36
|
const panX = useAnimatedValue(0);
|
|
35
|
-
const
|
|
37
|
+
const listeners = React.useRef(new Set()).current;
|
|
36
38
|
const navigationStateRef = React.useRef(navigationState);
|
|
37
|
-
const layoutRef = React.useRef(layout);
|
|
38
39
|
const onIndexChangeRef = React.useRef(onIndexChange);
|
|
39
40
|
const onTabSelectRef = React.useRef(onTabSelect);
|
|
40
41
|
const currentIndexRef = React.useRef(index);
|
|
@@ -42,7 +43,7 @@ export function PanResponderAdapter({
|
|
|
42
43
|
const swipeVelocityThreshold = 0.15;
|
|
43
44
|
const swipeDistanceThreshold = layout.width / 1.75;
|
|
44
45
|
const jumpToIndex = useLatestCallback((index, animate = animationEnabled) => {
|
|
45
|
-
const offset = -index *
|
|
46
|
+
const offset = -index * layout.width;
|
|
46
47
|
const {
|
|
47
48
|
timing,
|
|
48
49
|
...transitionConfig
|
|
@@ -75,7 +76,6 @@ export function PanResponderAdapter({
|
|
|
75
76
|
});
|
|
76
77
|
React.useEffect(() => {
|
|
77
78
|
navigationStateRef.current = navigationState;
|
|
78
|
-
layoutRef.current = layout;
|
|
79
79
|
onIndexChangeRef.current = onIndexChange;
|
|
80
80
|
onTabSelectRef.current = onTabSelect;
|
|
81
81
|
});
|
|
@@ -125,7 +125,10 @@ export function PanResponderAdapter({
|
|
|
125
125
|
const position = (panX._offset + diffX) / -layout.width;
|
|
126
126
|
const next = position > index ? Math.ceil(position) : Math.floor(position);
|
|
127
127
|
if (next !== index) {
|
|
128
|
-
|
|
128
|
+
listeners.forEach(listener => listener({
|
|
129
|
+
type: 'enter',
|
|
130
|
+
index: next
|
|
131
|
+
}));
|
|
129
132
|
}
|
|
130
133
|
}
|
|
131
134
|
panX.setValue(diffX);
|
|
@@ -144,13 +147,10 @@ export function PanResponderAdapter({
|
|
|
144
147
|
}
|
|
145
148
|
jumpToIndex(nextIndex, true);
|
|
146
149
|
};
|
|
147
|
-
const
|
|
148
|
-
|
|
150
|
+
const subscribe = useLatestCallback(listener => {
|
|
151
|
+
listeners.add(listener);
|
|
149
152
|
return () => {
|
|
150
|
-
|
|
151
|
-
if (index > -1) {
|
|
152
|
-
listenersRef.current.splice(index, 1);
|
|
153
|
-
}
|
|
153
|
+
listeners.delete(listener);
|
|
154
154
|
};
|
|
155
155
|
});
|
|
156
156
|
const jumpTo = useLatestCallback(key => {
|
|
@@ -176,30 +176,42 @@ export function PanResponderAdapter({
|
|
|
176
176
|
const position = React.useMemo(() => layout.width ? Animated.divide(panX, -layout.width) : null, [layout.width, panX]);
|
|
177
177
|
return children({
|
|
178
178
|
position: position ?? new Animated.Value(index),
|
|
179
|
-
|
|
179
|
+
subscribe,
|
|
180
180
|
jumpTo,
|
|
181
|
-
render: children => /*#__PURE__*/_jsx(
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
181
|
+
render: children => /*#__PURE__*/_jsx(View, {
|
|
182
|
+
ref: containerRef,
|
|
183
|
+
onLayout: onLayout,
|
|
184
|
+
style: styles.container,
|
|
185
|
+
children: /*#__PURE__*/_jsx(Animated.View, {
|
|
186
|
+
style: [styles.sheet, layout.width ? {
|
|
187
|
+
width: routes.length * layout.width,
|
|
188
|
+
transform: [{
|
|
189
|
+
translateX
|
|
190
|
+
}]
|
|
191
|
+
} : null, style],
|
|
192
|
+
...panResponder.panHandlers,
|
|
193
|
+
children: children.map((child, i) => {
|
|
194
|
+
const route = routes[i];
|
|
195
|
+
const focused = i === index;
|
|
196
|
+
if (!layout.width && !focused) {
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
return /*#__PURE__*/_jsx(View, {
|
|
200
|
+
style: layout.width ? {
|
|
201
|
+
width: layout.width
|
|
202
|
+
} : focused ? StyleSheet.absoluteFill : null,
|
|
203
|
+
children: child
|
|
204
|
+
}, route.key);
|
|
205
|
+
})
|
|
198
206
|
})
|
|
199
207
|
})
|
|
200
208
|
});
|
|
201
209
|
}
|
|
202
210
|
const styles = StyleSheet.create({
|
|
211
|
+
container: {
|
|
212
|
+
flex: 1,
|
|
213
|
+
overflow: 'hidden'
|
|
214
|
+
},
|
|
203
215
|
sheet: {
|
|
204
216
|
flex: 1,
|
|
205
217
|
flexDirection: 'row',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Animated","Keyboard","PanResponder","StyleSheet","View","useLatestCallback","useAnimatedValue","jsx","_jsx","DEAD_ZONE","DefaultTransitionSpec","timing","spring","stiffness","damping","mass","overshootClamping","PanResponderAdapter","
|
|
1
|
+
{"version":3,"names":["React","Animated","Keyboard","PanResponder","StyleSheet","View","useLatestCallback","useAnimatedValue","useMeasureLayout","jsx","_jsx","DEAD_ZONE","DefaultTransitionSpec","timing","spring","stiffness","damping","mass","overshootClamping","PanResponderAdapter","keyboardDismissMode","swipeEnabled","navigationState","onIndexChange","onTabSelect","onSwipeStart","onSwipeEnd","children","style","animationEnabled","layoutDirection","routes","index","containerRef","useRef","layout","onLayout","panX","listeners","Set","current","navigationStateRef","onIndexChangeRef","onTabSelectRef","currentIndexRef","pendingIndexRef","undefined","swipeVelocityThreshold","swipeDistanceThreshold","width","jumpToIndex","animate","offset","transitionConfig","parallel","toValue","useNativeDriver","start","finished","setValue","useEffect","useLayoutEffect","dismiss","isMovingHorizontally","_","gestureState","Math","abs","dx","dy","vx","vy","canMoveScreen","event","diffX","length","startGesture","stopAnimation","setOffset","_value","respondToGesture","position","_offset","next","ceil","floor","forEach","listener","type","finishGesture","flattenOffset","currentIndex","nextIndex","round","min","max","isFinite","subscribe","add","delete","jumpTo","key","findIndex","route","panResponder","create","onMoveShouldSetPanResponder","onMoveShouldSetPanResponderCapture","onPanResponderGrant","onPanResponderMove","onPanResponderTerminate","onPanResponderRelease","onPanResponderTerminationRequest","maxTranslate","translateX","multiply","interpolate","inputRange","outputRange","extrapolate","useMemo","divide","Value","render","ref","styles","container","sheet","transform","panHandlers","map","child","i","focused","absoluteFill","flex","overflow","flexDirection","alignItems"],"sourceRoot":"../../src","sources":["PanResponderAdapter.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Platform","Pressable","jsx","_jsx","ANDROID_VERSION_LOLLIPOP","ANDROID_SUPPORTS_RIPPLE","OS","Version","PlatformPressable","disabled","android_ripple","pressColor","pressOpacity","style","onPress","rest","handlePress","e","href","hasModifierKey","metaKey","altKey","ctrlKey","shiftKey","isLeftClick","button","isSelfTarget","currentTarget","undefined","includes","target","preventDefault","color","pressed","cursor","opacity"],"sourceRoot":"../../src","sources":["PlatformPressable.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,
|
|
1
|
+
{"version":3,"names":["React","Platform","Pressable","jsx","_jsx","ANDROID_VERSION_LOLLIPOP","ANDROID_SUPPORTS_RIPPLE","OS","Version","PlatformPressable","disabled","android_ripple","pressColor","pressOpacity","style","onPress","rest","handlePress","e","href","hasModifierKey","metaKey","altKey","ctrlKey","shiftKey","isLeftClick","button","isSelfTarget","currentTarget","undefined","includes","target","preventDefault","color","pressed","cursor","opacity"],"sourceRoot":"../../src","sources":["PlatformPressable.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAGEC,QAAQ,EACRC,SAAS,QAEJ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAYtB,MAAMC,wBAAwB,GAAG,EAAE;AACnC,MAAMC,uBAAuB,GAC3BL,QAAQ,CAACM,EAAE,KAAK,SAAS,IAAIN,QAAQ,CAACO,OAAO,IAAIH,wBAAwB;;AAE3E;AACA;AACA;AACA,OAAO,SAASI,iBAAiBA,CAAC;EAChCC,QAAQ;EACRC,cAAc;EACdC,UAAU,GAAG,oBAAoB;EACjCC,YAAY;EACZC,KAAK;EACLC,OAAO;EACP,GAAGC;AACE,CAAC,EAAE;EACR,MAAMC,WAAW,GACfC,CAA0E,IACvE;IACH,IAAIjB,QAAQ,CAACM,EAAE,KAAK,KAAK,IAAIS,IAAI,CAACG,IAAI,KAAK,IAAI,EAAE;MAC/C;MACA,MAAMC,cAAc,GACjB,SAAS,IAAIF,CAAC,IAAIA,CAAC,CAACG,OAAO,IAC3B,QAAQ,IAAIH,CAAC,IAAIA,CAAC,CAACI,MAAO,IAC1B,SAAS,IAAIJ,CAAC,IAAIA,CAAC,CAACK,OAAQ,IAC5B,UAAU,IAAIL,CAAC,IAAIA,CAAC,CAACM,QAAS;;MAEjC;MACA,MAAMC,WAAW,GACf,QAAQ,IAAIP,CAAC,GAAGA,CAAC,CAACQ,MAAM,IAAI,IAAI,IAAIR,CAAC,CAACQ,MAAM,KAAK,CAAC,GAAG,IAAI;;MAE3D;MACA,MAAMC,YAAY,GAChBT,CAAC,CAACU,aAAa,IAAI,QAAQ,IAAIV,CAAC,CAACU,aAAa,GAC1C,CAACC,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAACC,QAAQ,CAACZ,CAAC,CAACU,aAAa,CAACG,MAAM,CAAC,GAC9D,IAAI;MAEV,IAAI,CAACX,cAAc,IAAIK,WAAW,IAAIE,YAAY,EAAE;QAClDT,CAAC,CAACc,cAAc,CAAC,CAAC;QAClB;QACA;QACAjB,OAAO,GAAGG,CAAC,CAAC;MACd;IACF,CAAC,MAAM;MACLH,OAAO,GAAGG,CAAC,CAAC;IACd;EACF,CAAC;EAED,oBACEd,IAAA,CAACF,SAAS;IACRS,cAAc,EACZL,uBAAuB,IAAI,CAACI,QAAQ,GAChC;MAAEuB,KAAK,EAAErB,UAAU;MAAE,GAAGD;IAAe,CAAC,GACxCkB,SACL;IACDf,KAAK,EAAEA,CAAC;MAAEoB;IAAQ,CAAC,KAAK,CACtB;MACEC,MAAM,EACJ,CAAClC,QAAQ,CAACM,EAAE,KAAK,KAAK,IAAIN,QAAQ,CAACM,EAAE,KAAK,KAAK,KAAK,CAACG,QAAQ;MACzD;MACA;MACA,SAAS,GACT,MAAM;MACZ0B,OAAO,EACL,CAAC9B,uBAAuB,IAAI4B,OAAO,IAAI,CAACxB,QAAQ,GAAGG,YAAY,GAAG;IACtE,CAAC,EACD,OAAOC,KAAK,KAAK,UAAU,GAAGA,KAAK,CAAC;MAAEoB;IAAQ,CAAC,CAAC,GAAGpB,KAAK,CACxD;IACFC,OAAO,EAAEL,QAAQ,GAAGmB,SAAS,GAAGZ,WAAY;IAAA,GACxCD;EAAI,CACT,CAAC;AAEN","ignoreList":[]}
|
package/lib/module/SceneView.js
CHANGED
|
@@ -7,34 +7,35 @@ export function SceneView({
|
|
|
7
7
|
children,
|
|
8
8
|
navigationState,
|
|
9
9
|
lazy,
|
|
10
|
-
layout,
|
|
11
10
|
index,
|
|
12
11
|
lazyPreloadDistance,
|
|
13
|
-
|
|
12
|
+
subscribe,
|
|
14
13
|
style
|
|
15
14
|
}) {
|
|
16
|
-
const
|
|
17
|
-
|
|
15
|
+
const isFocused = navigationState.index === index;
|
|
16
|
+
const isLoaded = isFocused || Math.abs(navigationState.index - index) <= lazyPreloadDistance;
|
|
17
|
+
const [isLoading, setIsLoading] = React.useState(!isLoaded);
|
|
18
|
+
if (isLoading && isLoaded) {
|
|
18
19
|
// Always render the route when it becomes focused
|
|
20
|
+
// Or close to the focused route based on preload distance
|
|
19
21
|
setIsLoading(false);
|
|
20
22
|
}
|
|
21
23
|
React.useEffect(() => {
|
|
22
|
-
const handleEnter = value => {
|
|
23
|
-
// If we're entering the current route, we need to load it
|
|
24
|
-
if (value === index) {
|
|
25
|
-
setIsLoading(prevState => {
|
|
26
|
-
if (prevState) {
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
return prevState;
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
24
|
let unsubscribe;
|
|
34
25
|
let timer;
|
|
35
26
|
if (lazy && isLoading) {
|
|
36
27
|
// If lazy mode is enabled, listen to when we enter screens
|
|
37
|
-
unsubscribe =
|
|
28
|
+
unsubscribe = subscribe(event => {
|
|
29
|
+
// If we're entering the current route, we need to load it
|
|
30
|
+
if (event.type === 'enter' && event.index === index) {
|
|
31
|
+
setIsLoading(prevState => {
|
|
32
|
+
if (prevState) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
return prevState;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
});
|
|
38
39
|
} else if (isLoading) {
|
|
39
40
|
// If lazy mode is not enabled, render the scene with a delay if not loaded already
|
|
40
41
|
// This improves the initial startup time as the scene is no longer blocking
|
|
@@ -44,23 +45,13 @@ export function SceneView({
|
|
|
44
45
|
unsubscribe?.();
|
|
45
46
|
clearTimeout(timer);
|
|
46
47
|
};
|
|
47
|
-
}, [
|
|
48
|
-
const focused = navigationState.index === index;
|
|
48
|
+
}, [subscribe, index, isLoading, lazy]);
|
|
49
49
|
return /*#__PURE__*/_jsx(View, {
|
|
50
|
-
"aria-hidden": !
|
|
51
|
-
style: [styles.route,
|
|
52
|
-
|
|
53
|
-
// This avoids delay before we are able to render pages side by side
|
|
54
|
-
layout.width ? {
|
|
55
|
-
width: layout.width
|
|
56
|
-
} : focused ? StyleSheet.absoluteFill : null, style],
|
|
57
|
-
children:
|
|
58
|
-
// Only render the route only if it's either focused or layout is available
|
|
59
|
-
// When layout is not available, we must not render unfocused routes
|
|
60
|
-
// so that the focused route can fill the screen
|
|
61
|
-
focused || layout.width ? children({
|
|
50
|
+
"aria-hidden": !isFocused,
|
|
51
|
+
style: [styles.route, style],
|
|
52
|
+
children: children({
|
|
62
53
|
loading: isLoading
|
|
63
|
-
})
|
|
54
|
+
})
|
|
64
55
|
});
|
|
65
56
|
}
|
|
66
57
|
const styles = StyleSheet.create({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","StyleSheet","View","jsx","_jsx","SceneView","children","navigationState","lazy","
|
|
1
|
+
{"version":3,"names":["React","StyleSheet","View","jsx","_jsx","SceneView","children","navigationState","lazy","index","lazyPreloadDistance","subscribe","style","isFocused","isLoaded","Math","abs","isLoading","setIsLoading","useState","useEffect","unsubscribe","timer","event","type","prevState","setTimeout","clearTimeout","styles","route","loading","create","flex","overflow"],"sourceRoot":"../../src","sources":["SceneView.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAAyBC,UAAU,EAAEC,IAAI,QAAwB,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAmBhF,OAAO,SAASC,SAASA,CAAkB;EACzCC,QAAQ;EACRC,eAAe;EACfC,IAAI;EACJC,KAAK;EACLC,mBAAmB;EACnBC,SAAS;EACTC;AACQ,CAAC,EAAE;EACX,MAAMC,SAAS,GAAGN,eAAe,CAACE,KAAK,KAAKA,KAAK;EACjD,MAAMK,QAAQ,GACZD,SAAS,IAAIE,IAAI,CAACC,GAAG,CAACT,eAAe,CAACE,KAAK,GAAGA,KAAK,CAAC,IAAIC,mBAAmB;EAE7E,MAAM,CAACO,SAAS,EAAEC,YAAY,CAAC,GAAGlB,KAAK,CAACmB,QAAQ,CAAC,CAACL,QAAQ,CAAC;EAE3D,IAAIG,SAAS,IAAIH,QAAQ,EAAE;IACzB;IACA;IACAI,YAAY,CAAC,KAAK,CAAC;EACrB;EAEAlB,KAAK,CAACoB,SAAS,CAAC,MAAM;IACpB,IAAIC,WAAqC;IACzC,IAAIC,KAAgD;IAEpD,IAAId,IAAI,IAAIS,SAAS,EAAE;MACrB;MACAI,WAAW,GAAGV,SAAS,CAAEY,KAAK,IAAK;QACjC;QACA,IAAIA,KAAK,CAACC,IAAI,KAAK,OAAO,IAAID,KAAK,CAACd,KAAK,KAAKA,KAAK,EAAE;UACnDS,YAAY,CAAEO,SAAS,IAAK;YAC1B,IAAIA,SAAS,EAAE;cACb,OAAO,KAAK;YACd;YAEA,OAAOA,SAAS;UAClB,CAAC,CAAC;QACJ;MACF,CAAC,CAAC;IACJ,CAAC,MAAM,IAAIR,SAAS,EAAE;MACpB;MACA;MACAK,KAAK,GAAGI,UAAU,CAAC,MAAMR,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClD;IAEA,OAAO,MAAM;MACXG,WAAW,GAAG,CAAC;MACfM,YAAY,CAACL,KAAK,CAAC;IACrB,CAAC;EACH,CAAC,EAAE,CAACX,SAAS,EAAEF,KAAK,EAAEQ,SAAS,EAAET,IAAI,CAAC,CAAC;EAEvC,oBACEJ,IAAA,CAACF,IAAI;IAAC,eAAa,CAACW,SAAU;IAACD,KAAK,EAAE,CAACgB,MAAM,CAACC,KAAK,EAAEjB,KAAK,CAAE;IAAAN,QAAA,EACzDA,QAAQ,CAAC;MAAEwB,OAAO,EAAEb;IAAU,CAAC;EAAC,CAC7B,CAAC;AAEX;AAEA,MAAMW,MAAM,GAAG3B,UAAU,CAAC8B,MAAM,CAAC;EAC/BF,KAAK,EAAE;IACLG,IAAI,EAAE,CAAC;IACPC,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC","ignoreList":[]}
|