Compare commits

..

12 Commits
2.4.1 ... 2.5.2

Author SHA1 Message Date
Brent Vatne
cde6e845cd Release 2.5.2 2018-06-23 11:02:14 -07:00
Brent Vatne
fb8c712ad8 Update react-navigation-drawer to 0.4.2 to fix toggle regression 2018-06-23 11:01:47 -07:00
Brent Vatne
350b7e0aed Release 2.5.1 2018-06-22 13:21:22 -07:00
Brent Vatne
de112565d3 Fix name of prop, should be lastTransitionProps instead of prevTransitionProps in StackViewLayout
- Fixes #4542
2018-06-22 13:18:26 -07:00
Brent Vatne
acdd515c13 Update example app.json 2018-06-22 12:50:50 -07:00
Rodrigo Bermúdez Schettino
452a6d2004 Improve changelog format (#4559)
Bug fixes should be listed in the "Fixed" section instead of "Changed" according to keepachangelog.
2018-06-22 10:41:58 -07:00
Brent Vatne
08c8031a71 Release 2.5.0 2018-06-22 10:32:11 -07:00
Eric Vicenti
608365266a @ericvicenti/universe (#4493)
* Isolate modules for uncontainerized navigators

* Clean up prop-types

* Fix warnings and web import friendlyness

* strip a flow

* Standalone provider/consumer navigation context

* export shallowEqual as module

* address various lint

# Conflicts:
#	src/navigators/createStackNavigator.js

* Get tests to pass
2018-06-22 10:20:27 -07:00
Rodrigo Bermúdez Schettino
247fba56e6 Fix typo in Pull Request Template (#4558)
Also link to the "Unreleased" section in CHANGELOG.
2018-06-22 10:19:41 -07:00
Brent Vatne
060f5dcecf Update PR template for changelog 2018-06-22 08:25:38 -07:00
Rodrigo Bermúdez Schettino
fdec05c87a Create CHANGELOG.md (#4544)
List all changes between versions to notify about notable changes in releases.
2018-06-22 08:22:15 -07:00
Brent Vatne
76da804574 Fixes #4491 2018-06-21 15:24:52 -07:00
26 changed files with 165 additions and 146 deletions

View File

@@ -1,17 +1,21 @@
Please provide enough information so that others can review your pull request: Please provide enough information so that others can review your pull request:
## Motivation
Explain the **motivation** for making this change. What existing problem does the pull request solve? Explain the **motivation** for making this change. What existing problem does the pull request solve?
Prefer **small pull requests**. These are much easier to review and more likely to get merged. Make sure the PR does only one thing, otherwise split it. ## Test plan
**Test plan (required)** Demonstrate the code is solid. Example: the exact commands you ran and their output, screenshots / videos if the pull request changes UI.
Demonstrate the code is solid. Example: The exact commands you ran and their output, screenshots / videos if the pull request changes UI.
Make sure you test on both platforms if your change affects both platforms. Make sure you test on both platforms if your change affects both platforms.
The code must pass tests. The code must pass tests.
**Code formatting** ## Code formatting
Look around. Match the style of the rest of the codebase. Look around. Match the style of the rest of the codebase. Run `yarn format` before committing.
## Changelog
Add an entry under the "Unreleased" heading in [CHANGELOG.md](https://github.com/react-navigation/react-navigation/blob/master/CHANGELOG.md#unreleased) which explains your change.

29
CHANGELOG.md Normal file
View File

@@ -0,0 +1,29 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [2.5.1] - [2018-06-22](https://github.com/react-navigation/react-navigation/releases/tag/2.5.1)
### Fixed
- `transitionConfig` in stack navigator no longer passes incorrect `fromTransitionProps` when navigating back
## [2.5.0] - [2018-06-22](https://github.com/react-navigation/react-navigation/releases/tag/2.5.0)
### Changed
- Refactor internals to make it play more nicely with web
### Fixed
- `const defaultGetStateForAction = SwitchBasedNavigator.router.getStateForAction` no longer throws error.
- Updated react-navigation-drawer to 0.4.1 which should fix issues related to automatically closing drawer when changing routes.
## [2.4.1] - [2018-06-21](https://github.com/react-navigation/react-navigation/releases/tag/2.4.1)
### Changed
- Improved examples
[Unreleased]: https://github.com/react-navigation/react-navigation/compare/2.5.1...HEAD
[2.5.0]: https://github.com/react-navigation/react-navigation/compare/2.5.0...2.5.1
[2.5.0]: https://github.com/react-navigation/react-navigation/compare/2.4.1...2.5.0
[2.4.1]: https://github.com/react-navigation/react-navigation/compare/2.4.0...2.4.1

View File

@@ -13,14 +13,15 @@
}, },
"sdkVersion": "27.0.0", "sdkVersion": "27.0.0",
"entryPoint": "./node_modules/react-native-scripts/build/bin/crna-entry.js", "entryPoint": "./node_modules/react-native-scripts/build/bin/crna-entry.js",
"packagerOpts": { "assetBundlePatterns": [
"assetExts": [ "**/*"
"ttf", ],
"mp4"
]
},
"ios": { "ios": {
"bundleIdentifier": "com.reactnavigation.example",
"supportsTablet": true "supportsTablet": true
},
"android": {
"package": "com.reactnavigation.example"
} }
} }
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "react-navigation", "name": "react-navigation",
"version": "2.4.1", "version": "2.5.2",
"description": "Routing and navigation for your React Native apps", "description": "Routing and navigation for your React Native apps",
"main": "src/react-navigation.js", "main": "src/react-navigation.js",
"repository": { "repository": {
@@ -33,11 +33,10 @@
"create-react-context": "^0.2.1", "create-react-context": "^0.2.1",
"hoist-non-react-statics": "^2.2.0", "hoist-non-react-statics": "^2.2.0",
"path-to-regexp": "^1.7.0", "path-to-regexp": "^1.7.0",
"prop-types": "^15.5.10",
"react-lifecycles-compat": "^3", "react-lifecycles-compat": "^3",
"react-native-safe-area-view": "^0.8.0", "react-native-safe-area-view": "^0.8.0",
"react-navigation-deprecated-tab-navigator": "1.3.0", "react-navigation-deprecated-tab-navigator": "1.3.0",
"react-navigation-drawer": "0.3.2", "react-navigation-drawer": "0.4.2",
"react-navigation-tabs": "0.5.1" "react-navigation-tabs": "0.5.1"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -5,7 +5,9 @@ import renderer from 'react-test-renderer';
import NavigationActions from '../NavigationActions'; import NavigationActions from '../NavigationActions';
import createStackNavigator from '../navigators/createStackNavigator'; import createStackNavigator from '../navigators/createStackNavigator';
import { _TESTING_ONLY_reset_container_count } from '../createNavigationContainer'; import createNavigationContainer, {
_TESTING_ONLY_reset_container_count,
} from '../createNavigationContainer';
describe('NavigationContainer', () => { describe('NavigationContainer', () => {
jest.useFakeTimers(); jest.useFakeTimers();
@@ -19,7 +21,7 @@ describe('NavigationContainer', () => {
const CarScreen = () => <div />; const CarScreen = () => <div />;
const DogScreen = () => <div />; const DogScreen = () => <div />;
const ElkScreen = () => <div />; const ElkScreen = () => <div />;
const NavigationContainer = createStackNavigator( const Stack = createStackNavigator(
{ {
foo: { foo: {
screen: FooScreen, screen: FooScreen,
@@ -44,6 +46,7 @@ describe('NavigationContainer', () => {
initialRouteName: 'foo', initialRouteName: 'foo',
} }
); );
const NavigationContainer = createNavigationContainer(Stack);
describe('state.nav', () => { describe('state.nav', () => {
it("should be preloaded with the router's initial state", () => { it("should be preloaded with the router's initial state", () => {
@@ -225,7 +228,7 @@ describe('NavigationContainer', () => {
let spy = spyConsole(); let spy = spyConsole();
it('warns when you render more than one navigator explicitly', () => { it('warns when you render more than one container explicitly', () => {
class BlankScreen extends React.Component { class BlankScreen extends React.Component {
render() { render() {
return <View />; return <View />;
@@ -242,13 +245,17 @@ describe('NavigationContainer', () => {
} }
} }
const ChildNavigator = createStackNavigator({ const ChildNavigator = createNavigationContainer(
Child: BlankScreen, createStackNavigator({
}); Child: BlankScreen,
})
);
const RootStack = createStackNavigator({ const RootStack = createNavigationContainer(
Root: RootScreen, createStackNavigator({
}); Root: RootScreen,
})
);
renderer.create(<RootStack />).toJSON(); renderer.create(<RootStack />).toJSON();
expect(spy).toMatchSnapshot(); expect(spy).toMatchSnapshot();

View File

@@ -1,6 +1,6 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP // Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`NavigationContainer warnings detached navigators warns when you render more than one navigator explicitly 1`] = ` exports[`NavigationContainer warnings detached navigators warns when you render more than one container explicitly 1`] = `
Object { Object {
"console": [MockFunction] { "console": [MockFunction] {
"calls": Array [ "calls": Array [

View File

@@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import renderer from 'react-test-renderer'; import renderer from 'react-test-renderer';
import StackNavigator from '../createStackNavigator'; import StackNavigator from '../createContainedStackNavigator';
const SubNavigator = StackNavigator({ const SubNavigator = StackNavigator({
Home: { Home: {

View File

@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import { StyleSheet, View } from 'react-native'; import { StyleSheet, View } from 'react-native';
import renderer from 'react-test-renderer'; import renderer from 'react-test-renderer';
import StackNavigator from '../createStackNavigator'; import StackNavigator from '../createContainedStackNavigator';
import withNavigation from '../../views/withNavigation'; import withNavigation from '../../views/withNavigation';
import { _TESTING_ONLY_reset_container_count } from '../../createNavigationContainer'; import { _TESTING_ONLY_reset_container_count } from '../../createNavigationContainer';

View File

@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import { View } from 'react-native'; import { View } from 'react-native';
import renderer from 'react-test-renderer'; import renderer from 'react-test-renderer';
import SwitchNavigator from '../createSwitchNavigator'; import SwitchNavigator from '../createContainedSwitchNavigator';
const A = () => <View />; const A = () => <View />;
const B = () => <View />; const B = () => <View />;

View File

@@ -0,0 +1,9 @@
import createNavigationContainer from '../createNavigationContainer';
import createStackNavigator from './createStackNavigator';
const StackNavigator = (routeConfigs, config = {}) => {
const navigator = createStackNavigator(routeConfigs, config);
return createNavigationContainer(navigator);
};
export default StackNavigator;

View File

@@ -0,0 +1,9 @@
import createNavigationContainer from '../createNavigationContainer';
import createSwitchNavigator from './createSwitchNavigator';
const SwitchNavigator = (routeConfigs, config = {}) => {
const navigator = createSwitchNavigator(routeConfigs, config);
return createNavigationContainer(navigator);
};
export default SwitchNavigator;

View File

@@ -1,5 +1,3 @@
import React from 'react';
import createNavigationContainer from '../createNavigationContainer';
import createKeyboardAwareNavigator from './createKeyboardAwareNavigator'; import createKeyboardAwareNavigator from './createKeyboardAwareNavigator';
import createNavigator from './createNavigator'; import createNavigator from './createNavigator';
import StackView from '../views/StackView/StackView'; import StackView from '../views/StackView/StackView';
@@ -33,8 +31,7 @@ function createStackNavigator(routeConfigMap, stackConfig = {}) {
Navigator = createKeyboardAwareNavigator(Navigator); Navigator = createKeyboardAwareNavigator(Navigator);
} }
// HOC to provide the navigation prop for the top-level navigator (when the prop is missing) return Navigator;
return createNavigationContainer(Navigator);
} }
export default createStackNavigator; export default createStackNavigator;

View File

@@ -1,5 +1,4 @@
import React from 'react'; import React from 'react';
import createNavigationContainer from '../createNavigationContainer';
import createNavigator from '../navigators/createNavigator'; import createNavigator from '../navigators/createNavigator';
import SwitchRouter from '../routers/SwitchRouter'; import SwitchRouter from '../routers/SwitchRouter';
import SwitchView from '../views/SwitchView/SwitchView'; import SwitchView from '../views/SwitchView/SwitchView';
@@ -7,7 +6,7 @@ import SwitchView from '../views/SwitchView/SwitchView';
function createSwitchNavigator(routeConfigMap, switchConfig = {}) { function createSwitchNavigator(routeConfigMap, switchConfig = {}) {
const router = SwitchRouter(routeConfigMap, switchConfig); const router = SwitchRouter(routeConfigMap, switchConfig);
const Navigator = createNavigator(SwitchView, router, switchConfig); const Navigator = createNavigator(SwitchView, router, switchConfig);
return createNavigationContainer(Navigator); return Navigator;
} }
export default createSwitchNavigator; export default createSwitchNavigator;

View File

@@ -17,22 +17,22 @@ module.exports = {
return require('./navigators/createNavigator').default; return require('./navigators/createNavigator').default;
}, },
get createStackNavigator() { get createStackNavigator() {
return require('./navigators/createStackNavigator').default; return require('./navigators/createContainedStackNavigator').default;
}, },
get StackNavigator() { get StackNavigator() {
console.warn( console.warn(
'The StackNavigator function name is deprecated, please use createStackNavigator instead' 'The StackNavigator function name is deprecated, please use createStackNavigator instead'
); );
return require('./navigators/createStackNavigator').default; return require('./navigators/createContainedStackNavigator').default;
}, },
get createSwitchNavigator() { get createSwitchNavigator() {
return require('./navigators/createSwitchNavigator').default; return require('./navigators/createContainedSwitchNavigator').default;
}, },
get SwitchNavigator() { get SwitchNavigator() {
console.warn( console.warn(
'The SwitchNavigator function name is deprecated, please use createSwitchNavigator instead' 'The SwitchNavigator function name is deprecated, please use createSwitchNavigator instead'
); );
return require('./navigators/createSwitchNavigator').default; return require('./navigators/createContainedSwitchNavigator').default;
}, },
get createDrawerNavigator() { get createDrawerNavigator() {
return require('react-navigation-drawer').createDrawerNavigator; return require('react-navigation-drawer').createDrawerNavigator;

View File

@@ -74,40 +74,40 @@ export default (routeConfigs, config = {}) => {
}; };
} }
function getNextState(prevState, possibleNextState) {
if (!prevState) {
return possibleNextState;
}
let nextState;
if (prevState.index !== possibleNextState.index && resetOnBlur) {
const prevRouteName = prevState.routes[prevState.index].routeName;
const nextRoutes = [...possibleNextState.routes];
nextRoutes[prevState.index] = resetChildRoute(prevRouteName);
return {
...possibleNextState,
routes: nextRoutes,
};
} else {
nextState = possibleNextState;
}
return nextState;
}
function getInitialState() {
const routes = order.map(resetChildRoute);
return {
routes,
index: initialRouteIndex,
isTransitioning: false,
};
}
return { return {
childRouters, childRouters,
getInitialState() {
const routes = order.map(resetChildRoute);
return {
routes,
index: initialRouteIndex,
isTransitioning: false,
};
},
getNextState(prevState, possibleNextState) {
if (!prevState) {
return possibleNextState;
}
let nextState;
if (prevState.index !== possibleNextState.index && resetOnBlur) {
const prevRouteName = prevState.routes[prevState.index].routeName;
const nextRoutes = [...possibleNextState.routes];
nextRoutes[prevState.index] = resetChildRoute(prevRouteName);
return {
...possibleNextState,
routes: nextRoutes,
};
} else {
nextState = possibleNextState;
}
return nextState;
},
getActionCreators(route, stateKey) { getActionCreators(route, stateKey) {
return { return {
...getNavigationActionCreators(route), ...getNavigationActionCreators(route),
@@ -117,7 +117,7 @@ export default (routeConfigs, config = {}) => {
getStateForAction(action, inputState) { getStateForAction(action, inputState) {
let prevState = inputState ? { ...inputState } : inputState; let prevState = inputState ? { ...inputState } : inputState;
let state = inputState || this.getInitialState(); let state = inputState || getInitialState();
let activeChildIndex = state.index; let activeChildIndex = state.index;
if (action.type === NavigationActions.INIT) { if (action.type === NavigationActions.INIT) {
@@ -154,7 +154,7 @@ export default (routeConfigs, config = {}) => {
if (activeChildState && activeChildState !== activeChildLastState) { if (activeChildState && activeChildState !== activeChildLastState) {
const routes = [...state.routes]; const routes = [...state.routes];
routes[state.index] = activeChildState; routes[state.index] = activeChildState;
return this.getNextState(prevState, { return getNextState(prevState, {
...state, ...state,
routes, routes,
}); });
@@ -204,7 +204,7 @@ export default (routeConfigs, config = {}) => {
if (newChildState && newChildState !== childState) { if (newChildState && newChildState !== childState) {
const routes = [...state.routes]; const routes = [...state.routes];
routes[activeChildIndex] = newChildState; routes[activeChildIndex] = newChildState;
return this.getNextState(prevState, { return getNextState(prevState, {
...state, ...state,
routes, routes,
index: activeChildIndex, index: activeChildIndex,
@@ -232,7 +232,7 @@ export default (routeConfigs, config = {}) => {
...lastRoute, ...lastRoute,
params, params,
}; };
return this.getNextState(prevState, { return getNextState(prevState, {
...state, ...state,
routes, routes,
}); });
@@ -240,7 +240,7 @@ export default (routeConfigs, config = {}) => {
} }
if (activeChildIndex !== state.index) { if (activeChildIndex !== state.index) {
return this.getNextState(prevState, { return getNextState(prevState, {
...state, ...state,
index: activeChildIndex, index: activeChildIndex,
}); });
@@ -284,7 +284,7 @@ export default (routeConfigs, config = {}) => {
} }
if (index !== state.index || routes !== state.routes) { if (index !== state.index || routes !== state.routes) {
return this.getNextState(prevState, { return getNextState(prevState, {
...state, ...state,
index, index,
routes, routes,

View File

@@ -21,25 +21,24 @@ function validateRouteConfigMap(routeConfigs) {
typeof screenComponent !== 'string' && typeof screenComponent !== 'string' &&
!routeConfig.getScreen) !routeConfig.getScreen)
) { ) {
throw new Error( throw new Error(`The component for route '${routeName}' must be a React component. For example:
`The component for route '${routeName}' must be a ` +
'React component. For example:\n\n' + import MyScreen from './MyScreen';
"import MyScreen from './MyScreen';\n" + ...
'...\n' + ${routeName}: MyScreen,
`${routeName}: MyScreen,\n` + }
'}\n\n' +
'You can also use a navigator:\n\n' + You can also use a navigator:
"import MyNavigator from './MyNavigator';\n" +
'...\n' + import MyNavigator from './MyNavigator';
`${routeName}: MyNavigator,\n` + ...
'}' ${routeName}: MyNavigator,
); }`);
} }
if (routeConfig.screen && routeConfig.getScreen) { if (routeConfig.screen && routeConfig.getScreen) {
throw new Error( throw new Error(
`Route '${routeName}' should declare a screen or ` + `Route '${routeName}' should declare a screen or a getScreen, not both.`
'a getScreen, not both.'
); );
} }
}); });

View File

@@ -1,14 +1,3 @@
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
'use strict';
/** /**
* Use invariant() to assert state which your program assumes to be true. * Use invariant() to assert state which your program assumes to be true.
* *

View File

@@ -1,19 +1,5 @@
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @typechecks
*
*/
/*eslint-disable no-self-compare */ /*eslint-disable no-self-compare */
'use strict';
const hasOwnProperty = Object.prototype.hasOwnProperty; const hasOwnProperty = Object.prototype.hasOwnProperty;
/** /**
@@ -71,4 +57,4 @@ function shallowEqual(objA, objB) {
return true; return true;
} }
module.exports = shallowEqual; export default shallowEqual;

View File

@@ -0,0 +1,3 @@
import { NavigationConsumer } from './NavigationContext';
export default NavigationConsumer;

View File

@@ -1,5 +1,4 @@
import React from 'react'; import React from 'react';
import propTypes from 'prop-types';
import createReactContext from 'create-react-context'; import createReactContext from 'create-react-context';
const NavigationContext = createReactContext(); const NavigationContext = createReactContext();

View File

@@ -0,0 +1,3 @@
import { NavigationProvider } from './NavigationContext';
export default NavigationProvider;

View File

@@ -1,5 +1,4 @@
import React from 'react'; import React from 'react';
import propTypes from 'prop-types';
import { NavigationProvider } from './NavigationContext'; import { NavigationProvider } from './NavigationContext';
export default class SceneView extends React.PureComponent { export default class SceneView extends React.PureComponent {

View File

@@ -3,7 +3,6 @@ import { NativeModules } from 'react-native';
import StackViewLayout from './StackViewLayout'; import StackViewLayout from './StackViewLayout';
import Transitioner from '../Transitioner'; import Transitioner from '../Transitioner';
import NavigationActions from '../../NavigationActions';
import StackActions from '../../routers/StackActions'; import StackActions from '../../routers/StackActions';
import TransitionConfigs from './StackViewTransitionConfigs'; import TransitionConfigs from './StackViewTransitionConfigs';

View File

@@ -21,7 +21,7 @@ import withOrientation from '../withOrientation';
import { NavigationProvider } from '../NavigationContext'; import { NavigationProvider } from '../NavigationContext';
import TransitionConfigs from './StackViewTransitionConfigs'; import TransitionConfigs from './StackViewTransitionConfigs';
import * as ReactNativeFeatures from '../../utils/ReactNativeFeatures'; import { supportsImprovedSpringAnimation } from '../../utils/ReactNativeFeatures';
const emptyFunction = () => {}; const emptyFunction = () => {};
@@ -119,7 +119,7 @@ class StackViewLayout extends React.Component {
const { const {
mode, mode,
transitionProps, transitionProps,
prevTransitionProps, lastTransitionProps,
...passProps ...passProps
} = this.props; } = this.props;
@@ -154,10 +154,7 @@ class StackViewLayout extends React.Component {
} }
_reset(resetToIndex, duration) { _reset(resetToIndex, duration) {
if ( if (Platform.OS === 'ios' && supportsImprovedSpringAnimation()) {
Platform.OS === 'ios' &&
ReactNativeFeatures.supportsImprovedSpringAnimation()
) {
Animated.spring(this.props.transitionProps.position, { Animated.spring(this.props.transitionProps.position, {
toValue: resetToIndex, toValue: resetToIndex,
stiffness: 5000, stiffness: 5000,
@@ -197,10 +194,7 @@ class StackViewLayout extends React.Component {
} }
}; };
if ( if (Platform.OS === 'ios' && supportsImprovedSpringAnimation()) {
Platform.OS === 'ios' &&
ReactNativeFeatures.supportsImprovedSpringAnimation()
) {
Animated.spring(position, { Animated.spring(position, {
toValue, toValue,
stiffness: 5000, stiffness: 5000,
@@ -236,7 +230,7 @@ class StackViewLayout extends React.Component {
return false; return false;
} }
position.stopAnimation((value: number) => { position.stopAnimation(value => {
this._isResponding = true; this._isResponding = true;
this._gestureStartValue = value; this._gestureStartValue = value;
}); });
@@ -244,7 +238,7 @@ class StackViewLayout extends React.Component {
}, },
onMoveShouldSetPanResponder: (event, gesture) => { onMoveShouldSetPanResponder: (event, gesture) => {
const { const {
transitionProps: { navigation, position, layout, scene, scenes }, transitionProps: { navigation, layout, scene },
mode, mode,
} = this.props; } = this.props;
const { index } = navigation.state; const { index } = navigation.state;
@@ -407,6 +401,7 @@ class StackViewLayout extends React.Component {
render() { render() {
let floatingHeader = null; let floatingHeader = null;
const headerMode = this._getHeaderMode(); const headerMode = this._getHeaderMode();
if (headerMode === 'float') { if (headerMode === 'float') {
const { scene } = this.props.transitionProps; const { scene } = this.props.transitionProps;
floatingHeader = ( floatingHeader = (
@@ -416,18 +411,10 @@ class StackViewLayout extends React.Component {
); );
} }
const { const {
transitionProps: { navigation, position, layout, scene, scenes }, transitionProps: { scene, scenes },
mode, mode,
} = this.props; } = this.props;
const { index } = navigation.state;
const isVertical = mode === 'modal';
const { options } = scene.descriptor; const { options } = scene.descriptor;
const gestureDirection = options.gestureDirection;
const gestureDirectionInverted =
typeof gestureDirection === 'string'
? gestureDirection === 'inverted'
: I18nManager.isRTL;
const gesturesEnabled = const gesturesEnabled =
typeof options.gesturesEnabled === 'boolean' typeof options.gesturesEnabled === 'boolean'
@@ -512,13 +499,14 @@ class StackViewLayout extends React.Component {
return TransitionConfigs.getTransitionConfig( return TransitionConfigs.getTransitionConfig(
this.props.transitionConfig, this.props.transitionConfig,
this.props.transitionProps, this.props.transitionProps,
this.props.prevTransitionProps, this.props.lastTransitionProps,
isModal isModal
); );
}; };
_renderCard = scene => { _renderCard = scene => {
const { screenInterpolator } = this._getTransitionConfig(); const { screenInterpolator } = this._getTransitionConfig();
const style = const style =
screenInterpolator && screenInterpolator &&
screenInterpolator({ ...this.props.transitionProps, scene }); screenInterpolator({ ...this.props.transitionProps, scene });

View File

@@ -1,9 +1,9 @@
import { Animated, Easing, Platform } from 'react-native'; import { Animated, Easing, Platform } from 'react-native';
import StyleInterpolator from './StackViewStyleInterpolator'; import StyleInterpolator from './StackViewStyleInterpolator';
import * as ReactNativeFeatures from '../../utils/ReactNativeFeatures'; import { supportsImprovedSpringAnimation } from '../../utils/ReactNativeFeatures';
let IOSTransitionSpec; let IOSTransitionSpec;
if (ReactNativeFeatures.supportsImprovedSpringAnimation()) { if (supportsImprovedSpringAnimation()) {
// These are the exact values from UINavigationController's animation configuration // These are the exact values from UINavigationController's animation configuration
IOSTransitionSpec = { IOSTransitionSpec = {
timing: Animated.spring, timing: Animated.spring,

View File

@@ -4828,9 +4828,9 @@ react-navigation-deprecated-tab-navigator@1.3.0:
dependencies: dependencies:
react-native-tab-view "^0.0.77" react-native-tab-view "^0.0.77"
react-navigation-drawer@0.3.2: react-navigation-drawer@0.4.2:
version "0.3.2" version "0.4.2"
resolved "https://registry.yarnpkg.com/react-navigation-drawer/-/react-navigation-drawer-0.3.2.tgz#f9b0bd29c6859500201ec4742e81db992074aec2" resolved "https://registry.yarnpkg.com/react-navigation-drawer/-/react-navigation-drawer-0.4.2.tgz#49aa1bc6684923294a9c112dce75d8ec4184c64f"
dependencies: dependencies:
react-native-drawer-layout-polyfill "^1.3.2" react-native-drawer-layout-polyfill "^1.3.2"