Skip to content
This repository was archived by the owner on Feb 25, 2020. It is now read-only.

Commit f04b9bf

Browse files
committed
fix: don't enable screens for modal stacks
1 parent 973aef1 commit f04b9bf

File tree

4 files changed

+39
-14
lines changed

4 files changed

+39
-14
lines changed

example/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"babel-plugin-module-resolver": "^3.2.0"
2626
},
2727
"resolutions": {
28-
"react-native-safe-area-view": "0.14.6"
28+
"react-native-safe-area-view": "0.14.6",
29+
"react-native-screens": "1.0.0-alpha.23"
2930
}
3031
}

example/yarn.lock

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1778,6 +1778,11 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5:
17781778
shebang-command "^1.2.0"
17791779
which "^1.2.9"
17801780

1781+
debounce@^1.2.0:
1782+
version "1.2.0"
1783+
resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131"
1784+
integrity sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==
1785+
17811786
debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
17821787
version "2.6.9"
17831788
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@@ -4664,10 +4669,12 @@ react-native-safe-module@^1.1.0:
46644669
dependencies:
46654670
dedent "^0.6.0"
46664671

4667-
react-native-screens@1.0.0-alpha.22, "react-native-screens@^1.0.0 || ^1.0.0-alpha":
4668-
version "1.0.0-alpha.22"
4669-
resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-1.0.0-alpha.22.tgz#7a120377b52aa9bbb94d0b8541a014026be9289b"
4670-
integrity sha512-kSyAt0AeVU6N7ZonfV6dP6iZF8B7Bce+tk3eujXhzBGsLg0VSLnU7uE9VqJF0xdQrHR91ZjGgVMieo/8df9KTA==
4672+
react-native-screens@1.0.0-alpha.22, react-native-screens@1.0.0-alpha.23, "react-native-screens@^1.0.0 || ^1.0.0-alpha":
4673+
version "1.0.0-alpha.23"
4674+
resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-1.0.0-alpha.23.tgz#25d7ea4d11bda4fcde2d1da7ae50271c6aa636e0"
4675+
integrity sha512-tOxHGQUN83MTmQB4ghoQkibqOdGiX4JQEmeyEv96MKWO/x8T2PJv84ECUos9hD3blPRQwVwSpAid1PPPhrVEaw==
4676+
dependencies:
4677+
debounce "^1.2.0"
46714678

46724679
react-native-svg@9.4.0:
46734680
version "9.4.0"

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"prepare": "bob build",
1919
"release": "release-it",
2020
"example": "yarn --cwd example",
21-
"bootstrap": "yarn && yarn example"
21+
"bootstrap": "yarn example && yarn"
2222
},
2323
"publishConfig": {
2424
"registry": "https://registry.npmjs.org/"

src/views/Stack/Stack.tsx

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
ViewProps,
99
} from 'react-native';
1010
import Animated from 'react-native-reanimated';
11-
import { ScreenContainer, NativeScreen } from 'react-native-screens';
11+
import * as Screens from 'react-native-screens'; // Import with * as to prevent getters being called
1212
import { getDefaultHeaderHeight } from '../Header/HeaderSegment';
1313
import { Props as HeaderContainerProps } from '../Header/HeaderContainer';
1414
import StackItem from './StackItem';
@@ -66,26 +66,41 @@ type State = {
6666
const dimensions = Dimensions.get('window');
6767
const layout = { width: dimensions.width, height: dimensions.height };
6868

69-
const AnimatedScreen = Animated.createAnimatedComponent(
70-
NativeScreen
71-
) as React.ComponentType<
69+
let AnimatedScreen: React.ComponentType<
7270
ViewProps & { active: number | Animated.Node<number> }
7371
>;
7472

75-
const MaybeScreenContainer = Platform.OS === 'ios' ? View : ScreenContainer;
73+
const MaybeScreenContainer = ({
74+
enabled,
75+
...rest
76+
}: ViewProps & {
77+
enabled: boolean;
78+
children: React.ReactNode;
79+
}) => {
80+
if (Platform.OS !== 'ios' && enabled && Screens.screensEnabled()) {
81+
return <Screens.ScreenContainer {...rest} />;
82+
}
83+
84+
return <View {...rest} />;
85+
};
7686

7787
const MaybeScreen = ({
88+
enabled,
7889
active,
7990
...rest
8091
}: ViewProps & {
92+
enabled: boolean;
8193
active: number | Animated.Node<number>;
8294
children: React.ReactNode;
8395
}) => {
84-
if (Platform.OS === 'ios') {
85-
return <View {...rest} />;
96+
if (Platform.OS !== 'ios' && enabled && Screens.screensEnabled()) {
97+
AnimatedScreen =
98+
AnimatedScreen || Animated.createAnimatedComponent(Screens.NativeScreen);
99+
100+
return <AnimatedScreen active={active} {...rest} />;
86101
}
87102

88-
return <AnimatedScreen active={active} {...rest} />;
103+
return <View {...rest} />;
89104
};
90105

91106
const { cond, eq } = Animated;
@@ -300,6 +315,7 @@ export default class Stack extends React.Component<Props, State> {
300315
return (
301316
<React.Fragment>
302317
<MaybeScreenContainer
318+
enabled={mode !== 'modal'}
303319
style={styles.container}
304320
onLayout={this.handleLayout}
305321
>
@@ -340,6 +356,7 @@ export default class Stack extends React.Component<Props, State> {
340356
<MaybeScreen
341357
key={route.key}
342358
style={StyleSheet.absoluteFill}
359+
enabled={mode !== 'modal'}
343360
active={isScreenActive}
344361
pointerEvents="box-none"
345362
>

0 commit comments

Comments
 (0)