diff --git a/packages/stack/src/TransitionConfigs/CardStyleInterpolators.tsx b/packages/stack/src/TransitionConfigs/CardStyleInterpolators.tsx index ea3fdb7a..9d0a080c 100644 --- a/packages/stack/src/TransitionConfigs/CardStyleInterpolators.tsx +++ b/packages/stack/src/TransitionConfigs/CardStyleInterpolators.tsx @@ -1,7 +1,7 @@ import { I18nManager } from 'react-native'; import Animated from 'react-native-reanimated'; +import getStatusBarHeight from '../utils/getStatusBarHeight'; import { CardInterpolationProps, CardInterpolatedStyle } from '../types'; -import { getStatusBarHeight } from 'react-native-safe-area-view'; const { cond, add, multiply, interpolate } = Animated; diff --git a/packages/stack/src/utils/getStatusBarHeight.tsx b/packages/stack/src/utils/getStatusBarHeight.tsx new file mode 100644 index 00000000..12c74ba9 --- /dev/null +++ b/packages/stack/src/utils/getStatusBarHeight.tsx @@ -0,0 +1,9 @@ +import { Platform } from 'react-native'; +import { getStatusBarHeight as getStatusBarHeightNative } from 'react-native-safe-area-view'; + +const getStatusBarHeight = Platform.select({ + default: getStatusBarHeightNative, + web: () => 0, +}); + +export default getStatusBarHeight; diff --git a/packages/stack/src/views/Header/HeaderBackButton.tsx b/packages/stack/src/views/Header/HeaderBackButton.tsx index 32b436a0..ca1732d3 100644 --- a/packages/stack/src/views/Header/HeaderBackButton.tsx +++ b/packages/stack/src/views/Header/HeaderBackButton.tsx @@ -6,17 +6,12 @@ import { Platform, StyleSheet, LayoutChangeEvent, - UIManager, } from 'react-native'; import Animated from 'react-native-reanimated'; -import MaskedView from '@react-native-community/masked-view'; +import MaskedView from '../MaskedView'; import TouchableItem from '../TouchableItem'; import { HeaderBackButtonProps } from '../../types'; -const isMaskedViewAvailable = - // @ts-ignore - UIManager.getViewManagerConfig('RNCMaskedView') != null; - type Props = HeaderBackButtonProps & { tintColor: string; }; @@ -129,7 +124,7 @@ class HeaderBackButton extends React.Component { ); - if (!isMaskedViewAvailable || backImage || Platform.OS !== 'ios') { + if (backImage || Platform.OS !== 'ios') { // When a custom backimage is specified, we can't mask the label // Otherwise there might be weird effect due to our mask not being the same as the image return labelElement; diff --git a/packages/stack/src/views/Header/HeaderSegment.tsx b/packages/stack/src/views/Header/HeaderSegment.tsx index 771b732f..aa2cd3a8 100644 --- a/packages/stack/src/views/Header/HeaderSegment.tsx +++ b/packages/stack/src/views/Header/HeaderSegment.tsx @@ -7,9 +7,9 @@ import { ViewStyle, } from 'react-native'; import Animated from 'react-native-reanimated'; -import { getStatusBarHeight } from 'react-native-safe-area-view'; import HeaderBackButton from './HeaderBackButton'; import HeaderBackground from './HeaderBackground'; +import getStatusBarHeight from '../../utils/getStatusBarHeight'; import memoize from '../../utils/memoize'; import { Layout, diff --git a/packages/stack/src/views/MaskedView.tsx b/packages/stack/src/views/MaskedView.tsx new file mode 100644 index 00000000..d75e7b78 --- /dev/null +++ b/packages/stack/src/views/MaskedView.tsx @@ -0,0 +1,19 @@ +import * as React from 'react'; +import { UIManager } from 'react-native'; +import RNCMaskedView from '@react-native-community/masked-view'; + +type Props = React.ComponentProps & { + children: React.ReactElement; +}; + +const isMaskedViewAvailable = + // @ts-ignore + UIManager.getViewManagerConfig('RNCMaskedView') != null; + +export default function MaskedView({ children, ...rest }: Props) { + if (isMaskedViewAvailable) { + return {children}; + } + + return children; +} diff --git a/packages/stack/src/views/MaskedView.web.tsx b/packages/stack/src/views/MaskedView.web.tsx new file mode 100644 index 00000000..cb93da9b --- /dev/null +++ b/packages/stack/src/views/MaskedView.web.tsx @@ -0,0 +1,7 @@ +type Props = { + children: React.ReactElement; +}; + +export default function MaskedView({ children }: Props) { + return children; +}