chore: sync latest stack

This commit is contained in:
Satyajit Sahoo
2020-04-18 01:48:06 +02:00
parent 4c4e66f05c
commit 05b47dbb09
10 changed files with 116 additions and 89 deletions

View File

@@ -8,7 +8,7 @@ export { default as createStackNavigator } from './navigators/createStackNavigat
/**
* Types
*/
export {
export type {
NavigationStackScreenComponent,
NavigationStackScreenProps,
} from './types';

View File

@@ -115,7 +115,7 @@ exports[`Nested navigators renders succesfully as direct child 1`] = `
pointerEvents="none"
style={
Object {
"backgroundColor": "#fff",
"backgroundColor": "rgb(242, 242, 242)",
"bottom": 0,
"left": 0,
"position": "absolute",
@@ -276,7 +276,7 @@ exports[`Nested navigators renders succesfully as direct child 1`] = `
pointerEvents="none"
style={
Object {
"backgroundColor": "#fff",
"backgroundColor": "rgb(242, 242, 242)",
"bottom": 0,
"left": 0,
"position": "absolute",

View File

@@ -115,7 +115,7 @@ exports[`StackNavigator applies correct values when headerRight is present 1`] =
pointerEvents="none"
style={
Object {
"backgroundColor": "#fff",
"backgroundColor": "rgb(242, 242, 242)",
"bottom": 0,
"left": 0,
"position": "absolute",
@@ -412,7 +412,7 @@ exports[`StackNavigator renders successfully 1`] = `
pointerEvents="none"
style={
Object {
"backgroundColor": "#fff",
"backgroundColor": "rgb(242, 242, 242)",
"bottom": 0,
"left": 0,
"position": "absolute",

View File

@@ -164,6 +164,7 @@ export function forModalPresentationIOS({
borderTopLeftRadius: borderRadius,
borderTopRightRadius: borderRadius,
marginTop: index === 0 ? 0 : statusBarHeight,
marginBottom: index === 0 ? 0 : topOffset,
transform: [{ translateY }, { scale }],
},
overlayStyle: { opacity: overlayOpacity },

View File

@@ -43,11 +43,12 @@ export { default as useGestureHandlerRef } from './utils/useGestureHandlerRef';
/**
* Types
*/
export {
export type {
NavigationStackState,
StackNavigationProp as NavigationStackProp,
StackNavigationOptions as NavigationStackOptions,
StackNavigationConfig as NavigationStackConfig,
StackHeaderProps,
StackHeaderLeftButtonProps,
StackHeaderTitleProps,
StackCardInterpolatedStyle,

View File

@@ -517,6 +517,7 @@ export default class Card extends React.Component<Props> {
: gestureDirection === 'vertical'
? [styles.shadowVertical, styles.shadowTop]
: [styles.shadowVertical, styles.shadowBottom],
{ backgroundColor },
shadowStyle,
]}
pointerEvents="none"
@@ -553,7 +554,6 @@ const styles = StyleSheet.create({
},
shadow: {
position: 'absolute',
backgroundColor: '#fff',
shadowRadius: 5,
shadowColor: '#000',
shadowOpacity: 0.3,

View File

@@ -75,6 +75,31 @@ type State = {
const EPSILON = 0.01;
// The web implementation in react-native-screens seems buggy.
// The view doesn't become visible after coming back in some cases.
// So we use our custom implementation.
class WebScreen extends React.Component<
ViewProps & {
active: number;
children: React.ReactNode;
}
> {
render() {
const { active, style, ...rest } = this.props;
return (
<View
// @ts-ignore
hidden={!active}
style={[style, { display: active ? 'flex' : 'none' }]}
{...rest}
/>
);
}
}
const AnimatedWebScreen = Animated.createAnimatedComponent(WebScreen);
const MaybeScreenContainer = ({
enabled,
...rest
@@ -82,7 +107,7 @@ const MaybeScreenContainer = ({
enabled: boolean;
children: React.ReactNode;
}) => {
if (enabled && screensEnabled()) {
if (enabled && Platform.OS !== 'web' && screensEnabled()) {
return <ScreenContainer {...rest} />;
}
@@ -98,6 +123,11 @@ const MaybeScreen = ({
active: number | Animated.AnimatedInterpolation;
children: React.ReactNode;
}) => {
if (enabled && Platform.OS === 'web') {
// @ts-ignore
return <AnimatedWebScreen active={active} {...rest} />;
}
if (enabled && screensEnabled()) {
// @ts-ignore
return <Screen active={active} {...rest} />;
@@ -415,7 +445,7 @@ export default class CardStack extends React.Component<Props, State> {
// Screens is buggy on iOS and web, so we only enable it on Android
// For modals, usually we want the screen underneath to be visible, so also disable it there
const isScreensEnabled = Platform.OS === 'android' && mode !== 'modal';
const isScreensEnabled = Platform.OS !== 'ios' && mode !== 'modal';
return (
<React.Fragment>