From fcbf78e658f5e5c6cc4b7f2ef0ec345fff8fb448 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Thu, 15 Mar 2018 18:55:00 +0100 Subject: [PATCH] feat(context): refactor passing navigation context (#3668) * feat(context): refactor passing navigation context * remove commented code in example * adjust src/views/withNavigationFocus.js * refactor stuff * extract scene to variable * Add test * Apply CR comments * remove junk * bring back screen mode header --- examples/NavigationPlayground/yarn.lock | 13 ++++++- package.json | 1 + .../__tests__/StackNavigator-test.js | 34 +++++++++++++++++++ src/views/NavigationContext.js | 8 +++++ src/views/SceneView.js | 19 ++++------- src/views/StackView/StackViewLayout.js | 9 +++-- src/views/withNavigation.js | 27 +++++++++------ src/views/withNavigationFocus.js | 29 ++++++---------- yarn.lock | 13 ++++++- 9 files changed, 108 insertions(+), 45 deletions(-) create mode 100644 src/views/NavigationContext.js diff --git a/examples/NavigationPlayground/yarn.lock b/examples/NavigationPlayground/yarn.lock index e7d2c50..7f2be23 100644 --- a/examples/NavigationPlayground/yarn.lock +++ b/examples/NavigationPlayground/yarn.lock @@ -1659,6 +1659,13 @@ create-react-class@^15.5.2: loose-envify "^1.3.1" object-assign "^4.1.1" +create-react-context@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.2.1.tgz#425a3d96f4b7690c2fbf20aed5aeae2e2007a959" + dependencies: + fbjs "^0.8.0" + gud "^1.0.0" + cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -2247,7 +2254,7 @@ fbjs-scripts@^0.8.1: semver "^5.1.0" through2 "^2.0.0" -fbjs@^0.8.14, fbjs@^0.8.16, fbjs@^0.8.4, fbjs@^0.8.9: +fbjs@^0.8.0, fbjs@^0.8.14, fbjs@^0.8.16, fbjs@^0.8.4, fbjs@^0.8.9: version "0.8.16" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" dependencies: @@ -2625,6 +2632,10 @@ growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" +gud@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" + gulp-util@^3.0.4: version "3.0.8" resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" diff --git a/package.json b/package.json index a695229..9d7a37c 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ }, "dependencies": { "clamp": "^1.0.1", + "create-react-context": "^0.2.1", "hoist-non-react-statics": "^2.2.0", "path-to-regexp": "^1.7.0", "prop-types": "^15.5.10", diff --git a/src/navigators/__tests__/StackNavigator-test.js b/src/navigators/__tests__/StackNavigator-test.js index 2493322..0c3bfee 100644 --- a/src/navigators/__tests__/StackNavigator-test.js +++ b/src/navigators/__tests__/StackNavigator-test.js @@ -3,6 +3,7 @@ import { StyleSheet, View } from 'react-native'; import renderer from 'react-test-renderer'; import StackNavigator from '../createStackNavigator'; +import withNavigation from '../../views/withNavigation'; const styles = StyleSheet.create({ header: { @@ -51,4 +52,37 @@ describe('StackNavigator', () => { expect(rendered).toMatchSnapshot(); }); + + it('passes navigation to headerRight when wrapped in withNavigation', () => { + const spy = jest.fn(); + + class TestComponent extends React.Component { + render() { + return {this.props.onPress(this.props.navigation)}; + } + } + + const TestComponentWithNavigation = withNavigation(TestComponent); + + class A extends React.Component { + static navigationOptions = { + headerRight: , + }; + + render() { + return ; + } + } + + const Nav = StackNavigator({ A: { screen: A } }); + + renderer.create(