diff --git a/packages/react-navigation/src/__tests__/addNavigationHelpers-test.js b/packages/react-navigation/src/__tests__/addNavigationHelpers-test.js index d5ff1fba..b2877db7 100644 --- a/packages/react-navigation/src/__tests__/addNavigationHelpers-test.js +++ b/packages/react-navigation/src/__tests__/addNavigationHelpers-test.js @@ -76,4 +76,43 @@ describe('addNavigationHelpers', () => { }); expect(mockedDispatch.mock.calls.length).toBe(1); }); + + it('handles GetParams action', () => { + const mockedDispatch = jest + .fn(() => false) + .mockImplementationOnce(() => true); + expect( + addNavigationHelpers({ + state: { key: 'B', routeName: 'Settings', params: { name: 'Peter' } }, + dispatch: mockedDispatch, + addListener: dummyEventSubscriber, + }).getParam('name', 'Brent') + ).toEqual('Peter'); + }); + + it('handles GetParams action with default param', () => { + const mockedDispatch = jest + .fn(() => false) + .mockImplementationOnce(() => true); + expect( + addNavigationHelpers({ + state: { key: 'B', routeName: 'Settings' }, + dispatch: mockedDispatch, + addListener: dummyEventSubscriber, + }).getParam('name', 'Brent') + ).toEqual('Brent'); + }); + + it('handles GetParams action with param value as null', () => { + const mockedDispatch = jest + .fn(() => false) + .mockImplementationOnce(() => true); + expect( + addNavigationHelpers({ + state: { key: 'B', routeName: 'Settings', params: { name: null } }, + dispatch: mockedDispatch, + addListener: dummyEventSubscriber, + }).getParam('name') + ).toEqual(null); + }); }); diff --git a/packages/react-navigation/src/addNavigationHelpers.js b/packages/react-navigation/src/addNavigationHelpers.js index a56721cf..559f8df9 100644 --- a/packages/react-navigation/src/addNavigationHelpers.js +++ b/packages/react-navigation/src/addNavigationHelpers.js @@ -61,6 +61,16 @@ export default function(navigation) { return navigation.dispatch(NavigationActions.setParams({ params, key })); }, + getParam: (paramName, defaultValue) => { + const params = navigation.state.params; + + if (params && paramName in params) { + return params[paramName]; + } + + return defaultValue; + }, + push: (routeName, params, action) => navigation.dispatch( NavigationActions.push({ routeName, params, action }) diff --git a/packages/react-navigation/src/navigators/__tests__/__snapshots__/StackNavigator-test.js.snap b/packages/react-navigation/src/navigators/__tests__/__snapshots__/StackNavigator-test.js.snap index 603882d5..2da09869 100644 --- a/packages/react-navigation/src/navigators/__tests__/__snapshots__/StackNavigator-test.js.snap +++ b/packages/react-navigation/src/navigators/__tests__/__snapshots__/StackNavigator-test.js.snap @@ -95,6 +95,7 @@ exports[`StackNavigator applies correct values when headerRight is present 1`] = Object { "addListener": [Function], "dispatch": [Function], + "getParam": [Function], "goBack": [Function], "navigate": [Function], "pop": [Function], @@ -334,6 +335,7 @@ exports[`StackNavigator renders successfully 1`] = ` Object { "addListener": [Function], "dispatch": [Function], + "getParam": [Function], "goBack": [Function], "navigate": [Function], "pop": [Function], diff --git a/packages/react-navigation/src/views/__tests__/__snapshots__/TabView-test.js.snap b/packages/react-navigation/src/views/__tests__/__snapshots__/TabView-test.js.snap index a5527dff..48b73902 100644 --- a/packages/react-navigation/src/views/__tests__/__snapshots__/TabView-test.js.snap +++ b/packages/react-navigation/src/views/__tests__/__snapshots__/TabView-test.js.snap @@ -237,6 +237,7 @@ exports[`TabBarBottom renders successfully 1`] = ` Object { "addListener": [Function], "dispatch": undefined, + "getParam": [Function], "goBack": [Function], "navigate": [Function], "pop": [Function],