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

Commit 60fc324

Browse files
committed
feat: add cardX options in navigationOptions
1 parent f4031be commit 60fc324

File tree

7 files changed

+33
-20
lines changed

7 files changed

+33
-20
lines changed

example/src/TransparentStack.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,11 @@ export default createStackNavigator(
7373
},
7474
{
7575
initialRouteName: 'List',
76-
transparentCard: true,
7776
mode: 'modal',
7877
headerMode: 'none',
79-
navigationOptions: {
78+
defaultNavigationOptions: {
8079
gesturesEnabled: false,
80+
cardTransparent: true,
8181
},
8282
cardStyleInterpolator: ({ progress: { current } }) => {
8383
const opacity = Animated.interpolate(current, {

src/navigators/__tests__/__snapshots__/NestedNavigator.test.tsx.snap

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ Array [
172172
Object {
173173
"backgroundColor": "#eee",
174174
},
175+
undefined,
175176
]
176177
}
177178
>
@@ -345,6 +346,7 @@ Array [
345346
Object {
346347
"backgroundColor": "#eee",
347348
},
349+
undefined,
348350
]
349351
}
350352
/>

src/navigators/__tests__/__snapshots__/StackNavigator.test.tsx.snap

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ Array [
172172
Object {
173173
"backgroundColor": "#eee",
174174
},
175+
undefined,
175176
]
176177
}
177178
/>
@@ -507,6 +508,7 @@ Array [
507508
Object {
508509
"backgroundColor": "#eee",
509510
},
511+
undefined,
510512
]
511513
}
512514
/>

src/types.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ export type HeaderProps = {
9696
export type NavigationStackOptions = HeaderOptions & {
9797
title?: string;
9898
header?: null | ((props: HeaderProps) => React.ReactNode);
99+
cardShadowEnabled?: boolean;
100+
cardOverlayEnabled?: boolean;
101+
cardTransparent?: boolean;
102+
cardStyle?: StyleProp<ViewStyle>;
99103
animationEnabled?: boolean;
100104
gesturesEnabled?: boolean;
101105
gestureResponseDistance?: {
@@ -108,9 +112,6 @@ export type NavigationStackOptions = HeaderOptions & {
108112
export type NavigationConfig = TransitionPreset & {
109113
mode: 'card' | 'modal';
110114
headerMode: HeaderMode;
111-
cardShadowEnabled?: boolean;
112-
cardOverlayEnabled?: boolean;
113-
transparentCard?: boolean;
114115
};
115116

116117
export type SceneDescriptor = {

src/views/Stack/Card.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ type Props = ViewProps & {
4545
};
4646
styleInterpolator: CardStyleInterpolator;
4747
containerStyle?: StyleProp<ViewStyle>;
48+
contentStyle?: StyleProp<ViewStyle>;
4849
};
4950

5051
type Binary = 0 | 1;
@@ -470,6 +471,7 @@ export default class Card extends React.Component<Props> {
470471
children,
471472
styleInterpolator,
472473
containerStyle: customContainerStyle,
474+
contentStyle,
473475
...rest
474476
} = this.props;
475477

@@ -519,6 +521,7 @@ export default class Card extends React.Component<Props> {
519521
style={[
520522
styles.container,
521523
transparent ? styles.transparent : styles.opaque,
524+
contentStyle,
522525
]}
523526
>
524527
{children}

src/views/Stack/Stack.tsx

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,8 @@ type Props = {
4141
getGesturesEnabled: (props: { route: Route }) => boolean;
4242
renderHeader: (props: HeaderContainerProps) => React.ReactNode;
4343
renderScene: (props: { route: Route }) => React.ReactNode;
44-
transparentCard?: boolean;
4544
headerMode: HeaderMode;
4645
direction: GestureDirection;
47-
cardOverlayEnabled?: boolean;
48-
cardShadowEnabled?: boolean;
4946
onTransitionStart?: (
5047
curr: { index: number },
5148
prev: { index: number }
@@ -185,8 +182,6 @@ export default class Stack extends React.Component<Props, State> {
185182
const {
186183
descriptors,
187184
navigation,
188-
cardOverlayEnabled,
189-
cardShadowEnabled,
190185
routes,
191186
closingRoutes,
192187
onOpenRoute,
@@ -196,7 +191,6 @@ export default class Stack extends React.Component<Props, State> {
196191
getGesturesEnabled,
197192
renderHeader,
198193
renderScene,
199-
transparentCard,
200194
headerMode,
201195
direction,
202196
onTransitionStart,
@@ -233,6 +227,15 @@ export default class Stack extends React.Component<Props, State> {
233227
? 1
234228
: 0;
235229

230+
const {
231+
header,
232+
cardTransparent,
233+
cardShadowEnabled,
234+
cardOverlayEnabled,
235+
cardStyle,
236+
gestureResponseDistance,
237+
} = descriptor.options;
238+
236239
return (
237240
<AnimatedScreen
238241
key={route.key}
@@ -251,21 +254,20 @@ export default class Stack extends React.Component<Props, State> {
251254
previousScene={scenes[index - 1]}
252255
navigation={navigation}
253256
direction={direction}
254-
transparentCard={transparentCard}
257+
cardTransparent={cardTransparent}
255258
cardOverlayEnabled={cardOverlayEnabled}
256259
cardShadowEnabled={cardShadowEnabled}
260+
cardStyle={cardStyle}
257261
gesturesEnabled={index !== 0 && getGesturesEnabled({ route })}
258262
onGestureBegin={onGestureBegin}
259263
onGestureCanceled={onGestureCanceled}
260264
onGestureEnd={onGestureEnd}
261-
gestureResponseDistance={
262-
descriptor.options.gestureResponseDistance
263-
}
265+
gestureResponseDistance={gestureResponseDistance}
264266
transitionSpec={transitionSpec}
265267
headerStyleInterpolator={headerStyleInterpolator}
266268
cardStyleInterpolator={cardStyleInterpolator}
267269
floaingHeaderHeight={floaingHeaderHeight}
268-
hasCustomHeader={descriptor.options.header === null}
270+
hasCustomHeader={header === null}
269271
getPreviousRoute={getPreviousRoute}
270272
headerMode={headerMode}
271273
renderHeader={renderHeader}

src/views/Stack/StackItem.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as React from 'react';
2-
import { StyleSheet, Platform } from 'react-native';
2+
import { StyleSheet, Platform, StyleProp, ViewStyle } from 'react-native';
33
import Animated from 'react-native-reanimated';
44
import { Props as HeaderContainerProps } from '../Header/HeaderContainer';
55
import Card from './Card';
@@ -25,9 +25,10 @@ type Props = {
2525
previousScene?: HeaderScene<Route>;
2626
scene: HeaderScene<Route>;
2727
navigation: NavigationProp;
28-
transparentCard?: boolean;
28+
cardTransparent?: boolean;
2929
cardOverlayEnabled?: boolean;
3030
cardShadowEnabled?: boolean;
31+
cardStyle?: StyleProp<ViewStyle>;
3132
gesturesEnabled?: boolean;
3233
direction: GestureDirection;
3334
getPreviousRoute: (props: { route: Route }) => Route | undefined;
@@ -85,9 +86,10 @@ export default class StackItem extends React.PureComponent<Props> {
8586
scene,
8687
previousScene,
8788
direction,
88-
transparentCard,
89+
cardTransparent,
8990
cardOverlayEnabled,
9091
cardShadowEnabled,
92+
cardStyle,
9193
gesturesEnabled,
9294
onGestureBegin,
9395
onGestureCanceled,
@@ -107,7 +109,7 @@ export default class StackItem extends React.PureComponent<Props> {
107109
return (
108110
<Card
109111
active={active}
110-
transparent={transparentCard}
112+
transparent={cardTransparent}
111113
direction={direction}
112114
layout={layout}
113115
current={current}
@@ -133,6 +135,7 @@ export default class StackItem extends React.PureComponent<Props> {
133135
? { marginTop: floaingHeaderHeight }
134136
: null
135137
}
138+
contentStyle={cardStyle}
136139
style={StyleSheet.absoluteFill}
137140
>
138141
{headerMode === 'screen'

0 commit comments

Comments
 (0)