From ac2c413a8b4dd2ca5b53167b4628c84133745c62 Mon Sep 17 00:00:00 2001 From: darkrishabh Date: Wed, 17 Jun 2015 17:23:45 -0700 Subject: [PATCH 1/3] Adding the feature to repalce the route --- index.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/index.js b/index.js index e9e4350..37f8e04 100644 --- a/index.js +++ b/index.js @@ -64,6 +64,10 @@ var Router = React.createClass({ navigator.popToTop() }; + var replaceRoute = function(route) { + navigator.route() + }; + var customAction = function(opts) { this.customAction(opts); }.bind(this); @@ -113,6 +117,7 @@ var Router = React.createClass({ data={route.data} toRoute={goForward} toBack={goBackwards} + replace ={replaceRoute} reset={goToFirstRoute} customAction={customAction} /> From 6a453c5f2fb3f9fa5e318ea0820fde1b70b77682 Mon Sep 17 00:00:00 2001 From: darkrishabh Date: Wed, 17 Jun 2015 17:28:18 -0700 Subject: [PATCH 2/3] fix spacing --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 37f8e04..4d9d5b6 100644 --- a/index.js +++ b/index.js @@ -117,7 +117,7 @@ var Router = React.createClass({ data={route.data} toRoute={goForward} toBack={goBackwards} - replace ={replaceRoute} + replace={replaceRoute} reset={goToFirstRoute} customAction={customAction} /> From 823c9089020f25dda3f825d7d490e9afa840b6d2 Mon Sep 17 00:00:00 2001 From: darkrishabh Date: Mon, 22 Jun 2015 16:54:18 -0700 Subject: [PATCH 3/3] Adding a way to hide the nav bar on replace as well as on toRoute --- index.js | 316 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 160 insertions(+), 156 deletions(-) diff --git a/index.js b/index.js index 4d9d5b6..b5b164a 100644 --- a/index.js +++ b/index.js @@ -5,171 +5,175 @@ var React = require('react-native'); var NavBarContainer = require('./components/NavBarContainer'); var { - StyleSheet, - Navigator, - StatusBarIOS, - View, -} = React; + StyleSheet, + Navigator, + StatusBarIOS, + View, + } = React; var Router = React.createClass({ - getInitialState: function() { - return { - route: { - name: null, - index: null - }, - dragStartX: null, - didSwitchView: null, + getInitialState: function () { + return { + route: { + name: null, + index: null + }, + hideHeader: false, + dragStartX: null, + didSwitchView: null, + } + }, + + /* + * This changes the title in the navigation bar + * It should preferrably be called for "onWillFocus" instad > + * > but a recent update to React Native seems to break the animation + */ + onDidFocus: function (route) { + this.setState({route: route}); + }, + + onBack: function (navigator) { + if (this.state.route.index > 0) { + navigator.pop(); + } + }, + + onForward: function (route, navigator) { + route.index = this.state.route.index + 1 || 1; + navigator.push(route); + }, + + customAction: function (opts) { + this.props.customAction(opts); + }, + + renderScene: function (route, navigator) { + var me = this; + var goForward = function (route) { + route.index = this.state.route.index + 1 || 1; + this.setState({hideHeader: route.hideNavigationBar}) + navigator.push(route); + }.bind(this); + + var goBackwards = function () { + this.onBack(navigator); + }.bind(this); + + var goToFirstRoute = function () { + navigator.popToTop() + }; + + var replaceRoute = function (route) { + me.setState({hideHeader: route.hideNavigationBar}) + navigator.replace(route) + }; + + var customAction = function (opts) { + this.customAction(opts); + }.bind(this); + + var didStartDrag = function (evt) { + var x = evt.nativeEvent.pageX; + if (x < 28) { + this.setState({ + dragStartX: x, + didSwitchView: false + }); + return true; + } + }.bind(this); + + // Recognize swipe back gesture for navigation + var didMoveFinger = function (evt) { + var draggedAway = ((evt.nativeEvent.pageX - this.state.dragStartX) > + 30); + if (!this.state.didSwitchView && draggedAway) { + this.onBack(navigator); + this.setState({didSwitchView: true}); + } + }.bind(this); + + // Set to false to prevent iOS from hijacking the responder + var preventDefault = function (evt) { + return true; + }; + + var Content = route.component; + + // Remove the margin of the navigation bar if not using navigation bar + var extraStyling = {}; + if (this.props.hideNavigationBar || this.state.hideHeader) { + extraStyling.marginTop = 0; + } + + return ( + + + + ) + + }, + + render: function () { + + // Status bar color + if (this.props.statusBarColor === "black") { + StatusBarIOS.setStyle(0); + } else { + StatusBarIOS.setStyle(1); + } + + var navigationBar; + + if (!this.props.hideNavigationBar && !this.state.hideHeader) { + navigationBar = + + } + + return ( + + ) } - }, - - /* - * This changes the title in the navigation bar - * It should preferrably be called for "onWillFocus" instad > - * > but a recent update to React Native seems to break the animation - */ - onDidFocus: function(route) { - this.setState({ route: route }); - }, - - onBack: function(navigator) { - if (this.state.route.index > 0) { - navigator.pop(); - } - }, - - onForward: function(route, navigator) { - route.index = this.state.route.index + 1 || 1; - navigator.push(route); - }, - - customAction: function(opts) { - this.props.customAction(opts); - }, - - renderScene: function(route, navigator) { - - var goForward = function(route) { - route.index = this.state.route.index + 1 || 1; - navigator.push(route); - }.bind(this); - - var goBackwards = function() { - this.onBack(navigator); - }.bind(this); - - var goToFirstRoute = function() { - navigator.popToTop() - }; - - var replaceRoute = function(route) { - navigator.route() - }; - - var customAction = function(opts) { - this.customAction(opts); - }.bind(this); - - var didStartDrag = function(evt) { - var x = evt.nativeEvent.pageX; - if (x < 28) { - this.setState({ - dragStartX: x, - didSwitchView: false - }); - return true; - } - }.bind(this); - - // Recognize swipe back gesture for navigation - var didMoveFinger = function(evt) { - var draggedAway = ((evt.nativeEvent.pageX - this.state.dragStartX) > 30); - if (!this.state.didSwitchView && draggedAway) { - this.onBack(navigator); - this.setState({ didSwitchView: true }); - } - }.bind(this); - - // Set to false to prevent iOS from hijacking the responder - var preventDefault = function(evt) { - return true; - }; - - var Content = route.component; - - // Remove the margin of the navigation bar if not using navigation bar - var extraStyling = {}; - if (this.props.hideNavigationBar) { - extraStyling.marginTop = 0; - } - - return ( - - - - ) - - }, - - render: function() { - - // Status bar color - if (this.props.statusBarColor === "black") { - StatusBarIOS.setStyle(0); - } else { - StatusBarIOS.setStyle(1); - } - - var navigationBar; - - if (!this.props.hideNavigationBar) { - navigationBar = - - } - - return ( - - ) - } }); var styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#F5FCFF', - marginTop: 64 - }, + container: { + flex: 1, + backgroundColor: '#F5FCFF', + marginTop: 64 + }, });