From 6ea5a245c64a8a098310eec951958ca2a79b0b6e Mon Sep 17 00:00:00 2001 From: Guy Carmeli Date: Thu, 23 Nov 2017 11:40:54 +0200 Subject: [PATCH 1/2] Save navBar component props This commit saves navBar component props in propsRegistry and restores the saved props when the component is mounted, allowing us to pass unserializable props to custom navBar component. --- .../platformSpecificDeprecated.ios.js | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/deprecated/platformSpecificDeprecated.ios.js b/src/deprecated/platformSpecificDeprecated.ios.js index ff95dfb0717..867c2b54397 100644 --- a/src/deprecated/platformSpecificDeprecated.ios.js +++ b/src/deprecated/platformSpecificDeprecated.ios.js @@ -31,7 +31,8 @@ function startTabBasedApp(params) { navigatorButtons, navigatorEventID } = _mergeScreenSpecificSettings(tab.screen, screenInstanceID, tab); - _processNavigatorButtons(navigatorButtons); + _saveNavigatorButtonsProps(navigatorButtons); + _saveNavBarComponentProps(navigatorStyle); tab.navigationParams = { screenInstanceID, navigatorStyle, @@ -139,7 +140,8 @@ function startSingleScreenApp(params) { navigatorButtons, navigatorEventID } = _mergeScreenSpecificSettings(screen.screen, screenInstanceID, screen); - _processNavigatorButtons(navigatorButtons); + _saveNavigatorButtonsProps(navigatorButtons); + _saveNavBarComponentProps(navigatorStyle); params.navigationParams = { screenInstanceID, navigatorStyle, @@ -238,7 +240,8 @@ function navigatorPush(navigator, params) { navigatorButtons, navigatorEventID } = _mergeScreenSpecificSettings(params.screen, screenInstanceID, params); - _processNavigatorButtons(navigatorButtons); + _saveNavigatorButtonsProps(navigatorButtons); + _saveNavBarComponentProps(navigatorStyle); const passProps = Object.assign({}, params.passProps); passProps.navigatorID = navigator.navigatorID; passProps.screenInstanceID = screenInstanceID; @@ -297,7 +300,8 @@ function navigatorResetTo(navigator, params) { navigatorButtons, navigatorEventID } = _mergeScreenSpecificSettings(params.screen, screenInstanceID, params); - _processNavigatorButtons(navigatorButtons); + _saveNavigatorButtonsProps(navigatorButtons); + _saveNavBarComponentProps(navigatorStyle); const passProps = Object.assign({}, params.passProps); passProps.navigatorID = navigator.navigatorID; passProps.screenInstanceID = screenInstanceID; @@ -366,6 +370,7 @@ function navigatorToggleNavBar(navigator, params) { } function navigatorSetStyle(navigator, params) { + _saveNavBarComponentProps(params); Controllers.NavigationControllerIOS(navigator.navigatorID).setStyle(params) } @@ -447,7 +452,7 @@ function navigatorSwitchToTab(navigator, params) { } function navigatorSetButtons(navigator, navigatorEventID, params) { - _processNavigatorButtons(params); + _saveNavigatorButtonsProps(params); if (params.leftButtons) { const buttons = params.leftButtons.slice(); // clone for (let i = 0; i < buttons.length; i++) { @@ -477,7 +482,8 @@ function showModal(params) { navigatorButtons, navigatorEventID } = _mergeScreenSpecificSettings(params.screen, screenInstanceID, params); - _processNavigatorButtons(navigatorButtons); + _saveNavigatorButtonsProps(navigatorButtons); + _saveNavBarComponentProps(navigatorStyle); const passProps = Object.assign({}, params.passProps); passProps.navigatorID = navigatorID; passProps.screenInstanceID = screenInstanceID; @@ -646,7 +652,15 @@ async function getCurrentlyVisibleScreenId() { return await ScreenUtils.getCurrentlyVisibleScreenId(); } -function _processNavigatorButtons({rightButtons, leftButtons}) { +function _saveNavBarComponentProps(navigatorStyle) { + if (navigatorStyle.navBarCustomViewInitialProps) { + const passPropsKey = _.uniqueId('navBarComponent'); + PropRegistry.save(passPropsKey, navigatorStyle.navBarCustomViewInitialProps); + navigatorStyle.navBarCustomViewInitialProps = {passPropsKey}; + } +} + +function _saveNavigatorButtonsProps({rightButtons, leftButtons}) { _saveNavigatorButtonsPassProps(rightButtons); _saveNavigatorButtonsPassProps(leftButtons); } From 10975fa52476d9eb45e91d6f06f05cc832789d2c Mon Sep 17 00:00:00 2001 From: Guy Carmeli Date: Thu, 23 Nov 2017 11:44:24 +0200 Subject: [PATCH 2/2] Update docs --- docs/styling-the-navigator.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/styling-the-navigator.md b/docs/styling-the-navigator.md index 70c44a3cea5..e2b5b7cfbba 100644 --- a/docs/styling-the-navigator.md +++ b/docs/styling-the-navigator.md @@ -53,7 +53,7 @@ this.props.navigator.setStyle({ navBarBackgroundColor: '#f7f7f7', // change the background color of the nav bar (remembered across pushes) navBarCustomView: 'example.CustomTopBar', // registered component name navBarComponentAlignment: 'center', // center/fill - navBarCustomViewInitialProps: {}, // Serializable JSON passed as props + navBarCustomViewInitialProps: {}, // navBar custom component props navBarButtonColor: '#007aff', // Change color of nav bar buttons (eg. the back button) (remembered across pushes) navBarHidden: false, // make the nav bar hidden