From 4b2e6a95caec1a0d0cb0d6afb770ea3d54b3fa54 Mon Sep 17 00:00:00 2001 From: "satyajit.happy" Date: Fri, 21 Jun 2019 12:54:19 +0200 Subject: [PATCH] feat: add headerTransparent option --- packages/stack/example/src/WipeStack.js | 3 + .../NestedNavigator.test.tsx.snap | 206 ++++++------- .../StackNavigator.test.tsx.snap | 274 +++++++++--------- packages/stack/src/types.tsx | 1 + .../src/views/Header/HeaderContainer.tsx | 22 +- .../stack/src/views/Header/HeaderSegment.tsx | 117 ++++---- packages/stack/src/views/Stack/Stack.tsx | 2 + packages/stack/src/views/Stack/StackItem.tsx | 4 +- 8 files changed, 338 insertions(+), 291 deletions(-) diff --git a/packages/stack/example/src/WipeStack.js b/packages/stack/example/src/WipeStack.js index 39a9d655..7187d7a9 100644 --- a/packages/stack/example/src/WipeStack.js +++ b/packages/stack/example/src/WipeStack.js @@ -152,6 +152,9 @@ export default createStackNavigator( { initialRouteName: 'List', headerMode: 'screen', + defaultNavigationOptions: { + cardOverlayEnabled: true, + }, ...TransitionPresets.WipeFromBottomAndroid, } ); diff --git a/packages/stack/src/navigators/__tests__/__snapshots__/NestedNavigator.test.tsx.snap b/packages/stack/src/navigators/__tests__/__snapshots__/NestedNavigator.test.tsx.snap index c34de9fb..d7faec30 100644 --- a/packages/stack/src/navigators/__tests__/__snapshots__/NestedNavigator.test.tsx.snap +++ b/packages/stack/src/navigators/__tests__/__snapshots__/NestedNavigator.test.tsx.snap @@ -342,19 +342,12 @@ Array [ onLayout={[Function]} pointerEvents="box-none" style={ - Array [ - Object { - "bottom": 0, - "left": 0, - "position": "absolute", - "right": 0, - "top": 0, - }, - Object { - "height": 64, - }, - undefined, - ] + Object { + "left": 0, + "position": "absolute", + "right": 0, + "top": 0, + } } > - + - - Home - + + Home + + @@ -473,19 +478,12 @@ Array [ onLayout={[Function]} pointerEvents="box-none" style={ - Array [ - Object { - "bottom": 0, - "left": 0, - "position": "absolute", - "right": 0, - "top": 0, - }, - Object { - "height": 64, - }, - undefined, - ] + Object { + "left": 0, + "position": "absolute", + "right": 0, + "top": 0, + } } > - + - - Sub - + + Sub + + diff --git a/packages/stack/src/navigators/__tests__/__snapshots__/StackNavigator.test.tsx.snap b/packages/stack/src/navigators/__tests__/__snapshots__/StackNavigator.test.tsx.snap index f99228e3..435918be 100644 --- a/packages/stack/src/navigators/__tests__/__snapshots__/StackNavigator.test.tsx.snap +++ b/packages/stack/src/navigators/__tests__/__snapshots__/StackNavigator.test.tsx.snap @@ -186,26 +186,12 @@ Array [ onLayout={[Function]} pointerEvents="box-none" style={ - Array [ - Object { - "bottom": 0, - "left": 0, - "position": "absolute", - "right": 0, - "top": 0, - }, - Object { - "height": 64, - }, - Array [ - Object { - "backgroundColor": "red", - }, - Object { - "opacity": 0.5, - }, - ], - ] + Object { + "left": 0, + "position": "absolute", + "right": 0, + "top": 0, + } } > - + - - Welcome anonymous - - - - + + Welcome anonymous + + + + + @@ -504,26 +509,12 @@ Array [ onLayout={[Function]} pointerEvents="box-none" style={ - Array [ - Object { - "bottom": 0, - "left": 0, - "position": "absolute", - "right": 0, - "top": 0, - }, - Object { - "height": 64, - }, - Array [ - Object { - "backgroundColor": "red", - }, - Object { - "opacity": 0.5, - }, - ], - ] + Object { + "left": 0, + "position": "absolute", + "right": 0, + "top": 0, + } } > - + - - Welcome anonymous - + + Welcome anonymous + + diff --git a/packages/stack/src/types.tsx b/packages/stack/src/types.tsx index 710e6a77..e59395af 100644 --- a/packages/stack/src/types.tsx +++ b/packages/stack/src/types.tsx @@ -82,6 +82,7 @@ export type HeaderOptions = { headerBackgroundStyle?: StyleProp; headerStyle?: StyleProp; headerStatusBarHeight?: number; + headerTransparent?: boolean; }; export type HeaderProps = { diff --git a/packages/stack/src/views/Header/HeaderContainer.tsx b/packages/stack/src/views/Header/HeaderContainer.tsx index 0adb6902..6e6a9a0e 100644 --- a/packages/stack/src/views/Header/HeaderContainer.tsx +++ b/packages/stack/src/views/Header/HeaderContainer.tsx @@ -6,7 +6,6 @@ import { StyleProp, ViewStyle, } from 'react-native'; -import { getDefaultHeaderHeight } from './HeaderSegment'; import { Layout, Route, @@ -98,13 +97,11 @@ export default function HeaderContainer({ importantForAccessibility={ isFocused ? 'auto' : 'no-hide-descendants' } - style={[ - mode === 'float' ? StyleSheet.absoluteFill : null, - mode === 'screen' && options.header !== undefined - ? null - : { height: getDefaultHeaderHeight(layout) }, - options.headerStyle, - ]} + style={ + mode === 'float' || options.headerTransparent + ? styles.header + : null + } > {options.header !== undefined ? ( options.header === null ? null : ( @@ -119,3 +116,12 @@ export default function HeaderContainer({ ); } + +const styles = StyleSheet.create({ + header: { + position: 'absolute', + top: 0, + left: 0, + right: 0, + }, +}); diff --git a/packages/stack/src/views/Header/HeaderSegment.tsx b/packages/stack/src/views/Header/HeaderSegment.tsx index 3f9bc763..721cd46b 100644 --- a/packages/stack/src/views/Header/HeaderSegment.tsx +++ b/packages/stack/src/views/Header/HeaderSegment.tsx @@ -122,6 +122,7 @@ export default class HeaderSegment extends React.Component { ), // @ts-ignore headerStatusBarHeight = getStatusBarHeight(layout.width > layout.height), + headerTransparent, headerTintColor, headerBackground, headerBackgroundStyle, @@ -138,6 +139,7 @@ export default class HeaderSegment extends React.Component { headerLeftContainerStyle: leftContainerStyle, headerRightContainerStyle: rightContainerStyle, headerTitleContainerStyle: titleContainerStyle, + headerStyle: customHeaderStyle, styleInterpolator, } = this.props; @@ -166,68 +168,79 @@ export default class HeaderSegment extends React.Component { > {headerBackground ? ( headerBackground() - ) : ( + ) : headerTransparent ? null : ( )} - - - {onGoBack ? ( - - {left({ - backImage, - pressColorAndroid, - allowFontScaling: backAllowFontScaling, - onPress: onGoBack, - labelVisible: headerBackTitleVisible, - label: leftLabel !== undefined ? leftLabel : previousTitle, - truncatedLabel, - labelStyle: [leftLabelStyle, customLeftLabelStyle], - onLabelLayout: this.handleLeftLabelLayout, - screenLayout: layout, - titleLayout, - tintColor: headerTintColor, - })} - - ) : null} - {currentTitle ? ( - - + + + {onGoBack ? ( + - {currentTitle} - - - ) : null} - {right ? ( - - {right({ tintColor: headerTintColor })} - - ) : null} - + {left({ + backImage, + pressColorAndroid, + allowFontScaling: backAllowFontScaling, + onPress: onGoBack, + labelVisible: headerBackTitleVisible, + label: leftLabel !== undefined ? leftLabel : previousTitle, + truncatedLabel, + labelStyle: [leftLabelStyle, customLeftLabelStyle], + onLabelLayout: this.handleLeftLabelLayout, + screenLayout: layout, + titleLayout, + tintColor: headerTintColor, + })} + + ) : null} + {currentTitle ? ( + + + {currentTitle} + + + ) : null} + {right ? ( + + {right({ tintColor: headerTintColor })} + + ) : null} + + ); } } const styles = StyleSheet.create({ - container: { + content: { flex: 1, paddingHorizontal: 4, flexDirection: 'row', diff --git a/packages/stack/src/views/Stack/Stack.tsx b/packages/stack/src/views/Stack/Stack.tsx index 2e0cd799..db47a1ca 100755 --- a/packages/stack/src/views/Stack/Stack.tsx +++ b/packages/stack/src/views/Stack/Stack.tsx @@ -229,6 +229,7 @@ export default class Stack extends React.Component { const { header, + headerTransparent, cardTransparent, cardShadowEnabled, cardOverlayEnabled, @@ -270,6 +271,7 @@ export default class Stack extends React.Component { hasCustomHeader={header === null} getPreviousRoute={getPreviousRoute} headerMode={headerMode} + headerTransparent={headerTransparent} renderHeader={renderHeader} renderScene={renderScene} onOpenRoute={onOpenRoute} diff --git a/packages/stack/src/views/Stack/StackItem.tsx b/packages/stack/src/views/Stack/StackItem.tsx index 4e167007..ed3984cd 100644 --- a/packages/stack/src/views/Stack/StackItem.tsx +++ b/packages/stack/src/views/Stack/StackItem.tsx @@ -55,6 +55,7 @@ type Props = { headerStyleInterpolator: HeaderStyleInterpolator; cardStyleInterpolator: CardStyleInterpolator; headerMode: HeaderMode; + headerTransparent?: boolean; floaingHeaderHeight: number; hasCustomHeader: boolean; }; @@ -102,6 +103,7 @@ export default class StackItem extends React.PureComponent { hasCustomHeader, getPreviousRoute, headerMode, + headerTransparent, renderHeader, renderScene, } = this.props; @@ -131,7 +133,7 @@ export default class StackItem extends React.PureComponent { importantForAccessibility={focused ? 'auto' : 'no-hide-descendants'} pointerEvents="box-none" containerStyle={ - headerMode === 'float' && !hasCustomHeader + headerMode === 'float' && !headerTransparent && !hasCustomHeader ? { marginTop: floaingHeaderHeight } : null }