mirror of
https://github.com/status-im/react-native.git
synced 2025-02-27 00:20:31 +00:00
[ReactNative] Revert onItemRef removal
This commit is contained in:
parent
5ec60effea
commit
77a0cf27f2
@ -220,6 +220,11 @@ var Navigator = React.createClass({
|
|||||||
*/
|
*/
|
||||||
onDidFocus: PropTypes.func,
|
onDidFocus: PropTypes.func,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will be called with (ref, indexInStack, route) when the scene ref changes
|
||||||
|
*/
|
||||||
|
onItemRef: PropTypes.func,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Optionally provide a navigation bar that persists across scene
|
* Optionally provide a navigation bar that persists across scene
|
||||||
* transitions
|
* transitions
|
||||||
@ -313,6 +318,7 @@ var Navigator = React.createClass({
|
|||||||
onPanResponderMove: this._handlePanResponderMove,
|
onPanResponderMove: this._handlePanResponderMove,
|
||||||
onPanResponderTerminate: this._handlePanResponderTerminate,
|
onPanResponderTerminate: this._handlePanResponderTerminate,
|
||||||
});
|
});
|
||||||
|
this._itemRefs = {};
|
||||||
this._interactionHandle = null;
|
this._interactionHandle = null;
|
||||||
this._emitWillFocus(this.state.routeStack[this.state.presentedIndex]);
|
this._emitWillFocus(this.state.routeStack[this.state.presentedIndex]);
|
||||||
},
|
},
|
||||||
@ -1000,10 +1006,22 @@ var Navigator = React.createClass({
|
|||||||
return this.state.routeStack.slice();
|
return this.state.routeStack.slice();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_handleItemRef: function(itemId, route, ref) {
|
||||||
|
this._itemRefs[itemId] = ref;
|
||||||
|
var itemIndex = this.state.idStack.indexOf(itemId);
|
||||||
|
if (itemIndex === -1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.props.onItemRef && this.props.onItemRef(ref, itemIndex, route);
|
||||||
|
},
|
||||||
|
|
||||||
_cleanScenesPastIndex: function(index) {
|
_cleanScenesPastIndex: function(index) {
|
||||||
var newStackLength = index + 1;
|
var newStackLength = index + 1;
|
||||||
// Remove any unneeded rendered routes.
|
// Remove any unneeded rendered routes.
|
||||||
if (newStackLength < this.state.routeStack.length) {
|
if (newStackLength < this.state.routeStack.length) {
|
||||||
|
this.state.idStack.slice(newStackLength).map((removingId) => {
|
||||||
|
this._itemRefs[removingId] = null;
|
||||||
|
});
|
||||||
this.setState({
|
this.setState({
|
||||||
sceneConfigStack: this.state.sceneConfigStack.slice(0, newStackLength),
|
sceneConfigStack: this.state.sceneConfigStack.slice(0, newStackLength),
|
||||||
idStack: this.state.idStack.slice(0, newStackLength),
|
idStack: this.state.idStack.slice(0, newStackLength),
|
||||||
@ -1013,22 +1031,38 @@ var Navigator = React.createClass({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_renderScene: function(route, i) {
|
_renderScene: function(route, i) {
|
||||||
|
var child = this.props.renderScene(
|
||||||
|
route,
|
||||||
|
this
|
||||||
|
);
|
||||||
var disabledSceneStyle = null;
|
var disabledSceneStyle = null;
|
||||||
if (i !== this.state.presentedIndex) {
|
if (i !== this.state.presentedIndex) {
|
||||||
disabledSceneStyle = styles.disabledScene;
|
disabledSceneStyle = styles.disabledScene;
|
||||||
}
|
}
|
||||||
|
var originalRef = child.ref;
|
||||||
|
if (originalRef != null && typeof originalRef !== 'function') {
|
||||||
|
console.warn(
|
||||||
|
'String refs are not supported for navigator scenes. Use a callback ' +
|
||||||
|
'ref instead. Ignoring ref: ' + originalRef
|
||||||
|
);
|
||||||
|
originalRef = null;
|
||||||
|
}
|
||||||
return (
|
return (
|
||||||
<View
|
<View
|
||||||
key={'scene_' + i}
|
key={this.state.idStack[i]}
|
||||||
ref={'scene_' + i}
|
ref={'scene_' + i}
|
||||||
onStartShouldSetResponderCapture={() => {
|
onStartShouldSetResponderCapture={() => {
|
||||||
return (this.state.transitionFromIndex != null) || (this.state.transitionFromIndex != null);
|
return (this.state.transitionFromIndex != null) || (this.state.transitionFromIndex != null);
|
||||||
}}
|
}}
|
||||||
style={[styles.baseScene, this.props.sceneStyle, disabledSceneStyle]}>
|
style={[styles.baseScene, this.props.sceneStyle, disabledSceneStyle]}>
|
||||||
{this.props.renderScene(
|
{React.cloneElement(child, {
|
||||||
route,
|
ref: component => {
|
||||||
this
|
this._handleItemRef(this.state.idStack[i], route, component);
|
||||||
)}
|
if (originalRef) {
|
||||||
|
originalRef(component);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})}
|
||||||
</View>
|
</View>
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user