From b2444e6c618ee18f0a024d5320f6b773f8de0a95 Mon Sep 17 00:00:00 2001 From: Brent Vatne Date: Fri, 16 Feb 2018 17:06:16 -0800 Subject: [PATCH] Revert "Revert "Add getParam navigation helper (#3510)" (#3532)" This reverts commit 5febb81a1cdf67a1e4a7f5a4a843087d6288fa1c. --- .../__tests__/addNavigationHelpers-test.js | 39 +++++++++++++++++++ .../src/addNavigationHelpers.js | 10 +++++ .../__snapshots__/StackNavigator-test.js.snap | 2 + 3 files changed, 51 insertions(+) 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 780892ed..59be7324 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 @@ -98,6 +98,7 @@ exports[`StackNavigator applies correct values when headerRight is present 1`] = Object { "addListener": [Function], "dispatch": [Function], + "getParam": [Function], "goBack": [Function], "navigate": [Function], "pop": [Function], @@ -337,6 +338,7 @@ exports[`StackNavigator renders successfully 1`] = ` Object { "addListener": [Function], "dispatch": [Function], + "getParam": [Function], "goBack": [Function], "navigate": [Function], "pop": [Function],