@react-navigation/stack 7.0.0-alpha.7 → 7.0.0-alpha.9
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/commonjs/TransitionConfigs/CardStyleInterpolators.js.map +1 -1
- package/lib/commonjs/TransitionConfigs/TransitionPresets.js.map +1 -1
- package/lib/commonjs/navigators/createStackNavigator.js +4 -0
- package/lib/commonjs/navigators/createStackNavigator.js.map +1 -1
- package/lib/commonjs/views/Header/Header.js.map +1 -1
- package/lib/commonjs/views/Header/HeaderContainer.js +1 -1
- package/lib/commonjs/views/Header/HeaderContainer.js.map +1 -1
- package/lib/commonjs/views/Screens.js.map +1 -1
- package/lib/commonjs/views/Stack/Card.js +17 -9
- package/lib/commonjs/views/Stack/Card.js.map +1 -1
- package/lib/commonjs/views/Stack/CardContainer.js +4 -5
- package/lib/commonjs/views/Stack/CardContainer.js.map +1 -1
- package/lib/commonjs/views/Stack/CardStack.js +32 -21
- package/lib/commonjs/views/Stack/CardStack.js.map +1 -1
- package/lib/commonjs/views/Stack/StackView.js +20 -26
- package/lib/commonjs/views/Stack/StackView.js.map +1 -1
- package/lib/module/TransitionConfigs/CardStyleInterpolators.js.map +1 -1
- package/lib/module/TransitionConfigs/TransitionPresets.js.map +1 -1
- package/lib/module/navigators/createStackNavigator.js +4 -0
- package/lib/module/navigators/createStackNavigator.js.map +1 -1
- package/lib/module/views/Header/Header.js.map +1 -1
- package/lib/module/views/Header/HeaderContainer.js +2 -2
- package/lib/module/views/Header/HeaderContainer.js.map +1 -1
- package/lib/module/views/Screens.js.map +1 -1
- package/lib/module/views/Stack/Card.js +17 -9
- package/lib/module/views/Stack/Card.js.map +1 -1
- package/lib/module/views/Stack/CardContainer.js +5 -6
- package/lib/module/views/Stack/CardContainer.js.map +1 -1
- package/lib/module/views/Stack/CardStack.js +32 -21
- package/lib/module/views/Stack/CardStack.js.map +1 -1
- package/lib/module/views/Stack/StackView.js +20 -26
- package/lib/module/views/Stack/StackView.js.map +1 -1
- package/lib/typescript/src/navigators/createStackNavigator.d.ts +1 -1
- package/lib/typescript/src/navigators/createStackNavigator.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +33 -3
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/views/Screens.d.ts +1 -0
- package/lib/typescript/src/views/Screens.d.ts.map +1 -1
- package/lib/typescript/src/views/Stack/Card.d.ts +1 -0
- package/lib/typescript/src/views/Stack/Card.d.ts.map +1 -1
- package/lib/typescript/src/views/Stack/CardContainer.d.ts +2 -4
- package/lib/typescript/src/views/Stack/CardContainer.d.ts.map +1 -1
- package/lib/typescript/src/views/Stack/CardStack.d.ts +1 -3
- package/lib/typescript/src/views/Stack/CardStack.d.ts.map +1 -1
- package/lib/typescript/src/views/Stack/StackView.d.ts +5 -77
- package/lib/typescript/src/views/Stack/StackView.d.ts.map +1 -1
- package/package.json +18 -18
- package/src/TransitionConfigs/CardStyleInterpolators.tsx +5 -5
- package/src/TransitionConfigs/TransitionPresets.tsx +2 -2
- package/src/navigators/createStackNavigator.tsx +4 -1
- package/src/types.tsx +34 -3
- package/src/views/Header/Header.tsx +2 -2
- package/src/views/Header/HeaderContainer.tsx +4 -4
- package/src/views/Screens.tsx +1 -0
- package/src/views/Stack/Card.tsx +32 -15
- package/src/views/Stack/CardContainer.tsx +6 -5
- package/src/views/Stack/CardStack.tsx +190 -161
- package/src/views/Stack/StackView.tsx +13 -12
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
NavigationRouteContext,
|
|
5
5
|
type ParamListBase,
|
|
6
6
|
type Route,
|
|
7
|
-
|
|
7
|
+
useLinkBuilder,
|
|
8
8
|
} from '@react-navigation/native';
|
|
9
9
|
import * as React from 'react';
|
|
10
10
|
import {
|
|
@@ -54,7 +54,7 @@ export function HeaderContainer({
|
|
|
54
54
|
}: Props) {
|
|
55
55
|
const focusedRoute = getFocusedRoute();
|
|
56
56
|
const parentHeaderBack = React.useContext(HeaderBackContext);
|
|
57
|
-
const { buildHref } =
|
|
57
|
+
const { buildHref } = useLinkBuilder();
|
|
58
58
|
|
|
59
59
|
return (
|
|
60
60
|
<Animated.View pointerEvents="box-none" style={style}>
|
|
@@ -139,8 +139,8 @@ export function HeaderContainer({
|
|
|
139
139
|
nextHeaderlessGestureDirection === 'vertical-inverted'
|
|
140
140
|
? forSlideUp
|
|
141
141
|
: nextHeaderlessGestureDirection === 'horizontal-inverted'
|
|
142
|
-
|
|
143
|
-
|
|
142
|
+
? forSlideRight
|
|
143
|
+
: forSlideLeft
|
|
144
144
|
: headerStyleInterpolator
|
|
145
145
|
: forNoAnimation,
|
|
146
146
|
};
|
package/src/views/Screens.tsx
CHANGED
package/src/views/Stack/Card.tsx
CHANGED
|
@@ -61,6 +61,7 @@ type Props = ViewProps & {
|
|
|
61
61
|
open: TransitionSpec;
|
|
62
62
|
close: TransitionSpec;
|
|
63
63
|
};
|
|
64
|
+
preloaded: boolean;
|
|
64
65
|
styleInterpolator: StackCardStyleInterpolator;
|
|
65
66
|
containerStyle?: StyleProp<ViewStyle>;
|
|
66
67
|
contentStyle?: StyleProp<ViewStyle>;
|
|
@@ -104,7 +105,11 @@ export class Card extends React.Component<Props> {
|
|
|
104
105
|
};
|
|
105
106
|
|
|
106
107
|
componentDidMount() {
|
|
107
|
-
|
|
108
|
+
if (!this.props.preloaded) {
|
|
109
|
+
this.animate({
|
|
110
|
+
closing: this.props.closing,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
108
113
|
this.isCurrentlyMounted = true;
|
|
109
114
|
}
|
|
110
115
|
|
|
@@ -133,7 +138,7 @@ export class Card extends React.Component<Props> {
|
|
|
133
138
|
this.lastToValue !== toValue
|
|
134
139
|
) {
|
|
135
140
|
// We need to trigger the animation when route was closed
|
|
136
|
-
//
|
|
141
|
+
// The route might have been closed by a `POP` action or by a gesture
|
|
137
142
|
// When route was closed due to a gesture, the animation would've happened already
|
|
138
143
|
// It's still important to trigger the animation so that `onClose` is called
|
|
139
144
|
// If `onClose` is not called, cleanup step won't be performed for gestures
|
|
@@ -142,7 +147,7 @@ export class Card extends React.Component<Props> {
|
|
|
142
147
|
}
|
|
143
148
|
|
|
144
149
|
componentWillUnmount() {
|
|
145
|
-
this.props.gesture
|
|
150
|
+
this.props.gesture?.stopAnimation();
|
|
146
151
|
this.isCurrentlyMounted = false;
|
|
147
152
|
this.handleEndInteraction();
|
|
148
153
|
}
|
|
@@ -178,7 +183,7 @@ export class Card extends React.Component<Props> {
|
|
|
178
183
|
closing: boolean;
|
|
179
184
|
velocity?: number;
|
|
180
185
|
}) => {
|
|
181
|
-
const {
|
|
186
|
+
const { transitionSpec, onOpen, onClose, onTransition, gesture } =
|
|
182
187
|
this.props;
|
|
183
188
|
|
|
184
189
|
const toValue = this.getAnimateToValue({
|
|
@@ -232,13 +237,15 @@ export class Card extends React.Component<Props> {
|
|
|
232
237
|
layout,
|
|
233
238
|
gestureDirection,
|
|
234
239
|
direction,
|
|
240
|
+
preloaded,
|
|
235
241
|
}: {
|
|
236
242
|
closing?: boolean;
|
|
237
243
|
layout: Layout;
|
|
238
244
|
gestureDirection: GestureDirection;
|
|
239
245
|
direction: LocaleDirection;
|
|
246
|
+
preloaded: boolean;
|
|
240
247
|
}) => {
|
|
241
|
-
if (!closing) {
|
|
248
|
+
if (!closing && !preloaded) {
|
|
242
249
|
return 0;
|
|
243
250
|
}
|
|
244
251
|
|
|
@@ -288,7 +295,8 @@ export class Card extends React.Component<Props> {
|
|
|
288
295
|
this.handleStartInteraction();
|
|
289
296
|
onGestureBegin?.();
|
|
290
297
|
break;
|
|
291
|
-
case GestureState.CANCELLED:
|
|
298
|
+
case GestureState.CANCELLED:
|
|
299
|
+
case GestureState.FAILED: {
|
|
292
300
|
this.isSwiping.setValue(FALSE);
|
|
293
301
|
this.handleEndInteraction();
|
|
294
302
|
|
|
@@ -298,7 +306,10 @@ export class Card extends React.Component<Props> {
|
|
|
298
306
|
? nativeEvent.velocityY
|
|
299
307
|
: nativeEvent.velocityX;
|
|
300
308
|
|
|
301
|
-
this.animate({
|
|
309
|
+
this.animate({
|
|
310
|
+
closing: this.props.closing,
|
|
311
|
+
velocity,
|
|
312
|
+
});
|
|
302
313
|
|
|
303
314
|
onGestureCanceled?.();
|
|
304
315
|
break;
|
|
@@ -397,9 +408,9 @@ export class Card extends React.Component<Props> {
|
|
|
397
408
|
gestureResponseDistance !== undefined
|
|
398
409
|
? gestureResponseDistance
|
|
399
410
|
: gestureDirection === 'vertical' ||
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
411
|
+
gestureDirection === 'vertical-inverted'
|
|
412
|
+
? GESTURE_RESPONSE_DISTANCE_VERTICAL
|
|
413
|
+
: GESTURE_RESPONSE_DISTANCE_HORIZONTAL;
|
|
403
414
|
|
|
404
415
|
if (gestureDirection === 'vertical') {
|
|
405
416
|
return {
|
|
@@ -529,7 +540,13 @@ export class Card extends React.Component<Props> {
|
|
|
529
540
|
// Make sure that this view isn't removed. If this view is removed, our style with animated value won't apply
|
|
530
541
|
collapsable={false}
|
|
531
542
|
/>
|
|
532
|
-
<View
|
|
543
|
+
<View
|
|
544
|
+
pointerEvents="box-none"
|
|
545
|
+
// Make sure this view is not removed on the new architecture, as it causes focus loss during navigation on Android.
|
|
546
|
+
// This can happen when the view flattening results in different trees - due to `overflow` style changing in a parent.
|
|
547
|
+
collapsable={false}
|
|
548
|
+
{...rest}
|
|
549
|
+
>
|
|
533
550
|
{overlayEnabled ? (
|
|
534
551
|
<View pointerEvents="box-none" style={StyleSheet.absoluteFill}>
|
|
535
552
|
{overlay({ style: overlayStyle })}
|
|
@@ -556,10 +573,10 @@ export class Card extends React.Component<Props> {
|
|
|
556
573
|
gestureDirection === 'horizontal'
|
|
557
574
|
? [styles.shadowHorizontal, styles.shadowLeft]
|
|
558
575
|
: gestureDirection === 'horizontal-inverted'
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
576
|
+
? [styles.shadowHorizontal, styles.shadowRight]
|
|
577
|
+
: gestureDirection === 'vertical'
|
|
578
|
+
? [styles.shadowVertical, styles.shadowTop]
|
|
579
|
+
: [styles.shadowVertical, styles.shadowBottom],
|
|
563
580
|
{ backgroundColor },
|
|
564
581
|
shadowStyle,
|
|
565
582
|
]}
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from '@react-navigation/elements';
|
|
7
7
|
import {
|
|
8
8
|
type Route,
|
|
9
|
-
|
|
9
|
+
useLinkBuilder,
|
|
10
10
|
useLocale,
|
|
11
11
|
useTheme,
|
|
12
12
|
} from '@react-navigation/native';
|
|
@@ -28,6 +28,7 @@ type Props = {
|
|
|
28
28
|
modal: boolean;
|
|
29
29
|
layout: Layout;
|
|
30
30
|
gesture: Animated.Value;
|
|
31
|
+
preloaded: boolean;
|
|
31
32
|
scene: Scene;
|
|
32
33
|
safeAreaInsetTop: number;
|
|
33
34
|
safeAreaInsetRight: number;
|
|
@@ -36,7 +37,6 @@ type Props = {
|
|
|
36
37
|
getPreviousScene: (props: { route: Route<string> }) => Scene | undefined;
|
|
37
38
|
getFocusedRoute: () => Route<string>;
|
|
38
39
|
renderHeader: (props: HeaderContainerProps) => React.ReactNode;
|
|
39
|
-
renderScene: (props: { route: Route<string> }) => React.ReactNode;
|
|
40
40
|
onOpenRoute: (props: { route: Route<string> }) => void;
|
|
41
41
|
onCloseRoute: (props: { route: Route<string> }) => void;
|
|
42
42
|
onTransitionStart: (
|
|
@@ -84,8 +84,8 @@ function CardContainerInner({
|
|
|
84
84
|
onGestureStart,
|
|
85
85
|
onTransitionEnd,
|
|
86
86
|
onTransitionStart,
|
|
87
|
+
preloaded,
|
|
87
88
|
renderHeader,
|
|
88
|
-
renderScene,
|
|
89
89
|
safeAreaInsetBottom,
|
|
90
90
|
safeAreaInsetLeft,
|
|
91
91
|
safeAreaInsetRight,
|
|
@@ -205,7 +205,7 @@ function CardContainerInner({
|
|
|
205
205
|
transitionSpec,
|
|
206
206
|
} = scene.descriptor.options;
|
|
207
207
|
|
|
208
|
-
const { buildHref } =
|
|
208
|
+
const { buildHref } = useLinkBuilder();
|
|
209
209
|
const previousScene = getPreviousScene({ route: scene.descriptor.route });
|
|
210
210
|
|
|
211
211
|
let backTitle: string | undefined;
|
|
@@ -252,6 +252,7 @@ function CardContainerInner({
|
|
|
252
252
|
importantForAccessibility={focused ? 'auto' : 'no-hide-descendants'}
|
|
253
253
|
pointerEvents={active ? 'box-none' : pointerEvents}
|
|
254
254
|
pageOverflowEnabled={headerMode !== 'float' && presentation !== 'modal'}
|
|
255
|
+
preloaded={preloaded}
|
|
255
256
|
containerStyle={
|
|
256
257
|
hasAbsoluteFloatHeader && headerMode !== 'screen'
|
|
257
258
|
? { marginTop: headerHeight }
|
|
@@ -294,7 +295,7 @@ function CardContainerInner({
|
|
|
294
295
|
<HeaderHeightContext.Provider
|
|
295
296
|
value={headerShown ? headerHeight : parentHeaderHeight ?? 0}
|
|
296
297
|
>
|
|
297
|
-
{
|
|
298
|
+
{scene.descriptor.render()}
|
|
298
299
|
</HeaderHeightContext.Provider>
|
|
299
300
|
</HeaderShownContext.Provider>
|
|
300
301
|
</HeaderBackContext.Provider>
|