mirror of
https://github.com/status-im/react-native.git
synced 2025-02-04 13:44:04 +00:00
[ReactNative] Replace Backstack with BackAndroid
This commit is contained in:
parent
f2d08f599b
commit
31b6ff6d1a
@ -27,7 +27,6 @@
|
||||
'use strict';
|
||||
|
||||
var AnimationsDebugModule = require('NativeModules').AnimationsDebugModule;
|
||||
var Backstack = require('Backstack');
|
||||
var Dimensions = require('Dimensions');
|
||||
var InteractionMixin = require('InteractionMixin');
|
||||
var NavigatorSceneConfigs = require('NavigatorSceneConfigs');
|
||||
@ -59,8 +58,6 @@ function getuid() {
|
||||
return __uid++;
|
||||
}
|
||||
|
||||
var nextComponentUid = 0;
|
||||
|
||||
// styles moved to the top of the file so getDefaultProps can refer to it
|
||||
var styles = StyleSheet.create({
|
||||
container: {
|
||||
@ -242,13 +239,6 @@ var Navigator = React.createClass({
|
||||
* Styles to apply to the container of each scene
|
||||
*/
|
||||
sceneStyle: View.propTypes.style,
|
||||
|
||||
/**
|
||||
* Should the backstack back button "jump" back instead of pop? Set to true
|
||||
* if a jump forward might happen after the android back button is pressed,
|
||||
* so the scenes will remain mounted
|
||||
*/
|
||||
shouldJumpOnBackstackPop: PropTypes.bool,
|
||||
},
|
||||
|
||||
statics: {
|
||||
@ -336,13 +326,6 @@ var Navigator = React.createClass({
|
||||
});
|
||||
this._itemRefs = {};
|
||||
this._interactionHandle = null;
|
||||
this._backstackComponentKey = 'jsnavstack' + nextComponentUid;
|
||||
nextComponentUid++;
|
||||
|
||||
Backstack.eventEmitter && this.addListenerOn(
|
||||
Backstack.eventEmitter,
|
||||
'popNavigation',
|
||||
this._onBackstackPopState);
|
||||
|
||||
this._emitWillFocus(this.state.presentedIndex);
|
||||
},
|
||||
@ -361,33 +344,9 @@ var Navigator = React.createClass({
|
||||
animationConfig && this._configureSpring(animationConfig);
|
||||
this.spring.addListener(this);
|
||||
this.onSpringUpdate();
|
||||
|
||||
// Fill up the Backstack with routes that have been provided in
|
||||
// initialRouteStack
|
||||
this._fillBackstackRange(0, this.state.routeStack.indexOf(this.props.initialRoute));
|
||||
this._emitDidFocus(this.state.presentedIndex);
|
||||
},
|
||||
|
||||
componentWillUnmount: function() {
|
||||
Backstack.removeComponentHistory(this._backstackComponentKey);
|
||||
},
|
||||
|
||||
_onBackstackPopState: function(componentKey, stateKey, state) {
|
||||
if (componentKey !== this._backstackComponentKey) {
|
||||
return;
|
||||
}
|
||||
if (!this._canNavigate()) {
|
||||
// A bit hacky: if we can't actually handle the pop, just push it back on the stack
|
||||
Backstack.pushNavigation(componentKey, stateKey, state);
|
||||
} else {
|
||||
if (this.props.shouldJumpOnBackstackPop) {
|
||||
this._jumpToWithoutBackstack(state.fromRoute);
|
||||
} else {
|
||||
this._popToRouteWithoutBackstack(state.fromRoute);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* @param {RouteStack} nextRouteStack Next route stack to reinitialize. This
|
||||
* doesn't accept stack item `id`s, which implies that all existing items are
|
||||
@ -737,41 +696,6 @@ var Navigator = React.createClass({
|
||||
return !this.state.isAnimating;
|
||||
},
|
||||
|
||||
_jumpNWithoutBackstack: function(n) {
|
||||
var destIndex = this._getDestIndexWithinBounds(n);
|
||||
if (!this._canNavigate()) {
|
||||
return; // It's busy animating or transitioning.
|
||||
}
|
||||
var requestTransitionAndResetUpdatingRange = () => {
|
||||
this._requestTransitionTo(destIndex);
|
||||
this._resetUpdatingRange();
|
||||
};
|
||||
this.setState({
|
||||
updatingRangeStart: destIndex,
|
||||
updatingRangeLength: 1,
|
||||
toIndex: destIndex,
|
||||
}, requestTransitionAndResetUpdatingRange);
|
||||
},
|
||||
|
||||
_fillBackstackRange: function(start, end) {
|
||||
invariant(
|
||||
start <= end,
|
||||
'Can only fill the backstack forward. Provide end index greater than start'
|
||||
);
|
||||
for (var i = 0; i < (end - start); i++) {
|
||||
var fromIndex = start + i;
|
||||
var toIndex = start + i + 1;
|
||||
Backstack.pushNavigation(
|
||||
this._backstackComponentKey,
|
||||
toIndex,
|
||||
{
|
||||
fromRoute: this.state.routeStack[fromIndex],
|
||||
toRoute: this.state.routeStack[toIndex],
|
||||
}
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
_getDestIndexWithinBounds: function(n) {
|
||||
var currentIndex = this.state.presentedIndex;
|
||||
var destIndex = currentIndex + n;
|
||||
@ -788,20 +712,19 @@ var Navigator = React.createClass({
|
||||
},
|
||||
|
||||
_jumpN: function(n) {
|
||||
var currentIndex = this.state.presentedIndex;
|
||||
var destIndex = this._getDestIndexWithinBounds(n);
|
||||
if (!this._canNavigate()) {
|
||||
return; // It's busy animating or transitioning.
|
||||
}
|
||||
if (n > 0) {
|
||||
this._fillBackstackRange(currentIndex, currentIndex + n);
|
||||
} else {
|
||||
var landingBeforeIndex = currentIndex + n + 1;
|
||||
Backstack.resetToBefore(
|
||||
this._backstackComponentKey,
|
||||
landingBeforeIndex
|
||||
);
|
||||
}
|
||||
this._jumpNWithoutBackstack(n);
|
||||
var requestTransitionAndResetUpdatingRange = () => {
|
||||
this._requestTransitionTo(destIndex);
|
||||
this._resetUpdatingRange();
|
||||
};
|
||||
this.setState({
|
||||
updatingRangeStart: destIndex,
|
||||
updatingRangeLength: 1,
|
||||
toIndex: destIndex,
|
||||
}, requestTransitionAndResetUpdatingRange);
|
||||
},
|
||||
|
||||
jumpTo: function(route) {
|
||||
@ -813,15 +736,6 @@ var Navigator = React.createClass({
|
||||
this._jumpN(destIndex - this.state.presentedIndex);
|
||||
},
|
||||
|
||||
_jumpToWithoutBackstack: function(route) {
|
||||
var destIndex = this.state.routeStack.indexOf(route);
|
||||
invariant(
|
||||
destIndex !== -1,
|
||||
'Cannot jump to route that is not in the route stack'
|
||||
);
|
||||
this._jumpNWithoutBackstack(destIndex - this.state.presentedIndex);
|
||||
},
|
||||
|
||||
jumpForward: function() {
|
||||
this._jumpN(1);
|
||||
},
|
||||
@ -852,11 +766,6 @@ var Navigator = React.createClass({
|
||||
toRoute: route,
|
||||
fromRoute: this.state.routeStack[this.state.routeStack.length - 1],
|
||||
};
|
||||
Backstack.pushNavigation(
|
||||
this._backstackComponentKey,
|
||||
this.state.routeStack.length,
|
||||
navigationState);
|
||||
|
||||
this.setState({
|
||||
idStack: nextIDStack,
|
||||
routeStack: nextStack,
|
||||
@ -867,14 +776,7 @@ var Navigator = React.createClass({
|
||||
}, requestTransitionAndResetUpdatingRange);
|
||||
},
|
||||
|
||||
_manuallyPopBackstack: function(n) {
|
||||
Backstack.resetToBefore(this._backstackComponentKey, this.state.routeStack.length - n);
|
||||
},
|
||||
|
||||
/**
|
||||
* Like popN, but doesn't also update the Backstack.
|
||||
*/
|
||||
_popNWithoutBackstack: function(n) {
|
||||
popN: function(n) {
|
||||
if (n === 0 || !this._canNavigate()) {
|
||||
return;
|
||||
}
|
||||
@ -888,14 +790,6 @@ var Navigator = React.createClass({
|
||||
);
|
||||
},
|
||||
|
||||
popN: function(n) {
|
||||
if (n === 0 || !this._canNavigate()) {
|
||||
return;
|
||||
}
|
||||
this._popNWithoutBackstack(n);
|
||||
this._manuallyPopBackstack(n);
|
||||
},
|
||||
|
||||
pop: function() {
|
||||
if (this.props.navigator && this.state.routeStack.length === 1) {
|
||||
return this.props.navigator.pop();
|
||||
@ -970,14 +864,6 @@ var Navigator = React.createClass({
|
||||
return this.state.routeStack.length - indexOfRoute - 1;
|
||||
},
|
||||
|
||||
/**
|
||||
* Like popToRoute, but doesn't update the Backstack, presumably because it's already up to date.
|
||||
*/
|
||||
_popToRouteWithoutBackstack: function(route) {
|
||||
var numToPop = this._getNumToPopForRoute(route);
|
||||
this._popNWithoutBackstack(numToPop);
|
||||
},
|
||||
|
||||
popToRoute: function(route) {
|
||||
var numToPop = this._getNumToPopForRoute(route);
|
||||
this.popN(numToPop);
|
||||
|
21
Libraries/Utilities/BackAndroid.ios.js
Normal file
21
Libraries/Utilities/BackAndroid.ios.js
Normal file
@ -0,0 +1,21 @@
|
||||
/**
|
||||
* iOS stub for BackAndroid.android.js
|
||||
*
|
||||
* @providesModule BackAndroid
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
var warning = require('warning');
|
||||
|
||||
function platformWarn() {
|
||||
warning(false, 'BackAndroid is not supported on this platform.');
|
||||
}
|
||||
|
||||
var BackAndroid = {
|
||||
exitApp: platformWarn,
|
||||
addEventListener: platformWarn,
|
||||
removeEventListener: platformWarn,
|
||||
};
|
||||
|
||||
module.exports = BackAndroid;
|
@ -1,16 +0,0 @@
|
||||
/**
|
||||
* To lower the risk of breaking things on iOS, we are stubbing out the
|
||||
* BackStack for now. See Backstack.android.js
|
||||
*
|
||||
* @providesModule Backstack
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
var Backstack = {
|
||||
pushNavigation: () => {},
|
||||
resetToBefore: () => {},
|
||||
removeComponentHistory: () => {},
|
||||
};
|
||||
|
||||
module.exports = Backstack;
|
Loading…
x
Reference in New Issue
Block a user