Refactor of Fiber integration with React Fiber + Stack

Summary:
This PR aims to update the Inspector tool in React Native to use the new inspection APIs that have been added to the ReactNative renderer:

https://github.com/facebook/react/pull/9691

This PR also cleans up the code in `Inspector.js` so there's no usage of React's internals.
Closes https://github.com/facebook/react-native/pull/14160

Reviewed By: bvaughn

Differential Revision: D5129280

Pulled By: trueadm

fbshipit-source-id: b1b077c04f46b0f52cdea0e19b4154441558f77a
This commit is contained in:
Dominic Gannaway 2017-05-30 09:55:20 -07:00 committed by Facebook Github Bot
parent da50811609
commit 59e41b4485
8 changed files with 1098 additions and 1135 deletions

View File

@ -12,8 +12,8 @@
'use strict'; 'use strict';
const BoxInspector = require('BoxInspector'); const BoxInspector = require('BoxInspector');
const React = require('React');
const PropTypes = require('prop-types'); const PropTypes = require('prop-types');
const React = require('React');
const StyleInspector = require('StyleInspector'); const StyleInspector = require('StyleInspector');
const StyleSheet = require('StyleSheet'); const StyleSheet = require('StyleSheet');
const Text = require('Text'); const Text = require('Text');
@ -76,14 +76,14 @@ class ElementProperties extends React.Component {
<View style={styles.breadcrumb}> <View style={styles.breadcrumb}>
{mapWithSeparator( {mapWithSeparator(
this.props.hierarchy, this.props.hierarchy,
(item, i) => ( (hierarchyItem, i) => (
<TouchableHighlight <TouchableHighlight
key={'item-' + i} key={'item-' + i}
style={[styles.breadItem, i === selection && styles.selected]} style={[styles.breadItem, i === selection && styles.selected]}
// $FlowFixMe found when converting React.createClass to ES6 // $FlowFixMe found when converting React.createClass to ES6
onPress={() => this.props.setSelection(i)}> onPress={() => this.props.setSelection(i)}>
<Text style={styles.breadItemText}> <Text style={styles.breadItemText}>
{getInstanceName(item)} {hierarchyItem.name}
</Text> </Text>
</TouchableHighlight> </TouchableHighlight>
), ),
@ -109,16 +109,6 @@ class ElementProperties extends React.Component {
} }
} }
function getInstanceName(instance) {
if (instance.getName) {
return instance.getName();
}
if (instance.constructor && instance.constructor.displayName) {
return instance.constructor.displayName;
}
return 'Unknown';
}
const styles = StyleSheet.create({ const styles = StyleSheet.create({
breadSep: { breadSep: {
fontSize: 8, fontSize: 8,

View File

@ -17,17 +17,31 @@
const Dimensions = require('Dimensions'); const Dimensions = require('Dimensions');
const InspectorOverlay = require('InspectorOverlay'); const InspectorOverlay = require('InspectorOverlay');
const InspectorPanel = require('InspectorPanel'); const InspectorPanel = require('InspectorPanel');
const InspectorUtils = require('InspectorUtils');
const Platform = require('Platform'); const Platform = require('Platform');
const React = require('React'); const React = require('React');
const ReactNative = require('ReactNative');
const StyleSheet = require('StyleSheet'); const StyleSheet = require('StyleSheet');
const Touchable = require('Touchable'); const Touchable = require('Touchable');
const UIManager = require('UIManager'); const UIManager = require('UIManager');
const View = require('View'); const View = require('View');
if (window.__REACT_DEVTOOLS_GLOBAL_HOOK__) { const emptyObject = require('fbjs/lib/emptyObject');
// required for devtools to be able to edit react native styles const invariant = require('invariant');
window.__REACT_DEVTOOLS_GLOBAL_HOOK__.resolveRNStyle = require('flattenStyle');
export type ReactRenderer = {
getInspectorDataForViewTag: (viewTag: number) => Object,
};
const hook = window.__REACT_DEVTOOLS_GLOBAL_HOOK__;
const renderer: ReactRenderer = findRenderer();
// required for devtools to be able to edit react native styles
hook.resolveRNStyle = require('flattenStyle');
function findRenderer(): ReactRenderer {
const renderers = hook._renderers;
const keys = Object.keys(renderers);
invariant(keys.length === 1, 'Expected to find exactly one React Native renderer on DevTools hook.');
return renderers[keys[0]];
} }
class Inspector extends React.Component { class Inspector extends React.Component {
@ -67,13 +81,10 @@ class Inspector extends React.Component {
} }
componentDidMount() { componentDidMount() {
if (window.__REACT_DEVTOOLS_GLOBAL_HOOK__) { hook.on('react-devtools', this.attachToDevtools);
(this : any).attachToDevtools = this.attachToDevtools.bind(this); // if devtools is already started
window.__REACT_DEVTOOLS_GLOBAL_HOOK__.on('react-devtools', this.attachToDevtools); if (hook.reactDevtoolsAgent) {
// if devtools is already started this.attachToDevtools(hook.reactDevtoolsAgent);
if (window.__REACT_DEVTOOLS_GLOBAL_HOOK__.reactDevtoolsAgent) {
this.attachToDevtools(window.__REACT_DEVTOOLS_GLOBAL_HOOK__.reactDevtoolsAgent);
}
} }
} }
@ -81,9 +92,7 @@ class Inspector extends React.Component {
if (this._subs) { if (this._subs) {
this._subs.map(fn => fn()); this._subs.map(fn => fn());
} }
if (window.__REACT_DEVTOOLS_GLOBAL_HOOK__) { hook.off('react-devtools', this.attachToDevtools);
window.__REACT_DEVTOOLS_GLOBAL_HOOK__.off('react-devtools', this.attachToDevtools);
}
} }
componentWillReceiveProps(newProps: Object) { componentWillReceiveProps(newProps: Object) {
@ -94,12 +103,18 @@ class Inspector extends React.Component {
let _hideWait = null; let _hideWait = null;
const hlSub = agent.sub('highlight', ({node, name, props}) => { const hlSub = agent.sub('highlight', ({node, name, props}) => {
clearTimeout(_hideWait); clearTimeout(_hideWait);
if (typeof node !== 'number') {
// Fiber
node = ReactNative.findNodeHandle(node);
}
UIManager.measure(node, (x, y, width, height, left, top) => { UIManager.measure(node, (x, y, width, height, left, top) => {
this.setState({ this.setState({
hierarchy: [], hierarchy: [],
inspected: { inspected: {
frame: {left, top, width, height}, frame: {left, top, width, height},
style: props ? props.style : {}, style: props ? props.style : emptyObject,
}, },
}); });
}); });
@ -126,17 +141,21 @@ class Inspector extends React.Component {
}); });
}; };
setSelection(i: number) { setSelection(i: number) {
const instance = this.state.hierarchy[i]; const hierarchyItem = this.state.hierarchy[i];
// if we inspect a stateless component we can't use the getPublicInstance method // we pass in ReactNative.findNodeHandle as the method is injected
// therefore we use the internal _instance property directly. const {
const publicInstance = instance['_instance'] || {}; measure,
const source = instance['_currentElement'] && instance['_currentElement']['_source']; props,
UIManager.measure(instance.getHostNode(), (x, y, width, height, left, top) => { source,
} = hierarchyItem.getInspectorData(ReactNative.findNodeHandle);
measure((x, y, width, height, left, top) => {
this.setState({ this.setState({
inspected: { inspected: {
frame: {left, top, width, height}, frame: {left, top, width, height},
style: publicInstance.props ? publicInstance.props.style : {}, style: props.style,
source, source,
}, },
selection: i, selection: i,
@ -144,28 +163,28 @@ class Inspector extends React.Component {
}); });
} }
onTouchInstance(touched: Object, frame: Object, pointerY: number) { onTouchViewTag(touchedViewTag: number, frame: Object, pointerY: number) {
// Most likely the touched instance is a native wrapper (like RCTView) // Most likely the touched instance is a native wrapper (like RCTView)
// which is not very interesting. Most likely user wants a composite // which is not very interesting. Most likely user wants a composite
// instance that contains it (like View) // instance that contains it (like View)
const hierarchy = InspectorUtils.getOwnerHierarchy(touched); const {
const instance = InspectorUtils.lastNotNativeInstance(hierarchy); hierarchy,
instance,
props,
selection,
source,
} = renderer.getInspectorDataForViewTag(touchedViewTag);
if (this.state.devtoolsAgent) { if (this.state.devtoolsAgent) {
this.state.devtoolsAgent.selectFromReactInstance(instance, true); this.state.devtoolsAgent.selectFromReactInstance(instance, true);
} }
// if we inspect a stateless component we can't use the getPublicInstance method
// therefore we use the internal _instance property directly.
const publicInstance = instance['_instance'] || {};
const props = publicInstance.props || {};
const source = instance['_currentElement'] && instance['_currentElement']['_source'];
this.setState({ this.setState({
panelPos: pointerY > Dimensions.get('window').height / 2 ? 'top' : 'bottom', panelPos: pointerY > Dimensions.get('window').height / 2 ? 'top' : 'bottom',
selection: hierarchy.indexOf(instance), selection,
hierarchy, hierarchy,
inspected: { inspected: {
style: props.style || {}, style: props.style,
frame, frame,
source, source,
}, },
@ -214,7 +233,7 @@ class Inspector extends React.Component {
<InspectorOverlay <InspectorOverlay
inspected={this.state.inspected} inspected={this.state.inspected}
inspectedViewTag={this.state.inspectedViewTag} inspectedViewTag={this.state.inspectedViewTag}
onTouchInstance={this.onTouchInstance.bind(this)} onTouchViewTag={this.onTouchViewTag.bind(this)}
/>} />}
<View style={[styles.panelContainer, panelContainerStyle]}> <View style={[styles.panelContainer, panelContainerStyle]}>
<InspectorPanel <InspectorPanel

View File

@ -12,13 +12,12 @@
'use strict'; 'use strict';
var Dimensions = require('Dimensions'); var Dimensions = require('Dimensions');
var InspectorUtils = require('InspectorUtils'); var ElementBox = require('ElementBox');
var React = require('React');
var PropTypes = require('prop-types'); var PropTypes = require('prop-types');
var React = require('React');
var StyleSheet = require('StyleSheet'); var StyleSheet = require('StyleSheet');
var UIManager = require('UIManager'); var UIManager = require('UIManager');
var View = require('View'); var View = require('View');
var ElementBox = require('ElementBox');
type EventLike = { type EventLike = {
nativeEvent: Object, nativeEvent: Object,
@ -31,7 +30,7 @@ class InspectorOverlay extends React.Component {
style?: any, style?: any,
}, },
inspectedViewTag?: number, inspectedViewTag?: number,
onTouchInstance: Function, onTouchViewTag: (tag: number, frame: Object, pointerY: number) => void,
}; };
static propTypes = { static propTypes = {
@ -40,7 +39,7 @@ class InspectorOverlay extends React.Component {
style: PropTypes.any, style: PropTypes.any,
}), }),
inspectedViewTag: PropTypes.number, inspectedViewTag: PropTypes.number,
onTouchInstance: PropTypes.func.isRequired, onTouchViewTag: PropTypes.func.isRequired,
}; };
findViewForTouchEvent = (e: EventLike) => { findViewForTouchEvent = (e: EventLike) => {
@ -49,11 +48,7 @@ class InspectorOverlay extends React.Component {
this.props.inspectedViewTag, this.props.inspectedViewTag,
[locationX, locationY], [locationX, locationY],
(nativeViewTag, left, top, width, height) => { (nativeViewTag, left, top, width, height) => {
var instance = InspectorUtils.findInstanceByNativeTag(nativeViewTag); this.props.onTouchViewTag(nativeViewTag, {left, top, width, height}, locationY);
if (!instance) {
return;
}
this.props.onTouchInstance(instance, {left, top, width, height}, locationY);
} }
); );
}; };

View File

@ -1,47 +0,0 @@
/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @providesModule InspectorUtils
*/
'use strict';
var ReactNativeComponentTree = require('ReactNativeComponentTree');
function traverseOwnerTreeUp(hierarchy, instance) {
if (instance) {
hierarchy.unshift(instance);
traverseOwnerTreeUp(hierarchy, instance._currentElement._owner);
}
}
function findInstanceByNativeTag(nativeTag) {
var instance = ReactNativeComponentTree.getInstanceFromNode(nativeTag);
if (!instance || typeof instance.tag === 'number') {
// TODO(sema): We've disabled the inspector when using Fiber. Fix #15953531
return null;
}
return instance;
}
function getOwnerHierarchy(instance) {
var hierarchy = [];
traverseOwnerTreeUp(hierarchy, instance);
return hierarchy;
}
function lastNotNativeInstance(hierarchy) {
for (let i = hierarchy.length - 1; i > 1; i--) {
const instance = hierarchy[i];
if (!instance.viewConfig) {
return instance;
}
}
return hierarchy[0];
}
module.exports = {findInstanceByNativeTag, getOwnerHierarchy, lastNotNativeInstance};

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -84,9 +84,9 @@ var ReactNativeComponentTree = {
function recomputePluginOrdering() { function recomputePluginOrdering() {
if (eventPluginOrder) for (var pluginName in namesToPlugins) { if (eventPluginOrder) for (var pluginName in namesToPlugins) {
var pluginModule = namesToPlugins[pluginName], pluginIndex = eventPluginOrder.indexOf(pluginName); var pluginModule = namesToPlugins[pluginName], pluginIndex = eventPluginOrder.indexOf(pluginName);
if (invariant(pluginIndex > -1, "EventPluginRegistry: Cannot inject event plugins that do not exist in " + "the plugin ordering, `%s`.", pluginName), if (invariant(pluginIndex > -1, "EventPluginRegistry: Cannot inject event plugins that do not exist in " + "the plugin ordering, `%s`.", pluginName),
!EventPluginRegistry.plugins[pluginIndex]) { !EventPluginRegistry.plugins[pluginIndex]) {
invariant(pluginModule.extractEvents, "EventPluginRegistry: Event plugins must implement an `extractEvents` " + "method, but `%s` does not.", pluginName), invariant(pluginModule.extractEvents, "EventPluginRegistry: Event plugins must implement an `extractEvents` " + "method, but `%s` does not.", pluginName),
EventPluginRegistry.plugins[pluginIndex] = pluginModule; EventPluginRegistry.plugins[pluginIndex] = pluginModule;
var publishedEvents = pluginModule.eventTypes; var publishedEvents = pluginModule.eventTypes;
for (var eventName in publishedEvents) invariant(publishEventForPlugin(publishedEvents[eventName], pluginModule, eventName), "EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.", eventName, pluginName); for (var eventName in publishedEvents) invariant(publishEventForPlugin(publishedEvents[eventName], pluginModule, eventName), "EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.", eventName, pluginName);
@ -95,7 +95,7 @@ function recomputePluginOrdering() {
} }
function publishEventForPlugin(dispatchConfig, pluginModule, eventName) { function publishEventForPlugin(dispatchConfig, pluginModule, eventName) {
invariant(!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName), "EventPluginHub: More than one plugin attempted to publish the same " + "event name, `%s`.", eventName), invariant(!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName), "EventPluginHub: More than one plugin attempted to publish the same " + "event name, `%s`.", eventName),
EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig; EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;
var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames; var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;
if (phasedRegistrationNames) { if (phasedRegistrationNames) {
@ -105,12 +105,12 @@ function publishEventForPlugin(dispatchConfig, pluginModule, eventName) {
} }
return !0; return !0;
} }
return !!dispatchConfig.registrationName && (publishRegistrationName(dispatchConfig.registrationName, pluginModule, eventName), return !!dispatchConfig.registrationName && (publishRegistrationName(dispatchConfig.registrationName, pluginModule, eventName),
!0); !0);
} }
function publishRegistrationName(registrationName, pluginModule, eventName) { function publishRegistrationName(registrationName, pluginModule, eventName) {
invariant(!EventPluginRegistry.registrationNameModules[registrationName], "EventPluginHub: More than one plugin attempted to publish the same " + "registration name, `%s`.", registrationName), invariant(!EventPluginRegistry.registrationNameModules[registrationName], "EventPluginHub: More than one plugin attempted to publish the same " + "registration name, `%s`.", registrationName),
EventPluginRegistry.registrationNameModules[registrationName] = pluginModule, EventPluginRegistry.registrationNameDependencies[registrationName] = pluginModule.eventTypes[eventName].dependencies; EventPluginRegistry.registrationNameModules[registrationName] = pluginModule, EventPluginRegistry.registrationNameDependencies[registrationName] = pluginModule.eventTypes[eventName].dependencies;
} }
@ -121,14 +121,14 @@ var EventPluginRegistry = {
registrationNameDependencies: {}, registrationNameDependencies: {},
possibleRegistrationNames: null, possibleRegistrationNames: null,
injectEventPluginOrder: function(injectedEventPluginOrder) { injectEventPluginOrder: function(injectedEventPluginOrder) {
invariant(!eventPluginOrder, "EventPluginRegistry: Cannot inject event plugin ordering more than " + "once. You are likely trying to load more than one copy of React."), invariant(!eventPluginOrder, "EventPluginRegistry: Cannot inject event plugin ordering more than " + "once. You are likely trying to load more than one copy of React."),
eventPluginOrder = Array.prototype.slice.call(injectedEventPluginOrder), recomputePluginOrdering(); eventPluginOrder = Array.prototype.slice.call(injectedEventPluginOrder), recomputePluginOrdering();
}, },
injectEventPluginsByName: function(injectedNamesToPlugins) { injectEventPluginsByName: function(injectedNamesToPlugins) {
var isOrderingDirty = !1; var isOrderingDirty = !1;
for (var pluginName in injectedNamesToPlugins) if (injectedNamesToPlugins.hasOwnProperty(pluginName)) { for (var pluginName in injectedNamesToPlugins) if (injectedNamesToPlugins.hasOwnProperty(pluginName)) {
var pluginModule = injectedNamesToPlugins[pluginName]; var pluginModule = injectedNamesToPlugins[pluginName];
namesToPlugins.hasOwnProperty(pluginName) && namesToPlugins[pluginName] === pluginModule || (invariant(!namesToPlugins[pluginName], "EventPluginRegistry: Cannot inject two different event plugins " + "using the same name, `%s`.", pluginName), namesToPlugins.hasOwnProperty(pluginName) && namesToPlugins[pluginName] === pluginModule || (invariant(!namesToPlugins[pluginName], "EventPluginRegistry: Cannot inject two different event plugins " + "using the same name, `%s`.", pluginName),
namesToPlugins[pluginName] = pluginModule, isOrderingDirty = !0); namesToPlugins[pluginName] = pluginModule, isOrderingDirty = !0);
} }
isOrderingDirty && recomputePluginOrdering(); isOrderingDirty && recomputePluginOrdering();
@ -149,7 +149,7 @@ var EventPluginRegistry = {
}, ReactErrorUtils = { }, ReactErrorUtils = {
injection: { injection: {
injectErrorUtils: function(injectedErrorUtils) { injectErrorUtils: function(injectedErrorUtils) {
invariant("function" == typeof injectedErrorUtils.invokeGuardedCallback, "Injected invokeGuardedCallback() must be a function."), invariant("function" == typeof injectedErrorUtils.invokeGuardedCallback, "Injected invokeGuardedCallback() must be a function."),
invokeGuardedCallback = injectedErrorUtils.invokeGuardedCallback; invokeGuardedCallback = injectedErrorUtils.invokeGuardedCallback;
} }
}, },
@ -183,7 +183,7 @@ function isStartish(topLevelType) {
function executeDispatch(event, simulated, listener, inst) { function executeDispatch(event, simulated, listener, inst) {
var type = event.type || "unknown-event"; var type = event.type || "unknown-event";
event.currentTarget = EventPluginUtils.getNodeFromInstance(inst), ReactErrorUtils_1.invokeGuardedCallbackAndCatchFirstError(type, listener, void 0, event), event.currentTarget = EventPluginUtils.getNodeFromInstance(inst), ReactErrorUtils_1.invokeGuardedCallbackAndCatchFirstError(type, listener, void 0, event),
event.currentTarget = null; event.currentTarget = null;
} }
@ -208,10 +208,10 @@ function executeDispatchesInOrderStopAtTrue(event) {
function executeDirectDispatch(event) { function executeDirectDispatch(event) {
var dispatchListener = event._dispatchListeners, dispatchInstance = event._dispatchInstances; var dispatchListener = event._dispatchListeners, dispatchInstance = event._dispatchInstances;
invariant(!Array.isArray(dispatchListener), "executeDirectDispatch(...): Invalid `event`."), invariant(!Array.isArray(dispatchListener), "executeDirectDispatch(...): Invalid `event`."),
event.currentTarget = dispatchListener ? EventPluginUtils.getNodeFromInstance(dispatchInstance) : null; event.currentTarget = dispatchListener ? EventPluginUtils.getNodeFromInstance(dispatchInstance) : null;
var res = dispatchListener ? dispatchListener(event) : null; var res = dispatchListener ? dispatchListener(event) : null;
return event.currentTarget = null, event._dispatchListeners = null, event._dispatchInstances = null, return event.currentTarget = null, event._dispatchListeners = null, event._dispatchInstances = null,
res; res;
} }
@ -240,8 +240,8 @@ var EventPluginUtils = {
}, EventPluginUtils_1 = EventPluginUtils; }, EventPluginUtils_1 = EventPluginUtils;
function accumulateInto(current, next) { function accumulateInto(current, next) {
return invariant(null != next, "accumulateInto(...): Accumulated items must not be null or undefined."), return invariant(null != next, "accumulateInto(...): Accumulated items must not be null or undefined."),
null == current ? next : Array.isArray(current) ? Array.isArray(next) ? (current.push.apply(current, next), null == current ? next : Array.isArray(current) ? Array.isArray(next) ? (current.push.apply(current, next),
current) : (current.push(next), current) : Array.isArray(next) ? [ current ].concat(next) : [ current, next ]; current) : (current.push(next), current) : Array.isArray(next) ? [ current ].concat(next) : [ current, next ];
} }
@ -302,7 +302,7 @@ var EventPluginHub = {
var _props = currentElement.props; var _props = currentElement.props;
if (listener = _props[registrationName], shouldPreventMouseEvent(registrationName, currentElement.type, _props)) return null; if (listener = _props[registrationName], shouldPreventMouseEvent(registrationName, currentElement.type, _props)) return null;
} }
return invariant(!listener || "function" == typeof listener, "Expected %s listener to be a function, instead got type %s", registrationName, typeof listener), return invariant(!listener || "function" == typeof listener, "Expected %s listener to be a function, instead got type %s", registrationName, typeof listener),
listener; listener;
}, },
extractEvents: function(topLevelType, targetInst, nativeEvent, nativeEventTarget) { extractEvents: function(topLevelType, targetInst, nativeEvent, nativeEventTarget) {
@ -320,8 +320,8 @@ var EventPluginHub = {
}, },
processEventQueue: function(simulated) { processEventQueue: function(simulated) {
var processingEventQueue = eventQueue; var processingEventQueue = eventQueue;
eventQueue = null, simulated ? forEachAccumulated_1(processingEventQueue, executeDispatchesAndReleaseSimulated) : forEachAccumulated_1(processingEventQueue, executeDispatchesAndReleaseTopLevel), eventQueue = null, simulated ? forEachAccumulated_1(processingEventQueue, executeDispatchesAndReleaseSimulated) : forEachAccumulated_1(processingEventQueue, executeDispatchesAndReleaseTopLevel),
invariant(!eventQueue, "processEventQueue(): Additional events were enqueued while processing " + "an event queue. Support for this has not yet been implemented."), invariant(!eventQueue, "processEventQueue(): Additional events were enqueued while processing " + "an event queue. Support for this has not yet been implemented."),
ReactErrorUtils_1.rethrowCaughtError(); ReactErrorUtils_1.rethrowCaughtError();
} }
}, EventPluginHub_1 = EventPluginHub, ReactTypeOfWork = { }, EventPluginHub_1 = EventPluginHub, ReactTypeOfWork = {
@ -381,7 +381,7 @@ function traverseTwoPhase(inst, fn, arg) {
} }
function traverseEnterLeave(from, to, fn, argFrom, argTo) { function traverseEnterLeave(from, to, fn, argFrom, argTo) {
for (var common = from && to ? getLowestCommonAncestor(from, to) : null, pathFrom = []; from && from !== common; ) pathFrom.push(from), for (var common = from && to ? getLowestCommonAncestor(from, to) : null, pathFrom = []; from && from !== common; ) pathFrom.push(from),
from = getParent(from); from = getParent(from);
for (var pathTo = []; to && to !== common; ) pathTo.push(to), to = getParent(to); for (var pathTo = []; to && to !== common; ) pathTo.push(to), to = getParent(to);
var i; var i;
@ -404,7 +404,7 @@ function listenerAtPhase(inst, event, propagationPhase) {
function accumulateDirectionalDispatches(inst, phase, event) { function accumulateDirectionalDispatches(inst, phase, event) {
var listener = listenerAtPhase(inst, event, phase); var listener = listenerAtPhase(inst, event, phase);
listener && (event._dispatchListeners = accumulateInto_1(event._dispatchListeners, listener), listener && (event._dispatchListeners = accumulateInto_1(event._dispatchListeners, listener),
event._dispatchInstances = accumulateInto_1(event._dispatchInstances, inst)); event._dispatchInstances = accumulateInto_1(event._dispatchInstances, inst));
} }
@ -422,7 +422,7 @@ function accumulateTwoPhaseDispatchesSingleSkipTarget(event) {
function accumulateDispatches(inst, ignoredDirection, event) { function accumulateDispatches(inst, ignoredDirection, event) {
if (inst && event && event.dispatchConfig.registrationName) { if (inst && event && event.dispatchConfig.registrationName) {
var registrationName = event.dispatchConfig.registrationName, listener = getListener(inst, registrationName); var registrationName = event.dispatchConfig.registrationName, listener = getListener(inst, registrationName);
listener && (event._dispatchListeners = accumulateInto_1(event._dispatchListeners, listener), listener && (event._dispatchListeners = accumulateInto_1(event._dispatchListeners, listener),
event._dispatchInstances = accumulateInto_1(event._dispatchInstances, inst)); event._dispatchInstances = accumulateInto_1(event._dispatchInstances, inst));
} }
} }
@ -482,12 +482,12 @@ var EventPropagators = {
return new Klass(a1, a2, a3, a4); return new Klass(a1, a2, a3, a4);
}, standardReleaser = function(instance) { }, standardReleaser = function(instance) {
var Klass = this; var Klass = this;
invariant(instance instanceof Klass, "Trying to release an instance into a pool of a different type."), invariant(instance instanceof Klass, "Trying to release an instance into a pool of a different type."),
instance.destructor(), Klass.instancePool.length < Klass.poolSize && Klass.instancePool.push(instance); instance.destructor(), Klass.instancePool.length < Klass.poolSize && Klass.instancePool.push(instance);
}, DEFAULT_POOL_SIZE = 10, DEFAULT_POOLER = oneArgumentPooler, addPoolingTo = function(CopyConstructor, pooler) { }, DEFAULT_POOL_SIZE = 10, DEFAULT_POOLER = oneArgumentPooler, addPoolingTo = function(CopyConstructor, pooler) {
var NewKlass = CopyConstructor; var NewKlass = CopyConstructor;
return NewKlass.instancePool = [], NewKlass.getPooled = pooler || DEFAULT_POOLER, return NewKlass.instancePool = [], NewKlass.getPooled = pooler || DEFAULT_POOLER,
NewKlass.poolSize || (NewKlass.poolSize = DEFAULT_POOL_SIZE), NewKlass.release = standardReleaser, NewKlass.poolSize || (NewKlass.poolSize = DEFAULT_POOL_SIZE), NewKlass.release = standardReleaser,
NewKlass; NewKlass;
}, PooledClass = { }, PooledClass = {
addPoolingTo: addPoolingTo, addPoolingTo: addPoolingTo,
@ -517,7 +517,7 @@ function SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarg
normalize ? this[propName] = normalize(nativeEvent) : "target" === propName ? this.target = nativeEventTarget : this[propName] = nativeEvent[propName]; normalize ? this[propName] = normalize(nativeEvent) : "target" === propName ? this.target = nativeEventTarget : this[propName] = nativeEvent[propName];
} }
var defaultPrevented = null != nativeEvent.defaultPrevented ? nativeEvent.defaultPrevented : !1 === nativeEvent.returnValue; var defaultPrevented = null != nativeEvent.defaultPrevented ? nativeEvent.defaultPrevented : !1 === nativeEvent.returnValue;
return this.isDefaultPrevented = defaultPrevented ? emptyFunction.thatReturnsTrue : emptyFunction.thatReturnsFalse, return this.isDefaultPrevented = defaultPrevented ? emptyFunction.thatReturnsTrue : emptyFunction.thatReturnsFalse,
this.isPropagationStopped = emptyFunction.thatReturnsFalse, this; this.isPropagationStopped = emptyFunction.thatReturnsFalse, this;
} }
@ -525,12 +525,12 @@ Object.assign(SyntheticEvent.prototype, {
preventDefault: function() { preventDefault: function() {
this.defaultPrevented = !0; this.defaultPrevented = !0;
var event = this.nativeEvent; var event = this.nativeEvent;
event && (event.preventDefault ? event.preventDefault() : "unknown" != typeof event.returnValue && (event.returnValue = !1), event && (event.preventDefault ? event.preventDefault() : "unknown" != typeof event.returnValue && (event.returnValue = !1),
this.isDefaultPrevented = emptyFunction.thatReturnsTrue); this.isDefaultPrevented = emptyFunction.thatReturnsTrue);
}, },
stopPropagation: function() { stopPropagation: function() {
var event = this.nativeEvent; var event = this.nativeEvent;
event && (event.stopPropagation ? event.stopPropagation() : "unknown" != typeof event.cancelBubble && (event.cancelBubble = !0), event && (event.stopPropagation ? event.stopPropagation() : "unknown" != typeof event.cancelBubble && (event.cancelBubble = !0),
this.isPropagationStopped = emptyFunction.thatReturnsTrue); this.isPropagationStopped = emptyFunction.thatReturnsTrue);
}, },
persist: function() { persist: function() {
@ -546,8 +546,8 @@ Object.assign(SyntheticEvent.prototype, {
var Super = this, E = function() {}; var Super = this, E = function() {};
E.prototype = Super.prototype; E.prototype = Super.prototype;
var prototype = new E(); var prototype = new E();
Object.assign(prototype, Class.prototype), Class.prototype = prototype, Class.prototype.constructor = Class, Object.assign(prototype, Class.prototype), Class.prototype = prototype, Class.prototype.constructor = Class,
Class.Interface = Object.assign({}, Super.Interface, Interface), Class.augmentClass = Super.augmentClass, Class.Interface = Object.assign({}, Super.Interface, Interface), Class.augmentClass = Super.augmentClass,
PooledClass_1.addPoolingTo(Class, PooledClass_1.fourArgumentPooler); PooledClass_1.addPoolingTo(Class, PooledClass_1.fourArgumentPooler);
}, PooledClass_1.addPoolingTo(SyntheticEvent, PooledClass_1.fourArgumentPooler); }, PooledClass_1.addPoolingTo(SyntheticEvent, PooledClass_1.fourArgumentPooler);
@ -561,7 +561,7 @@ var SyntheticEvent_1 = SyntheticEvent, _extends = Object.assign || function(targ
for (var bubblingTypeName in customBubblingEventTypes) allTypesByEventName[bubblingTypeName] = customBubblingEventTypes[bubblingTypeName]; for (var bubblingTypeName in customBubblingEventTypes) allTypesByEventName[bubblingTypeName] = customBubblingEventTypes[bubblingTypeName];
for (var directTypeName in customDirectEventTypes) warning(!customBubblingEventTypes[directTypeName], "Event cannot be both direct and bubbling: %s", directTypeName), for (var directTypeName in customDirectEventTypes) warning(!customBubblingEventTypes[directTypeName], "Event cannot be both direct and bubbling: %s", directTypeName),
allTypesByEventName[directTypeName] = customDirectEventTypes[directTypeName]; allTypesByEventName[directTypeName] = customDirectEventTypes[directTypeName];
var ReactNativeBridgeEventPlugin = { var ReactNativeBridgeEventPlugin = {
@ -612,7 +612,7 @@ function restoreStateOfTarget(target) {
var props = EventPluginUtils_1.getFiberCurrentPropsFromNode(internalInstance.stateNode); var props = EventPluginUtils_1.getFiberCurrentPropsFromNode(internalInstance.stateNode);
return void fiberHostComponent.restoreControlledState(internalInstance.stateNode, internalInstance.type, props); return void fiberHostComponent.restoreControlledState(internalInstance.stateNode, internalInstance.type, props);
} }
invariant("function" == typeof internalInstance.restoreControlledState, "The internal instance must be a React host component."), invariant("function" == typeof internalInstance.restoreControlledState, "The internal instance must be a React host component."),
internalInstance.restoreControlledState(); internalInstance.restoreControlledState();
} }
} }
@ -701,7 +701,7 @@ var ReactGenericBatchingInjection = {
var touch = changedTouches[jj]; var touch = changedTouches[jj];
touch.changedTouches = changedTouches, touch.touches = touches; touch.changedTouches = changedTouches, touch.touches = touches;
var nativeEvent = touch, rootNodeID = null, target = nativeEvent.target; var nativeEvent = touch, rootNodeID = null, target = nativeEvent.target;
null !== target && void 0 !== target && (target < ReactNativeTagHandles_1.tagsStartAt || (rootNodeID = target)), null !== target && void 0 !== target && (target < ReactNativeTagHandles_1.tagsStartAt || (rootNodeID = target)),
ReactNativeEventEmitter._receiveRootNodeIDEvent(rootNodeID, eventTopLevelType, nativeEvent); ReactNativeEventEmitter._receiveRootNodeIDEvent(rootNodeID, eventTopLevelType, nativeEvent);
} }
} }
@ -751,38 +751,38 @@ function createTouchRecord(touch) {
} }
function resetTouchRecord(touchRecord, touch) { function resetTouchRecord(touchRecord, touch) {
touchRecord.touchActive = !0, touchRecord.startPageX = touch.pageX, touchRecord.startPageY = touch.pageY, touchRecord.touchActive = !0, touchRecord.startPageX = touch.pageX, touchRecord.startPageY = touch.pageY,
touchRecord.startTimeStamp = timestampForTouch(touch), touchRecord.currentPageX = touch.pageX, touchRecord.startTimeStamp = timestampForTouch(touch), touchRecord.currentPageX = touch.pageX,
touchRecord.currentPageY = touch.pageY, touchRecord.currentTimeStamp = timestampForTouch(touch), touchRecord.currentPageY = touch.pageY, touchRecord.currentTimeStamp = timestampForTouch(touch),
touchRecord.previousPageX = touch.pageX, touchRecord.previousPageY = touch.pageY, touchRecord.previousPageX = touch.pageX, touchRecord.previousPageY = touch.pageY,
touchRecord.previousTimeStamp = timestampForTouch(touch); touchRecord.previousTimeStamp = timestampForTouch(touch);
} }
function getTouchIdentifier(_ref) { function getTouchIdentifier(_ref) {
var identifier = _ref.identifier; var identifier = _ref.identifier;
return invariant(null != identifier, "Touch object is missing identifier."), warning(identifier <= MAX_TOUCH_BANK, "Touch identifier %s is greater than maximum supported %s which causes " + "performance issues backfilling array locations for all of the indices.", identifier, MAX_TOUCH_BANK), return invariant(null != identifier, "Touch object is missing identifier."), warning(identifier <= MAX_TOUCH_BANK, "Touch identifier %s is greater than maximum supported %s which causes " + "performance issues backfilling array locations for all of the indices.", identifier, MAX_TOUCH_BANK),
identifier; identifier;
} }
function recordTouchStart(touch) { function recordTouchStart(touch) {
var identifier = getTouchIdentifier(touch), touchRecord = touchBank[identifier]; var identifier = getTouchIdentifier(touch), touchRecord = touchBank[identifier];
touchRecord ? resetTouchRecord(touchRecord, touch) : touchBank[identifier] = createTouchRecord(touch), touchRecord ? resetTouchRecord(touchRecord, touch) : touchBank[identifier] = createTouchRecord(touch),
touchHistory.mostRecentTimeStamp = timestampForTouch(touch); touchHistory.mostRecentTimeStamp = timestampForTouch(touch);
} }
function recordTouchMove(touch) { function recordTouchMove(touch) {
var touchRecord = touchBank[getTouchIdentifier(touch)]; var touchRecord = touchBank[getTouchIdentifier(touch)];
touchRecord ? (touchRecord.touchActive = !0, touchRecord.previousPageX = touchRecord.currentPageX, touchRecord ? (touchRecord.touchActive = !0, touchRecord.previousPageX = touchRecord.currentPageX,
touchRecord.previousPageY = touchRecord.currentPageY, touchRecord.previousTimeStamp = touchRecord.currentTimeStamp, touchRecord.previousPageY = touchRecord.currentPageY, touchRecord.previousTimeStamp = touchRecord.currentTimeStamp,
touchRecord.currentPageX = touch.pageX, touchRecord.currentPageY = touch.pageY, touchRecord.currentPageX = touch.pageX, touchRecord.currentPageY = touch.pageY,
touchRecord.currentTimeStamp = timestampForTouch(touch), touchHistory.mostRecentTimeStamp = timestampForTouch(touch)) : console.error("Cannot record touch move without a touch start.\n" + "Touch Move: %s\n", "Touch Bank: %s", printTouch(touch), printTouchBank()); touchRecord.currentTimeStamp = timestampForTouch(touch), touchHistory.mostRecentTimeStamp = timestampForTouch(touch)) : console.error("Cannot record touch move without a touch start.\n" + "Touch Move: %s\n", "Touch Bank: %s", printTouch(touch), printTouchBank());
} }
function recordTouchEnd(touch) { function recordTouchEnd(touch) {
var touchRecord = touchBank[getTouchIdentifier(touch)]; var touchRecord = touchBank[getTouchIdentifier(touch)];
touchRecord ? (touchRecord.touchActive = !1, touchRecord.previousPageX = touchRecord.currentPageX, touchRecord ? (touchRecord.touchActive = !1, touchRecord.previousPageX = touchRecord.currentPageX,
touchRecord.previousPageY = touchRecord.currentPageY, touchRecord.previousTimeStamp = touchRecord.currentTimeStamp, touchRecord.previousPageY = touchRecord.currentPageY, touchRecord.previousTimeStamp = touchRecord.currentTimeStamp,
touchRecord.currentPageX = touch.pageX, touchRecord.currentPageY = touch.pageY, touchRecord.currentPageX = touch.pageX, touchRecord.currentPageY = touch.pageY,
touchRecord.currentTimeStamp = timestampForTouch(touch), touchHistory.mostRecentTimeStamp = timestampForTouch(touch)) : console.error("Cannot record touch end without a touch start.\n" + "Touch End: %s\n", "Touch Bank: %s", printTouch(touch), printTouchBank()); touchRecord.currentTimeStamp = timestampForTouch(touch), touchHistory.mostRecentTimeStamp = timestampForTouch(touch)) : console.error("Cannot record touch end without a touch start.\n" + "Touch End: %s\n", "Touch Bank: %s", printTouch(touch), printTouchBank());
} }
@ -797,14 +797,14 @@ function printTouch(touch) {
function printTouchBank() { function printTouchBank() {
var printed = JSON.stringify(touchBank.slice(0, MAX_TOUCH_BANK)); var printed = JSON.stringify(touchBank.slice(0, MAX_TOUCH_BANK));
return touchBank.length > MAX_TOUCH_BANK && (printed += " (original size: " + touchBank.length + ")"), return touchBank.length > MAX_TOUCH_BANK && (printed += " (original size: " + touchBank.length + ")"),
printed; printed;
} }
var ResponderTouchHistoryStore = { var ResponderTouchHistoryStore = {
recordTouchTrack: function(topLevelType, nativeEvent) { recordTouchTrack: function(topLevelType, nativeEvent) {
if (isMoveish$2(topLevelType)) nativeEvent.changedTouches.forEach(recordTouchMove); else if (isStartish$2(topLevelType)) nativeEvent.changedTouches.forEach(recordTouchStart), if (isMoveish$2(topLevelType)) nativeEvent.changedTouches.forEach(recordTouchMove); else if (isStartish$2(topLevelType)) nativeEvent.changedTouches.forEach(recordTouchStart),
touchHistory.numberActiveTouches = nativeEvent.touches.length, 1 === touchHistory.numberActiveTouches && (touchHistory.indexOfSingleActiveTouch = nativeEvent.touches[0].identifier); else if (isEndish$2(topLevelType) && (nativeEvent.changedTouches.forEach(recordTouchEnd), touchHistory.numberActiveTouches = nativeEvent.touches.length, 1 === touchHistory.numberActiveTouches && (touchHistory.indexOfSingleActiveTouch = nativeEvent.touches[0].identifier); else if (isEndish$2(topLevelType) && (nativeEvent.changedTouches.forEach(recordTouchEnd),
touchHistory.numberActiveTouches = nativeEvent.touches.length, 1 === touchHistory.numberActiveTouches)) for (var i = 0; i < touchBank.length; i++) { touchHistory.numberActiveTouches = nativeEvent.touches.length, 1 === touchHistory.numberActiveTouches)) for (var i = 0; i < touchBank.length; i++) {
var touchTrackToCheck = touchBank[i]; var touchTrackToCheck = touchBank[i];
if (null != touchTrackToCheck && touchTrackToCheck.touchActive) { if (null != touchTrackToCheck && touchTrackToCheck.touchActive) {
@ -817,7 +817,7 @@ var ResponderTouchHistoryStore = {
}, ResponderTouchHistoryStore_1 = ResponderTouchHistoryStore; }, ResponderTouchHistoryStore_1 = ResponderTouchHistoryStore;
function accumulate(current, next) { function accumulate(current, next) {
return invariant(null != next, "accumulate(...): Accumulated items must be not be null or undefined."), return invariant(null != next, "accumulate(...): Accumulated items must be not be null or undefined."),
null == current ? next : Array.isArray(current) ? current.concat(next) : Array.isArray(next) ? [ current ].concat(next) : [ current, next ]; null == current ? next : Array.isArray(current) ? current.concat(next) : Array.isArray(next) ? [ current ].concat(next) : [ current, next ];
} }
@ -879,24 +879,24 @@ function setResponderAndExtractTransfer(topLevelType, targetInst, nativeEvent, n
var shouldSetEventType = isStartish$1(topLevelType) ? eventTypes.startShouldSetResponder : isMoveish$1(topLevelType) ? eventTypes.moveShouldSetResponder : "topSelectionChange" === topLevelType ? eventTypes.selectionChangeShouldSetResponder : eventTypes.scrollShouldSetResponder, bubbleShouldSetFrom = responderInst ? ReactTreeTraversal.getLowestCommonAncestor(responderInst, targetInst) : targetInst, skipOverBubbleShouldSetFrom = bubbleShouldSetFrom === responderInst, shouldSetEvent = ResponderSyntheticEvent_1.getPooled(shouldSetEventType, bubbleShouldSetFrom, nativeEvent, nativeEventTarget); var shouldSetEventType = isStartish$1(topLevelType) ? eventTypes.startShouldSetResponder : isMoveish$1(topLevelType) ? eventTypes.moveShouldSetResponder : "topSelectionChange" === topLevelType ? eventTypes.selectionChangeShouldSetResponder : eventTypes.scrollShouldSetResponder, bubbleShouldSetFrom = responderInst ? ReactTreeTraversal.getLowestCommonAncestor(responderInst, targetInst) : targetInst, skipOverBubbleShouldSetFrom = bubbleShouldSetFrom === responderInst, shouldSetEvent = ResponderSyntheticEvent_1.getPooled(shouldSetEventType, bubbleShouldSetFrom, nativeEvent, nativeEventTarget);
shouldSetEvent.touchHistory = ResponderTouchHistoryStore_1.touchHistory, skipOverBubbleShouldSetFrom ? EventPropagators_1.accumulateTwoPhaseDispatchesSkipTarget(shouldSetEvent) : EventPropagators_1.accumulateTwoPhaseDispatches(shouldSetEvent); shouldSetEvent.touchHistory = ResponderTouchHistoryStore_1.touchHistory, skipOverBubbleShouldSetFrom ? EventPropagators_1.accumulateTwoPhaseDispatchesSkipTarget(shouldSetEvent) : EventPropagators_1.accumulateTwoPhaseDispatches(shouldSetEvent);
var wantsResponderInst = executeDispatchesInOrderStopAtTrue$1(shouldSetEvent); var wantsResponderInst = executeDispatchesInOrderStopAtTrue$1(shouldSetEvent);
if (shouldSetEvent.isPersistent() || shouldSetEvent.constructor.release(shouldSetEvent), if (shouldSetEvent.isPersistent() || shouldSetEvent.constructor.release(shouldSetEvent),
!wantsResponderInst || wantsResponderInst === responderInst) return null; !wantsResponderInst || wantsResponderInst === responderInst) return null;
var extracted, grantEvent = ResponderSyntheticEvent_1.getPooled(eventTypes.responderGrant, wantsResponderInst, nativeEvent, nativeEventTarget); var extracted, grantEvent = ResponderSyntheticEvent_1.getPooled(eventTypes.responderGrant, wantsResponderInst, nativeEvent, nativeEventTarget);
grantEvent.touchHistory = ResponderTouchHistoryStore_1.touchHistory, EventPropagators_1.accumulateDirectDispatches(grantEvent); grantEvent.touchHistory = ResponderTouchHistoryStore_1.touchHistory, EventPropagators_1.accumulateDirectDispatches(grantEvent);
var blockHostResponder = !0 === executeDirectDispatch$1(grantEvent); var blockHostResponder = !0 === executeDirectDispatch$1(grantEvent);
if (responderInst) { if (responderInst) {
var terminationRequestEvent = ResponderSyntheticEvent_1.getPooled(eventTypes.responderTerminationRequest, responderInst, nativeEvent, nativeEventTarget); var terminationRequestEvent = ResponderSyntheticEvent_1.getPooled(eventTypes.responderTerminationRequest, responderInst, nativeEvent, nativeEventTarget);
terminationRequestEvent.touchHistory = ResponderTouchHistoryStore_1.touchHistory, terminationRequestEvent.touchHistory = ResponderTouchHistoryStore_1.touchHistory,
EventPropagators_1.accumulateDirectDispatches(terminationRequestEvent); EventPropagators_1.accumulateDirectDispatches(terminationRequestEvent);
var shouldSwitch = !hasDispatches$1(terminationRequestEvent) || executeDirectDispatch$1(terminationRequestEvent); var shouldSwitch = !hasDispatches$1(terminationRequestEvent) || executeDirectDispatch$1(terminationRequestEvent);
if (terminationRequestEvent.isPersistent() || terminationRequestEvent.constructor.release(terminationRequestEvent), if (terminationRequestEvent.isPersistent() || terminationRequestEvent.constructor.release(terminationRequestEvent),
shouldSwitch) { shouldSwitch) {
var terminateEvent = ResponderSyntheticEvent_1.getPooled(eventTypes.responderTerminate, responderInst, nativeEvent, nativeEventTarget); var terminateEvent = ResponderSyntheticEvent_1.getPooled(eventTypes.responderTerminate, responderInst, nativeEvent, nativeEventTarget);
terminateEvent.touchHistory = ResponderTouchHistoryStore_1.touchHistory, EventPropagators_1.accumulateDirectDispatches(terminateEvent), terminateEvent.touchHistory = ResponderTouchHistoryStore_1.touchHistory, EventPropagators_1.accumulateDirectDispatches(terminateEvent),
extracted = accumulate_1(extracted, [ grantEvent, terminateEvent ]), changeResponder(wantsResponderInst, blockHostResponder); extracted = accumulate_1(extracted, [ grantEvent, terminateEvent ]), changeResponder(wantsResponderInst, blockHostResponder);
} else { } else {
var rejectEvent = ResponderSyntheticEvent_1.getPooled(eventTypes.responderReject, wantsResponderInst, nativeEvent, nativeEventTarget); var rejectEvent = ResponderSyntheticEvent_1.getPooled(eventTypes.responderReject, wantsResponderInst, nativeEvent, nativeEventTarget);
rejectEvent.touchHistory = ResponderTouchHistoryStore_1.touchHistory, EventPropagators_1.accumulateDirectDispatches(rejectEvent), rejectEvent.touchHistory = ResponderTouchHistoryStore_1.touchHistory, EventPropagators_1.accumulateDirectDispatches(rejectEvent),
extracted = accumulate_1(extracted, rejectEvent); extracted = accumulate_1(extracted, rejectEvent);
} }
} else extracted = accumulate_1(extracted, grantEvent), changeResponder(wantsResponderInst, blockHostResponder); } else extracted = accumulate_1(extracted, grantEvent), changeResponder(wantsResponderInst, blockHostResponder);
@ -927,7 +927,7 @@ var ResponderEventPlugin = {
eventTypes: eventTypes, eventTypes: eventTypes,
extractEvents: function(topLevelType, targetInst, nativeEvent, nativeEventTarget) { extractEvents: function(topLevelType, targetInst, nativeEvent, nativeEventTarget) {
if (isStartish$1(topLevelType)) trackedTouchCount += 1; else if (isEndish$1(topLevelType)) { if (isStartish$1(topLevelType)) trackedTouchCount += 1; else if (isEndish$1(topLevelType)) {
if (!(trackedTouchCount >= 0)) return console.error("Ended a touch event which was not counted in `trackedTouchCount`."), if (!(trackedTouchCount >= 0)) return console.error("Ended a touch event which was not counted in `trackedTouchCount`."),
null; null;
trackedTouchCount -= 1; trackedTouchCount -= 1;
} }
@ -935,17 +935,17 @@ var ResponderEventPlugin = {
var extracted = canTriggerTransfer(topLevelType, targetInst, nativeEvent) ? setResponderAndExtractTransfer(topLevelType, targetInst, nativeEvent, nativeEventTarget) : null, isResponderTouchStart = responderInst && isStartish$1(topLevelType), isResponderTouchMove = responderInst && isMoveish$1(topLevelType), isResponderTouchEnd = responderInst && isEndish$1(topLevelType), incrementalTouch = isResponderTouchStart ? eventTypes.responderStart : isResponderTouchMove ? eventTypes.responderMove : isResponderTouchEnd ? eventTypes.responderEnd : null; var extracted = canTriggerTransfer(topLevelType, targetInst, nativeEvent) ? setResponderAndExtractTransfer(topLevelType, targetInst, nativeEvent, nativeEventTarget) : null, isResponderTouchStart = responderInst && isStartish$1(topLevelType), isResponderTouchMove = responderInst && isMoveish$1(topLevelType), isResponderTouchEnd = responderInst && isEndish$1(topLevelType), incrementalTouch = isResponderTouchStart ? eventTypes.responderStart : isResponderTouchMove ? eventTypes.responderMove : isResponderTouchEnd ? eventTypes.responderEnd : null;
if (incrementalTouch) { if (incrementalTouch) {
var gesture = ResponderSyntheticEvent_1.getPooled(incrementalTouch, responderInst, nativeEvent, nativeEventTarget); var gesture = ResponderSyntheticEvent_1.getPooled(incrementalTouch, responderInst, nativeEvent, nativeEventTarget);
gesture.touchHistory = ResponderTouchHistoryStore_1.touchHistory, EventPropagators_1.accumulateDirectDispatches(gesture), gesture.touchHistory = ResponderTouchHistoryStore_1.touchHistory, EventPropagators_1.accumulateDirectDispatches(gesture),
extracted = accumulate_1(extracted, gesture); extracted = accumulate_1(extracted, gesture);
} }
var isResponderTerminate = responderInst && "topTouchCancel" === topLevelType, isResponderRelease = responderInst && !isResponderTerminate && isEndish$1(topLevelType) && noResponderTouches(nativeEvent), finalTouch = isResponderTerminate ? eventTypes.responderTerminate : isResponderRelease ? eventTypes.responderRelease : null; var isResponderTerminate = responderInst && "topTouchCancel" === topLevelType, isResponderRelease = responderInst && !isResponderTerminate && isEndish$1(topLevelType) && noResponderTouches(nativeEvent), finalTouch = isResponderTerminate ? eventTypes.responderTerminate : isResponderRelease ? eventTypes.responderRelease : null;
if (finalTouch) { if (finalTouch) {
var finalEvent = ResponderSyntheticEvent_1.getPooled(finalTouch, responderInst, nativeEvent, nativeEventTarget); var finalEvent = ResponderSyntheticEvent_1.getPooled(finalTouch, responderInst, nativeEvent, nativeEventTarget);
finalEvent.touchHistory = ResponderTouchHistoryStore_1.touchHistory, EventPropagators_1.accumulateDirectDispatches(finalEvent), finalEvent.touchHistory = ResponderTouchHistoryStore_1.touchHistory, EventPropagators_1.accumulateDirectDispatches(finalEvent),
extracted = accumulate_1(extracted, finalEvent), changeResponder(null); extracted = accumulate_1(extracted, finalEvent), changeResponder(null);
} }
var numberActiveTouches = ResponderTouchHistoryStore_1.touchHistory.numberActiveTouches; var numberActiveTouches = ResponderTouchHistoryStore_1.touchHistory.numberActiveTouches;
return ResponderEventPlugin.GlobalInteractionHandler && numberActiveTouches !== previousActiveTouches && ResponderEventPlugin.GlobalInteractionHandler.onChange(numberActiveTouches), return ResponderEventPlugin.GlobalInteractionHandler && numberActiveTouches !== previousActiveTouches && ResponderEventPlugin.GlobalInteractionHandler.onChange(numberActiveTouches),
previousActiveTouches = numberActiveTouches, extracted; previousActiveTouches = numberActiveTouches, extracted;
}, },
GlobalResponderHandler: null, GlobalResponderHandler: null,
@ -961,8 +961,8 @@ var ResponderEventPlugin = {
}, ResponderEventPlugin_1 = ResponderEventPlugin; }, ResponderEventPlugin_1 = ResponderEventPlugin;
function inject() { function inject() {
RCTEventEmitter.register(ReactNativeEventEmitter_1), EventPluginHub_1.injection.injectEventPluginOrder(ReactNativeEventPluginOrder_1), RCTEventEmitter.register(ReactNativeEventEmitter_1), EventPluginHub_1.injection.injectEventPluginOrder(ReactNativeEventPluginOrder_1),
EventPluginUtils_1.injection.injectComponentTree(ReactNativeComponentTree_1), ResponderEventPlugin_1.injection.injectGlobalResponderHandler(ReactNativeGlobalResponderHandler_1), EventPluginUtils_1.injection.injectComponentTree(ReactNativeComponentTree_1), ResponderEventPlugin_1.injection.injectGlobalResponderHandler(ReactNativeGlobalResponderHandler_1),
EventPluginHub_1.injection.injectEventPluginsByName({ EventPluginHub_1.injection.injectEventPluginsByName({
ResponderEventPlugin: ResponderEventPlugin_1, ResponderEventPlugin: ResponderEventPlugin_1,
ReactNativeBridgeEventPlugin: ReactNativeBridgeEventPlugin_1 ReactNativeBridgeEventPlugin: ReactNativeBridgeEventPlugin_1
@ -990,7 +990,7 @@ var ReactOwner = {
if (owner && owner.tag === ClassComponent) { if (owner && owner.tag === ClassComponent) {
var inst = owner.stateNode; var inst = owner.stateNode;
(inst.refs === emptyObject ? inst.refs = {} : inst.refs)[ref] = component.getPublicInstance(); (inst.refs === emptyObject ? inst.refs = {} : inst.refs)[ref] = component.getPublicInstance();
} else invariant(isValidOwner(owner), "addComponentAsRefTo(...): Only a ReactOwner can have refs. You might " + "be adding a ref to a component that was not created inside a component's " + "`render` method, or you have multiple copies of React loaded " + "(details: https://fb.me/react-refs-must-have-owner)."), } else invariant(isValidOwner(owner), "addComponentAsRefTo(...): Only a ReactOwner can have refs. You might " + "be adding a ref to a component that was not created inside a component's " + "`render` method, or you have multiple copies of React loaded " + "(details: https://fb.me/react-refs-must-have-owner)."),
owner.attachRef(ref, component); owner.attachRef(ref, component);
}, },
removeComponentAsRefFrom: function(component, ref, owner) { removeComponentAsRefFrom: function(component, ref, owner) {
@ -1020,10 +1020,10 @@ ReactRef.attachRefs = function(instance, element) {
} }
}, ReactRef.shouldUpdateRefs = function(prevElement, nextElement) { }, ReactRef.shouldUpdateRefs = function(prevElement, nextElement) {
var prevRef = null, prevOwner = null; var prevRef = null, prevOwner = null;
null !== prevElement && "object" == typeof prevElement && (prevRef = prevElement.ref, null !== prevElement && "object" == typeof prevElement && (prevRef = prevElement.ref,
prevOwner = prevElement._owner); prevOwner = prevElement._owner);
var nextRef = null, nextOwner = null; var nextRef = null, nextOwner = null;
return null !== nextElement && "object" == typeof nextElement && (nextRef = nextElement.ref, return null !== nextElement && "object" == typeof nextElement && (nextRef = nextElement.ref,
nextOwner = nextElement._owner), prevRef !== nextRef || "string" == typeof nextRef && nextOwner !== prevOwner; nextOwner = nextElement._owner), prevRef !== nextRef || "string" == typeof nextRef && nextOwner !== prevOwner;
}, ReactRef.detachRefs = function(instance, element) { }, ReactRef.detachRefs = function(instance, element) {
if (null !== element && "object" == typeof element) { if (null !== element && "object" == typeof element) {
@ -1041,7 +1041,7 @@ function attachRefs() {
var ReactReconciler = { var ReactReconciler = {
mountComponent: function(internalInstance, transaction, hostParent, hostContainerInfo, context, parentDebugID) { mountComponent: function(internalInstance, transaction, hostParent, hostContainerInfo, context, parentDebugID) {
var markup = internalInstance.mountComponent(transaction, hostParent, hostContainerInfo, context, parentDebugID); var markup = internalInstance.mountComponent(transaction, hostParent, hostContainerInfo, context, parentDebugID);
return internalInstance._currentElement && null != internalInstance._currentElement.ref && transaction.getReactMountReady().enqueue(attachRefs, internalInstance), return internalInstance._currentElement && null != internalInstance._currentElement.ref && transaction.getReactMountReady().enqueue(attachRefs, internalInstance),
markup; markup;
}, },
getHostNode: function(internalInstance) { getHostNode: function(internalInstance) {
@ -1054,7 +1054,7 @@ var ReactReconciler = {
var prevElement = internalInstance._currentElement; var prevElement = internalInstance._currentElement;
if (nextElement !== prevElement || context !== internalInstance._context) { if (nextElement !== prevElement || context !== internalInstance._context) {
var refsChanged = ReactRef_1.shouldUpdateRefs(prevElement, nextElement); var refsChanged = ReactRef_1.shouldUpdateRefs(prevElement, nextElement);
refsChanged && ReactRef_1.detachRefs(internalInstance, prevElement), internalInstance.receiveComponent(nextElement, transaction, context), refsChanged && ReactRef_1.detachRefs(internalInstance, prevElement), internalInstance.receiveComponent(nextElement, transaction, context),
refsChanged && internalInstance._currentElement && null != internalInstance._currentElement.ref && transaction.getReactMountReady().enqueue(attachRefs, internalInstance); refsChanged && internalInstance._currentElement && null != internalInstance._currentElement.ref && transaction.getReactMountReady().enqueue(attachRefs, internalInstance);
} }
}, },
@ -1082,7 +1082,7 @@ var ReactReconciler = {
enableAsyncSubtreeAPI: !1 enableAsyncSubtreeAPI: !1
}, ReactFeatureFlags_1 = ReactFeatureFlags, OBSERVED_ERROR = {}, TransactionImpl = { }, ReactFeatureFlags_1 = ReactFeatureFlags, OBSERVED_ERROR = {}, TransactionImpl = {
reinitializeTransaction: function() { reinitializeTransaction: function() {
this.transactionWrappers = this.getTransactionWrappers(), this.wrapperInitData ? this.wrapperInitData.length = 0 : this.wrapperInitData = [], this.transactionWrappers = this.getTransactionWrappers(), this.wrapperInitData ? this.wrapperInitData.length = 0 : this.wrapperInitData = [],
this._isInTransaction = !1; this._isInTransaction = !1;
}, },
_isInTransaction: !1, _isInTransaction: !1,
@ -1094,7 +1094,7 @@ var ReactReconciler = {
invariant(!this.isInTransaction(), "Transaction.perform(...): Cannot initialize a transaction when there " + "is already an outstanding transaction."); invariant(!this.isInTransaction(), "Transaction.perform(...): Cannot initialize a transaction when there " + "is already an outstanding transaction.");
var errorThrown, ret; var errorThrown, ret;
try { try {
this._isInTransaction = !0, errorThrown = !0, this.initializeAll(0), ret = method.call(scope, a, b, c, d, e, f), this._isInTransaction = !0, errorThrown = !0, this.initializeAll(0), ret = method.call(scope, a, b, c, d, e, f),
errorThrown = !1; errorThrown = !1;
} finally { } finally {
try { try {
@ -1124,7 +1124,7 @@ var ReactReconciler = {
for (var transactionWrappers = this.transactionWrappers, i = startIndex; i < transactionWrappers.length; i++) { for (var transactionWrappers = this.transactionWrappers, i = startIndex; i < transactionWrappers.length; i++) {
var errorThrown, wrapper = transactionWrappers[i], initData = this.wrapperInitData[i]; var errorThrown, wrapper = transactionWrappers[i], initData = this.wrapperInitData[i];
try { try {
errorThrown = !0, initData !== OBSERVED_ERROR && wrapper.close && wrapper.close.call(this, initData), errorThrown = !0, initData !== OBSERVED_ERROR && wrapper.close && wrapper.close.call(this, initData),
errorThrown = !1; errorThrown = !1;
} finally { } finally {
if (errorThrown) try { if (errorThrown) try {
@ -1145,7 +1145,7 @@ var NESTED_UPDATES = {
this.dirtyComponentsLength = dirtyComponents.length; this.dirtyComponentsLength = dirtyComponents.length;
}, },
close: function() { close: function() {
this.dirtyComponentsLength !== dirtyComponents.length ? (dirtyComponents.splice(0, this.dirtyComponentsLength), this.dirtyComponentsLength !== dirtyComponents.length ? (dirtyComponents.splice(0, this.dirtyComponentsLength),
flushBatchedUpdates()) : dirtyComponents.length = 0; flushBatchedUpdates()) : dirtyComponents.length = 0;
} }
}, TRANSACTION_WRAPPERS = [ NESTED_UPDATES ]; }, TRANSACTION_WRAPPERS = [ NESTED_UPDATES ];
@ -1159,7 +1159,7 @@ Object.assign(ReactUpdatesFlushTransaction.prototype, Transaction, {
return TRANSACTION_WRAPPERS; return TRANSACTION_WRAPPERS;
}, },
destructor: function() { destructor: function() {
this.dirtyComponentsLength = null, ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction), this.dirtyComponentsLength = null, ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction),
this.reconcileTransaction = null; this.reconcileTransaction = null;
}, },
perform: function(method, scope, a) { perform: function(method, scope, a) {
@ -1177,16 +1177,16 @@ function mountOrderComparator(c1, c2) {
function runBatchedUpdates(transaction) { function runBatchedUpdates(transaction) {
var len = transaction.dirtyComponentsLength; var len = transaction.dirtyComponentsLength;
invariant(len === dirtyComponents.length, "Expected flush transaction's stored dirty-components length (%s) to " + "match dirty-components array length (%s).", len, dirtyComponents.length), invariant(len === dirtyComponents.length, "Expected flush transaction's stored dirty-components length (%s) to " + "match dirty-components array length (%s).", len, dirtyComponents.length),
dirtyComponents.sort(mountOrderComparator), updateBatchNumber++; dirtyComponents.sort(mountOrderComparator), updateBatchNumber++;
for (var i = 0; i < len; i++) { for (var i = 0; i < len; i++) {
var markerName, component = dirtyComponents[i]; var markerName, component = dirtyComponents[i];
if (ReactFeatureFlags_1.logTopLevelRenders) { if (ReactFeatureFlags_1.logTopLevelRenders) {
var namedComponent = component; var namedComponent = component;
component._currentElement.type.isReactTopLevelWrapper && (namedComponent = component._renderedComponent), component._currentElement.type.isReactTopLevelWrapper && (namedComponent = component._renderedComponent),
markerName = "React update: " + namedComponent.getName(), console.time(markerName); markerName = "React update: " + namedComponent.getName(), console.time(markerName);
} }
ReactReconciler_1.performUpdateIfNecessary(component, transaction.reconcileTransaction, updateBatchNumber), ReactReconciler_1.performUpdateIfNecessary(component, transaction.reconcileTransaction, updateBatchNumber),
markerName && console.timeEnd(markerName); markerName && console.timeEnd(markerName);
} }
} }
@ -1205,13 +1205,13 @@ function enqueueUpdate$1(component) {
var ReactUpdatesInjection = { var ReactUpdatesInjection = {
injectReconcileTransaction: function(ReconcileTransaction) { injectReconcileTransaction: function(ReconcileTransaction) {
invariant(ReconcileTransaction, "ReactUpdates: must provide a reconcile transaction class"), invariant(ReconcileTransaction, "ReactUpdates: must provide a reconcile transaction class"),
ReactUpdates.ReactReconcileTransaction = ReconcileTransaction; ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;
}, },
injectBatchingStrategy: function(_batchingStrategy) { injectBatchingStrategy: function(_batchingStrategy) {
invariant(_batchingStrategy, "ReactUpdates: must provide a batching strategy"), invariant(_batchingStrategy, "ReactUpdates: must provide a batching strategy"),
invariant("function" == typeof _batchingStrategy.batchedUpdates, "ReactUpdates: must provide a batchedUpdates() function"), invariant("function" == typeof _batchingStrategy.batchedUpdates, "ReactUpdates: must provide a batchedUpdates() function"),
invariant("boolean" == typeof _batchingStrategy.isBatchingUpdates, "ReactUpdates: must provide an isBatchingUpdates boolean attribute"), invariant("boolean" == typeof _batchingStrategy.isBatchingUpdates, "ReactUpdates: must provide an isBatchingUpdates boolean attribute"),
batchingStrategy = _batchingStrategy; batchingStrategy = _batchingStrategy;
}, },
getBatchingStrategy: function() { getBatchingStrategy: function() {
@ -1242,30 +1242,30 @@ var ReactUpdateQueue = {
return !!internalInstance && !!internalInstance._renderedComponent; return !!internalInstance && !!internalInstance._renderedComponent;
}, },
enqueueCallbackInternal: function(internalInstance, callback) { enqueueCallbackInternal: function(internalInstance, callback) {
internalInstance._pendingCallbacks ? internalInstance._pendingCallbacks.push(callback) : internalInstance._pendingCallbacks = [ callback ], internalInstance._pendingCallbacks ? internalInstance._pendingCallbacks.push(callback) : internalInstance._pendingCallbacks = [ callback ],
enqueueUpdate(internalInstance); enqueueUpdate(internalInstance);
}, },
enqueueForceUpdate: function(publicInstance, callback, callerName) { enqueueForceUpdate: function(publicInstance, callback, callerName) {
var internalInstance = getInternalInstanceReadyForUpdate(publicInstance); var internalInstance = getInternalInstanceReadyForUpdate(publicInstance);
internalInstance && (callback = void 0 === callback ? null : callback, null !== callback && (internalInstance._pendingCallbacks ? internalInstance._pendingCallbacks.push(callback) : internalInstance._pendingCallbacks = [ callback ]), internalInstance && (callback = void 0 === callback ? null : callback, null !== callback && (internalInstance._pendingCallbacks ? internalInstance._pendingCallbacks.push(callback) : internalInstance._pendingCallbacks = [ callback ]),
internalInstance._pendingForceUpdate = !0, enqueueUpdate(internalInstance)); internalInstance._pendingForceUpdate = !0, enqueueUpdate(internalInstance));
}, },
enqueueReplaceState: function(publicInstance, completeState, callback, callerName) { enqueueReplaceState: function(publicInstance, completeState, callback, callerName) {
var internalInstance = getInternalInstanceReadyForUpdate(publicInstance); var internalInstance = getInternalInstanceReadyForUpdate(publicInstance);
internalInstance && (internalInstance._pendingStateQueue = [ completeState ], internalInstance._pendingReplaceState = !0, internalInstance && (internalInstance._pendingStateQueue = [ completeState ], internalInstance._pendingReplaceState = !0,
callback = void 0 === callback ? null : callback, null !== callback && (internalInstance._pendingCallbacks ? internalInstance._pendingCallbacks.push(callback) : internalInstance._pendingCallbacks = [ callback ]), callback = void 0 === callback ? null : callback, null !== callback && (internalInstance._pendingCallbacks ? internalInstance._pendingCallbacks.push(callback) : internalInstance._pendingCallbacks = [ callback ]),
enqueueUpdate(internalInstance)); enqueueUpdate(internalInstance));
}, },
enqueueSetState: function(publicInstance, partialState, callback, callerName) { enqueueSetState: function(publicInstance, partialState, callback, callerName) {
var internalInstance = getInternalInstanceReadyForUpdate(publicInstance); var internalInstance = getInternalInstanceReadyForUpdate(publicInstance);
if (internalInstance) { if (internalInstance) {
(internalInstance._pendingStateQueue || (internalInstance._pendingStateQueue = [])).push(partialState), (internalInstance._pendingStateQueue || (internalInstance._pendingStateQueue = [])).push(partialState),
callback = void 0 === callback ? null : callback, null !== callback && (internalInstance._pendingCallbacks ? internalInstance._pendingCallbacks.push(callback) : internalInstance._pendingCallbacks = [ callback ]), callback = void 0 === callback ? null : callback, null !== callback && (internalInstance._pendingCallbacks ? internalInstance._pendingCallbacks.push(callback) : internalInstance._pendingCallbacks = [ callback ]),
enqueueUpdate(internalInstance); enqueueUpdate(internalInstance);
} }
}, },
enqueueElementInternal: function(internalInstance, nextElement, nextContext) { enqueueElementInternal: function(internalInstance, nextElement, nextContext) {
internalInstance._pendingElement = nextElement, internalInstance._context = nextContext, internalInstance._pendingElement = nextElement, internalInstance._context = nextContext,
enqueueUpdate(internalInstance); enqueueUpdate(internalInstance);
} }
}, ReactUpdateQueue_1 = ReactUpdateQueue, injected = !1, ReactComponentEnvironment = { }, ReactUpdateQueue_1 = ReactUpdateQueue, injected = !1, ReactComponentEnvironment = {
@ -1273,9 +1273,9 @@ var ReactUpdateQueue = {
processChildrenUpdates: null, processChildrenUpdates: null,
injection: { injection: {
injectEnvironment: function(environment) { injectEnvironment: function(environment) {
invariant(!injected, "ReactCompositeComponent: injectEnvironment() can only be called once."), invariant(!injected, "ReactCompositeComponent: injectEnvironment() can only be called once."),
ReactComponentEnvironment.replaceNodeWithMarkup = environment.replaceNodeWithMarkup, ReactComponentEnvironment.replaceNodeWithMarkup = environment.replaceNodeWithMarkup,
ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates, ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates,
injected = !0; injected = !0;
} }
} }
@ -1317,28 +1317,28 @@ function isPureComponent(Component) {
var nextMountID = 1, ReactCompositeComponent = { var nextMountID = 1, ReactCompositeComponent = {
construct: function(element) { construct: function(element) {
this._currentElement = element, this._rootNodeID = 0, this._compositeType = null, this._currentElement = element, this._rootNodeID = 0, this._compositeType = null,
this._instance = null, this._hostParent = null, this._hostContainerInfo = null, this._instance = null, this._hostParent = null, this._hostContainerInfo = null,
this._updateBatchNumber = null, this._pendingElement = null, this._pendingStateQueue = null, this._updateBatchNumber = null, this._pendingElement = null, this._pendingStateQueue = null,
this._pendingReplaceState = !1, this._pendingForceUpdate = !1, this._renderedNodeType = null, this._pendingReplaceState = !1, this._pendingForceUpdate = !1, this._renderedNodeType = null,
this._renderedComponent = null, this._context = null, this._mountOrder = 0, this._topLevelWrapper = null, this._renderedComponent = null, this._context = null, this._mountOrder = 0, this._topLevelWrapper = null,
this._pendingCallbacks = null, this._calledComponentWillUnmount = !1; this._pendingCallbacks = null, this._calledComponentWillUnmount = !1;
}, },
mountComponent: function(transaction, hostParent, hostContainerInfo, context) { mountComponent: function(transaction, hostParent, hostContainerInfo, context) {
this._context = context, this._mountOrder = nextMountID++, this._hostParent = hostParent, this._context = context, this._mountOrder = nextMountID++, this._hostParent = hostParent,
this._hostContainerInfo = hostContainerInfo; this._hostContainerInfo = hostContainerInfo;
var renderedElement, publicProps = this._currentElement.props, publicContext = this._processContext(context), Component = this._currentElement.type, updateQueue = transaction.getUpdateQueue(), doConstruct = shouldConstruct(Component), inst = this._constructComponent(doConstruct, publicProps, publicContext, updateQueue); var renderedElement, publicProps = this._currentElement.props, publicContext = this._processContext(context), Component = this._currentElement.type, updateQueue = transaction.getUpdateQueue(), doConstruct = shouldConstruct(Component), inst = this._constructComponent(doConstruct, publicProps, publicContext, updateQueue);
doConstruct || null != inst && null != inst.render ? isPureComponent(Component) ? this._compositeType = ReactCompositeComponentTypes$1.PureClass : this._compositeType = ReactCompositeComponentTypes$1.ImpureClass : (renderedElement = inst, doConstruct || null != inst && null != inst.render ? isPureComponent(Component) ? this._compositeType = ReactCompositeComponentTypes$1.PureClass : this._compositeType = ReactCompositeComponentTypes$1.ImpureClass : (renderedElement = inst,
invariant(null === inst || !1 === inst || React.isValidElement(inst), "%s(...): A valid React element (or null) must be returned. You may have " + "returned undefined, an array or some other invalid object.", Component.displayName || Component.name || "Component"), invariant(null === inst || !1 === inst || React.isValidElement(inst), "%s(...): A valid React element (or null) must be returned. You may have " + "returned undefined, an array or some other invalid object.", Component.displayName || Component.name || "Component"),
inst = new StatelessComponent(Component), this._compositeType = ReactCompositeComponentTypes$1.StatelessFunctional), inst = new StatelessComponent(Component), this._compositeType = ReactCompositeComponentTypes$1.StatelessFunctional),
inst.props = publicProps, inst.context = publicContext, inst.refs = emptyObject, inst.props = publicProps, inst.context = publicContext, inst.refs = emptyObject,
inst.updater = updateQueue, this._instance = inst, ReactInstanceMap_1.set(inst, this); inst.updater = updateQueue, this._instance = inst, ReactInstanceMap_1.set(inst, this);
var initialState = inst.state; var initialState = inst.state;
void 0 === initialState && (inst.state = initialState = null), invariant("object" == typeof initialState && !Array.isArray(initialState), "%s.state: must be set to an object or null", this.getName() || "ReactCompositeComponent"), void 0 === initialState && (inst.state = initialState = null), invariant("object" == typeof initialState && !Array.isArray(initialState), "%s.state: must be set to an object or null", this.getName() || "ReactCompositeComponent"),
this._pendingStateQueue = null, this._pendingReplaceState = !1, this._pendingForceUpdate = !1, this._pendingStateQueue = null, this._pendingReplaceState = !1, this._pendingForceUpdate = !1,
inst.componentWillMount && (inst.componentWillMount(), this._pendingStateQueue && (inst.state = this._processPendingState(inst.props, inst.context))); inst.componentWillMount && (inst.componentWillMount(), this._pendingStateQueue && (inst.state = this._processPendingState(inst.props, inst.context)));
var markup; var markup;
markup = inst.unstable_handleError ? this.performInitialMountWithErrorHandling(renderedElement, hostParent, hostContainerInfo, transaction, context) : this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context), markup = inst.unstable_handleError ? this.performInitialMountWithErrorHandling(renderedElement, hostParent, hostContainerInfo, transaction, context) : this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context),
inst.componentDidMount && transaction.getReactMountReady().enqueue(inst.componentDidMount, inst); inst.componentDidMount && transaction.getReactMountReady().enqueue(inst.componentDidMount, inst);
var callbacks = this._pendingCallbacks; var callbacks = this._pendingCallbacks;
if (callbacks) { if (callbacks) {
@ -1359,8 +1359,8 @@ var nextMountID = 1, ReactCompositeComponent = {
try { try {
markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context); markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);
} catch (e) { } catch (e) {
transaction.rollback(checkpoint), this._instance.unstable_handleError(e), this._pendingStateQueue && (this._instance.state = this._processPendingState(this._instance.props, this._instance.context)), transaction.rollback(checkpoint), this._instance.unstable_handleError(e), this._pendingStateQueue && (this._instance.state = this._processPendingState(this._instance.props, this._instance.context)),
checkpoint = transaction.checkpoint(), this._renderedComponent.unmountComponent(!0, !0), checkpoint = transaction.checkpoint(), this._renderedComponent.unmountComponent(!0, !0),
transaction.rollback(checkpoint), markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context); transaction.rollback(checkpoint), markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);
} }
return markup; return markup;
@ -1378,17 +1378,17 @@ var nextMountID = 1, ReactCompositeComponent = {
unmountComponent: function(safely, skipLifecycle) { unmountComponent: function(safely, skipLifecycle) {
if (this._renderedComponent) { if (this._renderedComponent) {
var inst = this._instance; var inst = this._instance;
if (inst.componentWillUnmount && !inst._calledComponentWillUnmount) if (inst._calledComponentWillUnmount = !0, if (inst.componentWillUnmount && !inst._calledComponentWillUnmount) if (inst._calledComponentWillUnmount = !0,
safely) { safely) {
if (!skipLifecycle) { if (!skipLifecycle) {
var name = this.getName() + ".componentWillUnmount()"; var name = this.getName() + ".componentWillUnmount()";
ReactErrorUtils_1.invokeGuardedCallbackAndCatchFirstError(name, inst.componentWillUnmount, inst); ReactErrorUtils_1.invokeGuardedCallbackAndCatchFirstError(name, inst.componentWillUnmount, inst);
} }
} else inst.componentWillUnmount(); } else inst.componentWillUnmount();
this._renderedComponent && (ReactReconciler_1.unmountComponent(this._renderedComponent, safely, skipLifecycle), this._renderedComponent && (ReactReconciler_1.unmountComponent(this._renderedComponent, safely, skipLifecycle),
this._renderedNodeType = null, this._renderedComponent = null, this._instance = null), this._renderedNodeType = null, this._renderedComponent = null, this._instance = null),
this._pendingStateQueue = null, this._pendingReplaceState = !1, this._pendingForceUpdate = !1, this._pendingStateQueue = null, this._pendingReplaceState = !1, this._pendingForceUpdate = !1,
this._pendingCallbacks = null, this._pendingElement = null, this._context = null, this._pendingCallbacks = null, this._pendingElement = null, this._context = null,
this._rootNodeID = 0, this._topLevelWrapper = null, ReactInstanceMap_1.remove(inst); this._rootNodeID = 0, this._topLevelWrapper = null, ReactInstanceMap_1.remove(inst);
} }
}, },
@ -1427,7 +1427,7 @@ var nextMountID = 1, ReactCompositeComponent = {
var inst = this._instance; var inst = this._instance;
invariant(null != inst, "Attempted to update component `%s` that has already been unmounted " + "(or failed to mount).", this.getName() || "ReactCompositeComponent"); invariant(null != inst, "Attempted to update component `%s` that has already been unmounted " + "(or failed to mount).", this.getName() || "ReactCompositeComponent");
var nextContext, willReceive = !1; var nextContext, willReceive = !1;
this._context === nextUnmaskedContext ? nextContext = inst.context : (nextContext = this._processContext(nextUnmaskedContext), this._context === nextUnmaskedContext ? nextContext = inst.context : (nextContext = this._processContext(nextUnmaskedContext),
willReceive = !0); willReceive = !0);
var prevProps = prevParentElement.props, nextProps = nextParentElement.props; var prevProps = prevParentElement.props, nextProps = nextParentElement.props;
if (prevParentElement !== nextParentElement && (willReceive = !0), willReceive && inst.componentWillReceiveProps) { if (prevParentElement !== nextParentElement && (willReceive = !0), willReceive && inst.componentWillReceiveProps) {
@ -1443,9 +1443,9 @@ var nextMountID = 1, ReactCompositeComponent = {
var prevState = inst.state; var prevState = inst.state;
shouldUpdate = willReceive || nextState !== prevState, inst.shouldComponentUpdate ? shouldUpdate = inst.shouldComponentUpdate(nextProps, nextState, nextContext) : this._compositeType === ReactCompositeComponentTypes$1.PureClass && (shouldUpdate = !shallowEqual(prevProps, nextProps) || !shallowEqual(inst.state, nextState)); shouldUpdate = willReceive || nextState !== prevState, inst.shouldComponentUpdate ? shouldUpdate = inst.shouldComponentUpdate(nextProps, nextState, nextContext) : this._compositeType === ReactCompositeComponentTypes$1.PureClass && (shouldUpdate = !shallowEqual(prevProps, nextProps) || !shallowEqual(inst.state, nextState));
} }
if (this._updateBatchNumber = null, shouldUpdate ? (this._pendingForceUpdate = !1, if (this._updateBatchNumber = null, shouldUpdate ? (this._pendingForceUpdate = !1,
this._performComponentUpdate(nextParentElement, nextProps, nextState, nextContext, transaction, nextUnmaskedContext)) : (this._currentElement = nextParentElement, this._performComponentUpdate(nextParentElement, nextProps, nextState, nextContext, transaction, nextUnmaskedContext)) : (this._currentElement = nextParentElement,
this._context = nextUnmaskedContext, inst.props = nextProps, inst.state = nextState, this._context = nextUnmaskedContext, inst.props = nextProps, inst.state = nextState,
inst.context = nextContext), callbacks) for (var j = 0; j < callbacks.length; j++) transaction.getReactMountReady().enqueue(callbacks[j], this.getPublicInstance()); inst.context = nextContext), callbacks) for (var j = 0; j < callbacks.length; j++) transaction.getReactMountReady().enqueue(callbacks[j], this.getPublicInstance());
}, },
_processPendingState: function(props, context) { _processPendingState: function(props, context) {
@ -1460,9 +1460,9 @@ var nextMountID = 1, ReactCompositeComponent = {
}, },
_performComponentUpdate: function(nextElement, nextProps, nextState, nextContext, transaction, unmaskedContext) { _performComponentUpdate: function(nextElement, nextProps, nextState, nextContext, transaction, unmaskedContext) {
var prevProps, prevState, inst = this._instance, hasComponentDidUpdate = !!inst.componentDidUpdate; var prevProps, prevState, inst = this._instance, hasComponentDidUpdate = !!inst.componentDidUpdate;
hasComponentDidUpdate && (prevProps = inst.props, prevState = inst.state), inst.componentWillUpdate && inst.componentWillUpdate(nextProps, nextState, nextContext), hasComponentDidUpdate && (prevProps = inst.props, prevState = inst.state), inst.componentWillUpdate && inst.componentWillUpdate(nextProps, nextState, nextContext),
this._currentElement = nextElement, this._context = unmaskedContext, inst.props = nextProps, this._currentElement = nextElement, this._context = unmaskedContext, inst.props = nextProps,
inst.state = nextState, inst.context = nextContext, inst.unstable_handleError ? this._updateRenderedComponentWithErrorHandling(transaction, unmaskedContext) : this._updateRenderedComponent(transaction, unmaskedContext), inst.state = nextState, inst.context = nextContext, inst.unstable_handleError ? this._updateRenderedComponentWithErrorHandling(transaction, unmaskedContext) : this._updateRenderedComponent(transaction, unmaskedContext),
hasComponentDidUpdate && transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst, prevProps, prevState), inst); hasComponentDidUpdate && transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst, prevProps, prevState), inst);
}, },
_updateRenderedComponentWithErrorHandling: function(transaction, context) { _updateRenderedComponentWithErrorHandling: function(transaction, context) {
@ -1470,8 +1470,8 @@ var nextMountID = 1, ReactCompositeComponent = {
try { try {
this._updateRenderedComponent(transaction, context); this._updateRenderedComponent(transaction, context);
} catch (e) { } catch (e) {
transaction.rollback(checkpoint), this._instance.unstable_handleError(e), this._pendingStateQueue && (this._instance.state = this._processPendingState(this._instance.props, this._instance.context)), transaction.rollback(checkpoint), this._instance.unstable_handleError(e), this._pendingStateQueue && (this._instance.state = this._processPendingState(this._instance.props, this._instance.context)),
checkpoint = transaction.checkpoint(), this._updateRenderedComponentWithNextElement(transaction, context, null, !0), checkpoint = transaction.checkpoint(), this._updateRenderedComponentWithNextElement(transaction, context, null, !0),
this._updateRenderedComponent(transaction, context); this._updateRenderedComponent(transaction, context);
} }
}, },
@ -1489,7 +1489,7 @@ var nextMountID = 1, ReactCompositeComponent = {
var child = this._instantiateReactComponent(nextRenderedElement, nodeType !== ReactNodeTypes_1.EMPTY); var child = this._instantiateReactComponent(nextRenderedElement, nodeType !== ReactNodeTypes_1.EMPTY);
this._renderedComponent = child; this._renderedComponent = child;
var nextMarkup = ReactReconciler_1.mountComponent(child, transaction, this._hostParent, this._hostContainerInfo, this._processChildContext(context), 0); var nextMarkup = ReactReconciler_1.mountComponent(child, transaction, this._hostParent, this._hostContainerInfo, this._processChildContext(context), 0);
ReactFeatureFlags_1.prepareNewChildrenBeforeUnmountInStack && ReactReconciler_1.unmountComponent(prevComponentInstance, safely, !1), ReactFeatureFlags_1.prepareNewChildrenBeforeUnmountInStack && ReactReconciler_1.unmountComponent(prevComponentInstance, safely, !1),
this._replaceNodeWithMarkup(oldHostNode, nextMarkup, prevComponentInstance); this._replaceNodeWithMarkup(oldHostNode, nextMarkup, prevComponentInstance);
} }
}, },
@ -1510,7 +1510,7 @@ var nextMountID = 1, ReactCompositeComponent = {
ReactCurrentOwner$1.current = null; ReactCurrentOwner$1.current = null;
} }
} }
return invariant(null === renderedElement || !1 === renderedElement || React.isValidElement(renderedElement), "%s.render(): A valid React element (or null) must be returned. You may have " + "returned undefined, an array or some other invalid object.", this.getName() || "ReactCompositeComponent"), return invariant(null === renderedElement || !1 === renderedElement || React.isValidElement(renderedElement), "%s.render(): A valid React element (or null) must be returned. You may have " + "returned undefined, an array or some other invalid object.", this.getName() || "ReactCompositeComponent"),
renderedElement; renderedElement;
}, },
attachRef: function(ref, component) { attachRef: function(ref, component) {
@ -1553,7 +1553,7 @@ var ReactEmptyComponent_1 = ReactEmptyComponent, genericComponentClass = null, t
}; };
function createInternalComponent(element) { function createInternalComponent(element) {
return invariant(genericComponentClass, "There is no registered component for the tag %s", element.type), return invariant(genericComponentClass, "There is no registered component for the tag %s", element.type),
new genericComponentClass(element); new genericComponentClass(element);
} }
@ -1594,7 +1594,7 @@ function instantiateReactComponent(node, shouldHaveDebugID) {
var info = ""; var info = "";
info += getDeclarationErrorAddendum(element._owner), invariant(!1, "Element type is invalid: expected a string (for built-in components) " + "or a class/function (for composite components) but got: %s.%s", null == type ? type : typeof type, info); info += getDeclarationErrorAddendum(element._owner), invariant(!1, "Element type is invalid: expected a string (for built-in components) " + "or a class/function (for composite components) but got: %s.%s", null == type ? type : typeof type, info);
} }
"string" == typeof element.type ? instance = ReactHostComponent_1.createInternalComponent(element) : isInternalComponentType(element.type) ? (instance = new element.type(element), "string" == typeof element.type ? instance = ReactHostComponent_1.createInternalComponent(element) : isInternalComponentType(element.type) ? (instance = new element.type(element),
instance.getHostNode || (instance.getHostNode = instance.getNativeNode)) : instance = new ReactCompositeComponentWrapper(element); instance.getHostNode || (instance.getHostNode = instance.getNativeNode)) : instance = new ReactCompositeComponentWrapper(element);
} else "string" == typeof node || "number" == typeof node ? instance = ReactHostComponent_1.createInstanceForText(node) : invariant(!1, "Encountered invalid React node of type %s", typeof node); } else "string" == typeof node || "number" == typeof node ? instance = ReactHostComponent_1.createInstanceForText(node) : invariant(!1, "Encountered invalid React node of type %s", typeof node);
return instance._mountIndex = 0, instance._mountImage = null, instance; return instance._mountIndex = 0, instance._mountImage = null, instance;
@ -1619,7 +1619,7 @@ function findNodeHandle(componentOrHandle) {
if (null == componentOrHandle) return null; if (null == componentOrHandle) return null;
if ("number" == typeof componentOrHandle) return componentOrHandle; if ("number" == typeof componentOrHandle) return componentOrHandle;
var component = componentOrHandle, internalInstance = ReactInstanceMap_1.get(component); var component = componentOrHandle, internalInstance = ReactInstanceMap_1.get(component);
return internalInstance ? injectedFindNode(internalInstance) : component || (invariant("object" == typeof component && ("_rootNodeID" in component || "_nativeTag" in component) || null != component.render && "function" == typeof component.render, "findNodeHandle(...): Argument is not a component " + "(type: %s, keys: %s)", typeof component, Object.keys(component)), return internalInstance ? injectedFindNode(internalInstance) : component || (invariant("object" == typeof component && ("_rootNodeID" in component || "_nativeTag" in component) || null != component.render && "function" == typeof component.render, "findNodeHandle(...): Argument is not a component " + "(type: %s, keys: %s)", typeof component, Object.keys(component)),
void invariant(!1, "findNodeHandle(...): Unable to find node handle for unmounted " + "component.")); void invariant(!1, "findNodeHandle(...): Unable to find node handle for unmounted " + "component."));
} }
@ -1636,7 +1636,7 @@ function mountComponentIntoNode(componentInstance, containerTag, transaction) {
function batchedMountComponentIntoNode(componentInstance, containerTag) { function batchedMountComponentIntoNode(componentInstance, containerTag) {
var transaction = ReactUpdates_1.ReactReconcileTransaction.getPooled(); var transaction = ReactUpdates_1.ReactReconcileTransaction.getPooled();
transaction.perform(mountComponentIntoNode, null, componentInstance, containerTag, transaction), transaction.perform(mountComponentIntoNode, null, componentInstance, containerTag, transaction),
ReactUpdates_1.ReactReconcileTransaction.release(transaction); ReactUpdates_1.ReactReconcileTransaction.release(transaction);
} }
@ -1649,12 +1649,12 @@ var ReactNativeMount = {
}), topRootNodeID = containerTag, prevComponent = ReactNativeMount._instancesByContainerID[topRootNodeID]; }), topRootNodeID = containerTag, prevComponent = ReactNativeMount._instancesByContainerID[topRootNodeID];
if (prevComponent) { if (prevComponent) {
var prevWrappedElement = prevComponent._currentElement, prevElement = prevWrappedElement.props.child; var prevWrappedElement = prevComponent._currentElement, prevElement = prevWrappedElement.props.child;
if (shouldUpdateReactComponent_1(prevElement, nextElement)) return ReactUpdateQueue_1.enqueueElementInternal(prevComponent, nextWrappedElement, emptyObject), if (shouldUpdateReactComponent_1(prevElement, nextElement)) return ReactUpdateQueue_1.enqueueElementInternal(prevComponent, nextWrappedElement, emptyObject),
callback && ReactUpdateQueue_1.enqueueCallbackInternal(prevComponent, callback), callback && ReactUpdateQueue_1.enqueueCallbackInternal(prevComponent, callback),
prevComponent; prevComponent;
ReactNativeMount.unmountComponentAtNode(containerTag); ReactNativeMount.unmountComponentAtNode(containerTag);
} }
if (!ReactNativeTagHandles_1.reactTagIsNativeTopRootID(containerTag)) return console.error("You cannot render into anything but a top root"), if (!ReactNativeTagHandles_1.reactTagIsNativeTopRootID(containerTag)) return console.error("You cannot render into anything but a top root"),
null; null;
ReactNativeTagHandles_1.assertRootTag(containerTag); ReactNativeTagHandles_1.assertRootTag(containerTag);
var instance = instantiateReactComponent_1(nextWrappedElement, !1); var instance = instantiateReactComponent_1(nextWrappedElement, !1);
@ -1664,7 +1664,7 @@ var ReactNativeMount = {
nonNullCallback.call(instance._renderedComponent.getPublicInstance()); nonNullCallback.call(instance._renderedComponent.getPublicInstance());
} ]; } ];
} }
return ReactUpdates_1.batchedUpdates(batchedMountComponentIntoNode, instance, containerTag), return ReactUpdates_1.batchedUpdates(batchedMountComponentIntoNode, instance, containerTag),
instance._renderedComponent.getPublicInstance(); instance._renderedComponent.getPublicInstance();
}, },
_mountImageIntoNode: function(mountImage, containerID) { _mountImageIntoNode: function(mountImage, containerID) {
@ -1675,10 +1675,10 @@ var ReactNativeMount = {
ReactNativeMount.unmountComponentAtNode(containerTag), UIManager.removeRootView(containerTag); ReactNativeMount.unmountComponentAtNode(containerTag), UIManager.removeRootView(containerTag);
}, },
unmountComponentAtNode: function(containerTag) { unmountComponentAtNode: function(containerTag) {
if (!ReactNativeTagHandles_1.reactTagIsNativeTopRootID(containerTag)) return console.error("You cannot render into anything but a top root"), if (!ReactNativeTagHandles_1.reactTagIsNativeTopRootID(containerTag)) return console.error("You cannot render into anything but a top root"),
!1; !1;
var instance = ReactNativeMount._instancesByContainerID[containerTag]; var instance = ReactNativeMount._instancesByContainerID[containerTag];
return !!instance && (ReactNativeMount.unmountComponentFromNode(instance, containerTag), return !!instance && (ReactNativeMount.unmountComponentFromNode(instance, containerTag),
delete ReactNativeMount._instancesByContainerID[containerTag], !0); delete ReactNativeMount._instancesByContainerID[containerTag], !0);
}, },
unmountComponentFromNode: function(instance, containerID) { unmountComponentFromNode: function(instance, containerID) {
@ -1714,7 +1714,7 @@ var transaction = new ReactDefaultBatchingStrategyTransaction(), ReactDefaultBat
if (childrenUpdates.length) { if (childrenUpdates.length) {
for (var moveFromIndices, moveToIndices, addChildTags, addAtIndices, removeAtIndices, containerTag = ReactNativeComponentTree_1.getNodeFromInstance(inst), i = 0; i < childrenUpdates.length; i++) { for (var moveFromIndices, moveToIndices, addChildTags, addAtIndices, removeAtIndices, containerTag = ReactNativeComponentTree_1.getNodeFromInstance(inst), i = 0; i < childrenUpdates.length; i++) {
var update = childrenUpdates[i]; var update = childrenUpdates[i];
if ("MOVE_EXISTING" === update.type) (moveFromIndices || (moveFromIndices = [])).push(update.fromIndex), if ("MOVE_EXISTING" === update.type) (moveFromIndices || (moveFromIndices = [])).push(update.fromIndex),
(moveToIndices || (moveToIndices = [])).push(update.toIndex); else if ("REMOVE_NODE" === update.type) (removeAtIndices || (removeAtIndices = [])).push(update.fromIndex); else if ("INSERT_MARKUP" === update.type) { (moveToIndices || (moveToIndices = [])).push(update.toIndex); else if ("REMOVE_NODE" === update.type) (removeAtIndices || (removeAtIndices = [])).push(update.fromIndex); else if ("INSERT_MARKUP" === update.type) {
var mountImage = update.content, tag = mountImage; var mountImage = update.content, tag = mountImage;
(addAtIndices || (addAtIndices = [])).push(update.toIndex), (addChildTags || (addChildTags = [])).push(tag); (addAtIndices || (addAtIndices = [])).push(update.toIndex), (addChildTags || (addChildTags = [])).push(tag);
@ -1742,16 +1742,16 @@ function _classCallCheck(instance, Constructor) {
var CallbackQueue = function() { var CallbackQueue = function() {
function CallbackQueue(arg) { function CallbackQueue(arg) {
_classCallCheck(this, CallbackQueue), this._callbacks = null, this._contexts = null, _classCallCheck(this, CallbackQueue), this._callbacks = null, this._contexts = null,
this._arg = arg; this._arg = arg;
} }
return CallbackQueue.prototype.enqueue = function(callback, context) { return CallbackQueue.prototype.enqueue = function(callback, context) {
this._callbacks = this._callbacks || [], this._callbacks.push(callback), this._contexts = this._contexts || [], this._callbacks = this._callbacks || [], this._callbacks.push(callback), this._contexts = this._contexts || [],
this._contexts.push(context); this._contexts.push(context);
}, CallbackQueue.prototype.notifyAll = function() { }, CallbackQueue.prototype.notifyAll = function() {
var callbacks = this._callbacks, contexts = this._contexts, arg = this._arg; var callbacks = this._callbacks, contexts = this._contexts, arg = this._arg;
if (callbacks && contexts) { if (callbacks && contexts) {
invariant(callbacks.length === contexts.length, "Mismatched list of contexts in callback queue"), invariant(callbacks.length === contexts.length, "Mismatched list of contexts in callback queue"),
this._callbacks = null, this._contexts = null; this._callbacks = null, this._contexts = null;
for (var i = 0; i < callbacks.length; i++) validateCallback_1(callbacks[i]), callbacks[i].call(contexts[i], arg); for (var i = 0; i < callbacks.length; i++) validateCallback_1(callbacks[i]), callbacks[i].call(contexts[i], arg);
callbacks.length = 0, contexts.length = 0; callbacks.length = 0, contexts.length = 0;
@ -1799,7 +1799,7 @@ var Mixin = {
} }
}; };
Object.assign(ReactNativeReconcileTransaction.prototype, Transaction, ReactNativeReconcileTransaction, Mixin), Object.assign(ReactNativeReconcileTransaction.prototype, Transaction, ReactNativeReconcileTransaction, Mixin),
PooledClass_1.addPoolingTo(ReactNativeReconcileTransaction); PooledClass_1.addPoolingTo(ReactNativeReconcileTransaction);
var ReactNativeReconcileTransaction_1 = ReactNativeReconcileTransaction, ReactNativeComponentEnvironment = { var ReactNativeReconcileTransaction_1 = ReactNativeReconcileTransaction, ReactNativeComponentEnvironment = {
@ -1808,13 +1808,13 @@ var ReactNativeReconcileTransaction_1 = ReactNativeReconcileTransaction, ReactNa
clearNode: function() {}, clearNode: function() {},
ReactReconcileTransaction: ReactNativeReconcileTransaction_1 ReactReconcileTransaction: ReactNativeReconcileTransaction_1
}, ReactNativeComponentEnvironment_1 = ReactNativeComponentEnvironment, ReactNativeTextComponent = function(text) { }, ReactNativeComponentEnvironment_1 = ReactNativeComponentEnvironment, ReactNativeTextComponent = function(text) {
this._currentElement = text, this._stringText = "" + text, this._hostParent = null, this._currentElement = text, this._stringText = "" + text, this._hostParent = null,
this._rootNodeID = 0; this._rootNodeID = 0;
}; };
Object.assign(ReactNativeTextComponent.prototype, { Object.assign(ReactNativeTextComponent.prototype, {
mountComponent: function(transaction, hostParent, hostContainerInfo, context) { mountComponent: function(transaction, hostParent, hostContainerInfo, context) {
invariant(context.isInAParentText, 'RawText "%s" must be wrapped in an explicit <Text> component.', this._stringText), invariant(context.isInAParentText, 'RawText "%s" must be wrapped in an explicit <Text> component.', this._stringText),
this._hostParent = hostParent; this._hostParent = hostParent;
var tag = ReactNativeTagHandles_1.allocateTag(); var tag = ReactNativeTagHandles_1.allocateTag();
this._rootNodeID = tag; this._rootNodeID = tag;
@ -1836,7 +1836,7 @@ Object.assign(ReactNativeTextComponent.prototype, {
} }
}, },
unmountComponent: function() { unmountComponent: function() {
ReactNativeComponentTree_1.uncacheNode(this), this._currentElement = null, this._stringText = null, ReactNativeComponentTree_1.uncacheNode(this), this._currentElement = null, this._stringText = null,
this._rootNodeID = 0; this._rootNodeID = 0;
} }
}); });
@ -1854,7 +1854,7 @@ Object.assign(ReactSimpleEmptyComponent.prototype, {
return ReactReconciler_1.getHostNode(this._renderedComponent); return ReactReconciler_1.getHostNode(this._renderedComponent);
}, },
unmountComponent: function(safely, skipLifecycle) { unmountComponent: function(safely, skipLifecycle) {
ReactReconciler_1.unmountComponent(this._renderedComponent, safely, skipLifecycle), ReactReconciler_1.unmountComponent(this._renderedComponent, safely, skipLifecycle),
this._renderedComponent = null; this._renderedComponent = null;
} }
}); });
@ -1862,9 +1862,9 @@ Object.assign(ReactSimpleEmptyComponent.prototype, {
var ReactSimpleEmptyComponent_1 = ReactSimpleEmptyComponent; var ReactSimpleEmptyComponent_1 = ReactSimpleEmptyComponent;
function inject$1() { function inject$1() {
ReactGenericBatching_1.injection.injectStackBatchedUpdates(ReactUpdates_1.batchedUpdates), ReactGenericBatching_1.injection.injectStackBatchedUpdates(ReactUpdates_1.batchedUpdates),
ReactUpdates_1.injection.injectReconcileTransaction(ReactNativeComponentEnvironment_1.ReactReconcileTransaction), ReactUpdates_1.injection.injectReconcileTransaction(ReactNativeComponentEnvironment_1.ReactReconcileTransaction),
ReactUpdates_1.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy_1), ReactUpdates_1.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy_1),
ReactComponentEnvironment_1.injection.injectEnvironment(ReactNativeComponentEnvironment_1); ReactComponentEnvironment_1.injection.injectEnvironment(ReactNativeComponentEnvironment_1);
var EmptyComponent = function(instantiate) { var EmptyComponent = function(instantiate) {
var View = require("View"); var View = require("View");
@ -1875,10 +1875,10 @@ function inject$1() {
} }
}), instantiate); }), instantiate);
}; };
ReactEmptyComponent_1.injection.injectEmptyComponentFactory(EmptyComponent), ReactHostComponent_1.injection.injectTextComponentClass(ReactNativeTextComponent_1), ReactEmptyComponent_1.injection.injectEmptyComponentFactory(EmptyComponent), ReactHostComponent_1.injection.injectTextComponentClass(ReactNativeTextComponent_1),
ReactHostComponent_1.injection.injectGenericComponentClass(function(tag) { ReactHostComponent_1.injection.injectGenericComponentClass(function(tag) {
var info = ""; var info = "";
"string" == typeof tag && /^[a-z]/.test(tag) && (info += " Each component name should start with an uppercase letter."), "string" == typeof tag && /^[a-z]/.test(tag) && (info += " Each component name should start with an uppercase letter."),
invariant(!1, "Expected a component class, got %s.%s", tag, info); invariant(!1, "Expected a component class, got %s.%s", tag, info);
}); });
} }
@ -1912,7 +1912,7 @@ var objects = {}, uniqueID = 1, emptyObject$3 = {}, ReactNativePropRegistry = fu
}, ReactNativePropRegistry.getByID = function(id) { }, ReactNativePropRegistry.getByID = function(id) {
if (!id) return emptyObject$3; if (!id) return emptyObject$3;
var object = objects[id]; var object = objects[id];
return object || (console.warn("Invalid style with id `" + id + "`. Skipping ..."), return object || (console.warn("Invalid style with id `" + id + "`. Skipping ..."),
emptyObject$3); emptyObject$3);
}, ReactNativePropRegistry; }, ReactNativePropRegistry;
}(), ReactNativePropRegistry_1 = ReactNativePropRegistry, emptyObject$2 = {}, removedKeys = null, removedKeyCount = 0; }(), ReactNativePropRegistry_1 = ReactNativePropRegistry, emptyObject$2 = {}, removedKeys = null, removedKeyCount = 0;
@ -1933,7 +1933,7 @@ function restoreDeletedValuesInNestedArray(updatePayload, node, validAttributes)
if (void 0 !== nextProp) { if (void 0 !== nextProp) {
var attributeConfig = validAttributes[propKey]; var attributeConfig = validAttributes[propKey];
if (attributeConfig) { if (attributeConfig) {
if ("function" == typeof nextProp && (nextProp = !0), void 0 === nextProp && (nextProp = null), if ("function" == typeof nextProp && (nextProp = !0), void 0 === nextProp && (nextProp = null),
"object" != typeof attributeConfig) updatePayload[propKey] = nextProp; else if ("function" == typeof attributeConfig.diff || "function" == typeof attributeConfig.process) { "object" != typeof attributeConfig) updatePayload[propKey] = nextProp; else if ("function" == typeof attributeConfig.diff || "function" == typeof attributeConfig.process) {
var nextValue = "function" == typeof attributeConfig.process ? attributeConfig.process(nextProp) : nextProp; var nextValue = "function" == typeof attributeConfig.process ? attributeConfig.process(nextProp) : nextProp;
updatePayload[propKey] = nextValue; updatePayload[propKey] = nextValue;
@ -1973,10 +1973,10 @@ function clearNestedProperty(updatePayload, prevProp, validAttributes) {
function diffProperties(updatePayload, prevProps, nextProps, validAttributes) { function diffProperties(updatePayload, prevProps, nextProps, validAttributes) {
var attributeConfig, nextProp, prevProp; var attributeConfig, nextProp, prevProp;
for (var propKey in nextProps) if (attributeConfig = validAttributes[propKey]) if (prevProp = prevProps[propKey], for (var propKey in nextProps) if (attributeConfig = validAttributes[propKey]) if (prevProp = prevProps[propKey],
nextProp = nextProps[propKey], "function" == typeof nextProp && (nextProp = !0, nextProp = nextProps[propKey], "function" == typeof nextProp && (nextProp = !0,
"function" == typeof prevProp && (prevProp = !0)), void 0 === nextProp && (nextProp = null, "function" == typeof prevProp && (prevProp = !0)), void 0 === nextProp && (nextProp = null,
void 0 === prevProp && (prevProp = null)), removedKeys && (removedKeys[propKey] = !1), void 0 === prevProp && (prevProp = null)), removedKeys && (removedKeys[propKey] = !1),
updatePayload && void 0 !== updatePayload[propKey]) { updatePayload && void 0 !== updatePayload[propKey]) {
if ("object" != typeof attributeConfig) updatePayload[propKey] = nextProp; else if ("function" == typeof attributeConfig.diff || "function" == typeof attributeConfig.process) { if ("object" != typeof attributeConfig) updatePayload[propKey] = nextProp; else if ("function" == typeof attributeConfig.diff || "function" == typeof attributeConfig.process) {
var nextValue = "function" == typeof attributeConfig.process ? attributeConfig.process(nextProp) : nextProp; var nextValue = "function" == typeof attributeConfig.process ? attributeConfig.process(nextProp) : nextProp;
@ -1984,13 +1984,13 @@ function diffProperties(updatePayload, prevProps, nextProps, validAttributes) {
} }
} else if (prevProp !== nextProp) if ("object" != typeof attributeConfig) defaultDiffer(prevProp, nextProp) && ((updatePayload || (updatePayload = {}))[propKey] = nextProp); else if ("function" == typeof attributeConfig.diff || "function" == typeof attributeConfig.process) { } else if (prevProp !== nextProp) if ("object" != typeof attributeConfig) defaultDiffer(prevProp, nextProp) && ((updatePayload || (updatePayload = {}))[propKey] = nextProp); else if ("function" == typeof attributeConfig.diff || "function" == typeof attributeConfig.process) {
var shouldUpdate = void 0 === prevProp || ("function" == typeof attributeConfig.diff ? attributeConfig.diff(prevProp, nextProp) : defaultDiffer(prevProp, nextProp)); var shouldUpdate = void 0 === prevProp || ("function" == typeof attributeConfig.diff ? attributeConfig.diff(prevProp, nextProp) : defaultDiffer(prevProp, nextProp));
shouldUpdate && (nextValue = "function" == typeof attributeConfig.process ? attributeConfig.process(nextProp) : nextProp, shouldUpdate && (nextValue = "function" == typeof attributeConfig.process ? attributeConfig.process(nextProp) : nextProp,
(updatePayload || (updatePayload = {}))[propKey] = nextValue); (updatePayload || (updatePayload = {}))[propKey] = nextValue);
} else removedKeys = null, removedKeyCount = 0, updatePayload = diffNestedProperty(updatePayload, prevProp, nextProp, attributeConfig), } else removedKeys = null, removedKeyCount = 0, updatePayload = diffNestedProperty(updatePayload, prevProp, nextProp, attributeConfig),
removedKeyCount > 0 && updatePayload && (restoreDeletedValuesInNestedArray(updatePayload, nextProp, attributeConfig), removedKeyCount > 0 && updatePayload && (restoreDeletedValuesInNestedArray(updatePayload, nextProp, attributeConfig),
removedKeys = null); removedKeys = null);
for (propKey in prevProps) void 0 === nextProps[propKey] && (attributeConfig = validAttributes[propKey]) && (updatePayload && void 0 !== updatePayload[propKey] || void 0 !== (prevProp = prevProps[propKey]) && ("object" != typeof attributeConfig || "function" == typeof attributeConfig.diff || "function" == typeof attributeConfig.process ? ((updatePayload || (updatePayload = {}))[propKey] = null, for (propKey in prevProps) void 0 === nextProps[propKey] && (attributeConfig = validAttributes[propKey]) && (updatePayload && void 0 !== updatePayload[propKey] || void 0 !== (prevProp = prevProps[propKey]) && ("object" != typeof attributeConfig || "function" == typeof attributeConfig.diff || "function" == typeof attributeConfig.process ? ((updatePayload || (updatePayload = {}))[propKey] = null,
removedKeys || (removedKeys = {}), removedKeys[propKey] || (removedKeys[propKey] = !0, removedKeys || (removedKeys = {}), removedKeys[propKey] || (removedKeys[propKey] = !0,
removedKeyCount++)) : updatePayload = clearNestedProperty(updatePayload, prevProp, attributeConfig))); removedKeyCount++)) : updatePayload = clearNestedProperty(updatePayload, prevProp, attributeConfig)));
return updatePayload; return updatePayload;
} }
@ -2026,7 +2026,7 @@ function mountSafeCallback$1(context, callback) {
function throwOnStylesProp$1(component, props) { function throwOnStylesProp$1(component, props) {
if (void 0 !== props.styles) { if (void 0 !== props.styles) {
var owner = component._owner || null, name = component.constructor.displayName, msg = "`styles` is not a supported property of `" + name + "`, did " + "you mean `style` (singular)?"; var owner = component._owner || null, name = component.constructor.displayName, msg = "`styles` is not a supported property of `" + name + "`, did " + "you mean `style` (singular)?";
throw owner && owner.constructor && owner.constructor.displayName && (msg += "\n\nCheck the `" + owner.constructor.displayName + "` parent " + " component."), throw owner && owner.constructor && owner.constructor.displayName && (msg += "\n\nCheck the `" + owner.constructor.displayName + "` parent " + " component."),
new Error(msg); new Error(msg);
} }
} }
@ -2091,12 +2091,12 @@ injectedSetNativeProps = ReactNativeFeatureFlags$1.useFiber ? setNativePropsFibe
var NativeMethodsMixin_1 = NativeMethodsMixin, TouchHistoryMath = { var NativeMethodsMixin_1 = NativeMethodsMixin, TouchHistoryMath = {
centroidDimension: function(touchHistory, touchesChangedAfter, isXAxis, ofCurrent) { centroidDimension: function(touchHistory, touchesChangedAfter, isXAxis, ofCurrent) {
var touchBank = touchHistory.touchBank, total = 0, count = 0, oneTouchData = 1 === touchHistory.numberActiveTouches ? touchHistory.touchBank[touchHistory.indexOfSingleActiveTouch] : null; var touchBank = touchHistory.touchBank, total = 0, count = 0, oneTouchData = 1 === touchHistory.numberActiveTouches ? touchHistory.touchBank[touchHistory.indexOfSingleActiveTouch] : null;
if (null !== oneTouchData) oneTouchData.touchActive && oneTouchData.currentTimeStamp > touchesChangedAfter && (total += ofCurrent && isXAxis ? oneTouchData.currentPageX : ofCurrent && !isXAxis ? oneTouchData.currentPageY : !ofCurrent && isXAxis ? oneTouchData.previousPageX : oneTouchData.previousPageY, if (null !== oneTouchData) oneTouchData.touchActive && oneTouchData.currentTimeStamp > touchesChangedAfter && (total += ofCurrent && isXAxis ? oneTouchData.currentPageX : ofCurrent && !isXAxis ? oneTouchData.currentPageY : !ofCurrent && isXAxis ? oneTouchData.previousPageX : oneTouchData.previousPageY,
count = 1); else for (var i = 0; i < touchBank.length; i++) { count = 1); else for (var i = 0; i < touchBank.length; i++) {
var touchTrack = touchBank[i]; var touchTrack = touchBank[i];
if (null !== touchTrack && void 0 !== touchTrack && touchTrack.touchActive && touchTrack.currentTimeStamp >= touchesChangedAfter) { if (null !== touchTrack && void 0 !== touchTrack && touchTrack.touchActive && touchTrack.currentTimeStamp >= touchesChangedAfter) {
var toAdd; var toAdd;
toAdd = ofCurrent && isXAxis ? touchTrack.currentPageX : ofCurrent && !isXAxis ? touchTrack.currentPageY : !ofCurrent && isXAxis ? touchTrack.previousPageX : touchTrack.previousPageY, toAdd = ofCurrent && isXAxis ? touchTrack.currentPageX : ofCurrent && !isXAxis ? touchTrack.currentPageY : !ofCurrent && isXAxis ? touchTrack.previousPageX : touchTrack.previousPageY,
total += toAdd, count++; total += toAdd, count++;
} }
} }
@ -2161,13 +2161,13 @@ function getComponentKey(component, index) {
function traverseStackChildrenImpl(children, nameSoFar, callback, traverseContext) { function traverseStackChildrenImpl(children, nameSoFar, callback, traverseContext) {
var type = typeof children; var type = typeof children;
if ("undefined" !== type && "boolean" !== type || (children = null), null === children || "string" === type || "number" === type || "object" === type && children.$$typeof === ReactElementSymbol) return callback(traverseContext, children, "" === nameSoFar ? SEPARATOR + getComponentKey(children, 0) : nameSoFar), if ("undefined" !== type && "boolean" !== type || (children = null), null === children || "string" === type || "number" === type || "object" === type && children.$$typeof === ReactElementSymbol) return callback(traverseContext, children, "" === nameSoFar ? SEPARATOR + getComponentKey(children, 0) : nameSoFar),
1; 1;
var child, nextName, subtreeCount = 0, nextNamePrefix = "" === nameSoFar ? SEPARATOR : nameSoFar + SUBSEPARATOR; var child, nextName, subtreeCount = 0, nextNamePrefix = "" === nameSoFar ? SEPARATOR : nameSoFar + SUBSEPARATOR;
if (Array.isArray(children)) for (var i = 0; i < children.length; i++) child = children[i], if (Array.isArray(children)) for (var i = 0; i < children.length; i++) child = children[i],
nextName = nextNamePrefix + getComponentKey(child, i), subtreeCount += traverseStackChildrenImpl(child, nextName, callback, traverseContext); else { nextName = nextNamePrefix + getComponentKey(child, i), subtreeCount += traverseStackChildrenImpl(child, nextName, callback, traverseContext); else {
var iteratorFn = getIteratorFn_1(children); var iteratorFn = getIteratorFn_1(children);
if (iteratorFn) for (var step, iterator = iteratorFn.call(children), ii = 0; !(step = iterator.next()).done; ) child = step.value, if (iteratorFn) for (var step, iterator = iteratorFn.call(children), ii = 0; !(step = iterator.next()).done; ) child = step.value,
nextName = nextNamePrefix + getComponentKey(child, ii++), subtreeCount += traverseStackChildrenImpl(child, nextName, callback, traverseContext); else if ("object" === type) { nextName = nextNamePrefix + getComponentKey(child, ii++), subtreeCount += traverseStackChildrenImpl(child, nextName, callback, traverseContext); else if ("object" === type) {
var addendum = "", childrenString = "" + children; var addendum = "", childrenString = "" + children;
invariant(!1, "Objects are not valid as a React child (found: %s).%s", "[object Object]" === childrenString ? "object with keys {" + Object.keys(children).join(", ") + "}" : childrenString, addendum); invariant(!1, "Objects are not valid as a React child (found: %s).%s", "[object Object]" === childrenString ? "object with keys {" + Object.keys(children).join(", ") + "}" : childrenString, addendum);
@ -2193,7 +2193,7 @@ var ReactChildReconciler = {
instantiateChildren: function(nestedChildNodes, transaction, context, selfDebugID) { instantiateChildren: function(nestedChildNodes, transaction, context, selfDebugID) {
if (null == nestedChildNodes) return null; if (null == nestedChildNodes) return null;
var childInstances = {}; var childInstances = {};
return traverseStackChildren_1(nestedChildNodes, instantiateChild, childInstances), return traverseStackChildren_1(nestedChildNodes, instantiateChild, childInstances),
childInstances; childInstances;
}, },
updateChildren: function(prevChildren, nextChildren, mountImages, removedNodes, transaction, hostParent, hostContainerInfo, context, selfDebugID) { updateChildren: function(prevChildren, nextChildren, mountImages, removedNodes, transaction, hostParent, hostContainerInfo, context, selfDebugID) {
@ -2202,18 +2202,18 @@ var ReactChildReconciler = {
for (name in nextChildren) if (nextChildren.hasOwnProperty(name)) { for (name in nextChildren) if (nextChildren.hasOwnProperty(name)) {
prevChild = prevChildren && prevChildren[name]; prevChild = prevChildren && prevChildren[name];
var prevElement = prevChild && prevChild._currentElement, nextElement = nextChildren[name]; var prevElement = prevChild && prevChild._currentElement, nextElement = nextChildren[name];
if (null != prevChild && shouldUpdateReactComponent_1(prevElement, nextElement)) ReactReconciler_1.receiveComponent(prevChild, nextElement, transaction, context), if (null != prevChild && shouldUpdateReactComponent_1(prevElement, nextElement)) ReactReconciler_1.receiveComponent(prevChild, nextElement, transaction, context),
nextChildren[name] = prevChild; else { nextChildren[name] = prevChild; else {
!ReactFeatureFlags_1.prepareNewChildrenBeforeUnmountInStack && prevChild && (removedNodes[name] = ReactReconciler_1.getHostNode(prevChild), !ReactFeatureFlags_1.prepareNewChildrenBeforeUnmountInStack && prevChild && (removedNodes[name] = ReactReconciler_1.getHostNode(prevChild),
ReactReconciler_1.unmountComponent(prevChild, !1, !1)); ReactReconciler_1.unmountComponent(prevChild, !1, !1));
var nextChildInstance = instantiateReactComponent_1(nextElement, !0); var nextChildInstance = instantiateReactComponent_1(nextElement, !0);
nextChildren[name] = nextChildInstance; nextChildren[name] = nextChildInstance;
var nextChildMountImage = ReactReconciler_1.mountComponent(nextChildInstance, transaction, hostParent, hostContainerInfo, context, selfDebugID); var nextChildMountImage = ReactReconciler_1.mountComponent(nextChildInstance, transaction, hostParent, hostContainerInfo, context, selfDebugID);
mountImages.push(nextChildMountImage), ReactFeatureFlags_1.prepareNewChildrenBeforeUnmountInStack && prevChild && (removedNodes[name] = ReactReconciler_1.getHostNode(prevChild), mountImages.push(nextChildMountImage), ReactFeatureFlags_1.prepareNewChildrenBeforeUnmountInStack && prevChild && (removedNodes[name] = ReactReconciler_1.getHostNode(prevChild),
ReactReconciler_1.unmountComponent(prevChild, !1, !1)); ReactReconciler_1.unmountComponent(prevChild, !1, !1));
} }
} }
for (name in prevChildren) !prevChildren.hasOwnProperty(name) || nextChildren && nextChildren.hasOwnProperty(name) || (prevChild = prevChildren[name], for (name in prevChildren) !prevChildren.hasOwnProperty(name) || nextChildren && nextChildren.hasOwnProperty(name) || (prevChild = prevChildren[name],
removedNodes[name] = ReactReconciler_1.getHostNode(prevChild), ReactReconciler_1.unmountComponent(prevChild, !1, !1)); removedNodes[name] = ReactReconciler_1.getHostNode(prevChild), ReactReconciler_1.unmountComponent(prevChild, !1, !1));
} }
}, },
@ -2237,7 +2237,7 @@ function flattenSingleChildIntoContext(traverseContext, child, name, selfDebugID
function flattenStackChildren(children, selfDebugID) { function flattenStackChildren(children, selfDebugID) {
if (null == children) return children; if (null == children) return children;
var result = {}; var result = {};
return traverseStackChildren_1(children, flattenSingleChildIntoContext, result), return traverseStackChildren_1(children, flattenSingleChildIntoContext, result),
result; result;
} }
@ -2312,8 +2312,8 @@ var ReactMultiChild = {
}, },
_reconcilerUpdateChildren: function(prevChildren, nextNestedChildrenElements, mountImages, removedNodes, transaction, context) { _reconcilerUpdateChildren: function(prevChildren, nextNestedChildrenElements, mountImages, removedNodes, transaction, context) {
var nextChildren, selfDebugID = 0; var nextChildren, selfDebugID = 0;
return nextChildren = flattenStackChildren_1(nextNestedChildrenElements, selfDebugID), return nextChildren = flattenStackChildren_1(nextNestedChildrenElements, selfDebugID),
ReactChildReconciler_1.updateChildren(prevChildren, nextChildren, mountImages, removedNodes, transaction, this, this._hostContainerInfo, context, selfDebugID), ReactChildReconciler_1.updateChildren(prevChildren, nextChildren, mountImages, removedNodes, transaction, this, this._hostContainerInfo, context, selfDebugID),
nextChildren; nextChildren;
}, },
mountChildren: function(nestedChildren, transaction, context) { mountChildren: function(nestedChildren, transaction, context) {
@ -2347,9 +2347,9 @@ var ReactMultiChild = {
var name, updates = null, nextIndex = 0, lastIndex = 0, nextMountIndex = 0, lastPlacedNode = null; var name, updates = null, nextIndex = 0, lastIndex = 0, nextMountIndex = 0, lastPlacedNode = null;
for (name in nextChildren) if (nextChildren.hasOwnProperty(name)) { for (name in nextChildren) if (nextChildren.hasOwnProperty(name)) {
var prevChild = prevChildren && prevChildren[name], nextChild = nextChildren[name]; var prevChild = prevChildren && prevChildren[name], nextChild = nextChildren[name];
prevChild === nextChild ? (updates = enqueue(updates, this.moveChild(prevChild, lastPlacedNode, nextIndex, lastIndex)), prevChild === nextChild ? (updates = enqueue(updates, this.moveChild(prevChild, lastPlacedNode, nextIndex, lastIndex)),
lastIndex = Math.max(prevChild._mountIndex, lastIndex), prevChild._mountIndex = nextIndex) : (prevChild && (lastIndex = Math.max(prevChild._mountIndex, lastIndex)), lastIndex = Math.max(prevChild._mountIndex, lastIndex), prevChild._mountIndex = nextIndex) : (prevChild && (lastIndex = Math.max(prevChild._mountIndex, lastIndex)),
updates = enqueue(updates, this._mountChildAtIndex(nextChild, mountImages[nextMountIndex], lastPlacedNode, nextIndex, transaction, context)), updates = enqueue(updates, this._mountChildAtIndex(nextChild, mountImages[nextMountIndex], lastPlacedNode, nextIndex, transaction, context)),
nextMountIndex++), nextIndex++, lastPlacedNode = ReactReconciler_1.getHostNode(nextChild); nextMountIndex++), nextIndex++, lastPlacedNode = ReactReconciler_1.getHostNode(nextChild);
} }
for (name in removedNodes) removedNodes.hasOwnProperty(name) && (updates = enqueue(updates, this._unmountChild(prevChildren[name], removedNodes[name]))); for (name in removedNodes) removedNodes.hasOwnProperty(name) && (updates = enqueue(updates, this._unmountChild(prevChildren[name], removedNodes[name])));
@ -2358,7 +2358,7 @@ var ReactMultiChild = {
}, },
unmountChildren: function(safely, skipLifecycle) { unmountChildren: function(safely, skipLifecycle) {
var renderedChildren = this._renderedChildren; var renderedChildren = this._renderedChildren;
ReactChildReconciler_1.unmountChildren(renderedChildren, safely, skipLifecycle), ReactChildReconciler_1.unmountChildren(renderedChildren, safely, skipLifecycle),
this._renderedChildren = null; this._renderedChildren = null;
}, },
moveChild: function(child, afterNode, toIndex, lastIndex) { moveChild: function(child, afterNode, toIndex, lastIndex) {
@ -2386,7 +2386,7 @@ ReactNativeBaseComponent.Mixin = {
return this; return this;
}, },
unmountComponent: function(safely, skipLifecycle) { unmountComponent: function(safely, skipLifecycle) {
ReactNativeComponentTree_1.uncacheNode(this), this.unmountChildren(safely, skipLifecycle), ReactNativeComponentTree_1.uncacheNode(this), this.unmountChildren(safely, skipLifecycle),
this._rootNodeID = 0; this._rootNodeID = 0;
}, },
initializeChildren: function(children, containerTag, transaction, context) { initializeChildren: function(children, containerTag, transaction, context) {
@ -2403,9 +2403,12 @@ ReactNativeBaseComponent.Mixin = {
var prevElement = this._currentElement; var prevElement = this._currentElement;
this._currentElement = nextElement; this._currentElement = nextElement;
var updatePayload = ReactNativeAttributePayload_1.diff(prevElement.props, nextElement.props, this.viewConfig.validAttributes); var updatePayload = ReactNativeAttributePayload_1.diff(prevElement.props, nextElement.props, this.viewConfig.validAttributes);
updatePayload && UIManager.updateView(this._rootNodeID, this.viewConfig.uiViewClassName, updatePayload), updatePayload && UIManager.updateView(this._rootNodeID, this.viewConfig.uiViewClassName, updatePayload),
this.updateChildren(nextElement.props.children, transaction, context); this.updateChildren(nextElement.props.children, transaction, context);
}, },
getName: function() {
return this.constructor.displayName || this.constructor.name || "Unknown";
},
getHostNode: function() { getHostNode: function() {
return this._rootNodeID; return this._rootNodeID;
}, },
@ -2413,24 +2416,24 @@ ReactNativeBaseComponent.Mixin = {
var tag = ReactNativeTagHandles_1.allocateTag(); var tag = ReactNativeTagHandles_1.allocateTag();
this._rootNodeID = tag, this._hostParent = hostParent, this._hostContainerInfo = hostContainerInfo; this._rootNodeID = tag, this._hostParent = hostParent, this._hostContainerInfo = hostContainerInfo;
var updatePayload = ReactNativeAttributePayload_1.create(this._currentElement.props, this.viewConfig.validAttributes), nativeTopRootTag = hostContainerInfo._tag; var updatePayload = ReactNativeAttributePayload_1.create(this._currentElement.props, this.viewConfig.validAttributes), nativeTopRootTag = hostContainerInfo._tag;
return UIManager.createView(tag, this.viewConfig.uiViewClassName, nativeTopRootTag, updatePayload), return UIManager.createView(tag, this.viewConfig.uiViewClassName, nativeTopRootTag, updatePayload),
ReactNativeComponentTree_1.precacheNode(this, tag), this.initializeChildren(this._currentElement.props.children, tag, transaction, context), ReactNativeComponentTree_1.precacheNode(this, tag), this.initializeChildren(this._currentElement.props.children, tag, transaction, context),
tag; tag;
} }
}, Object.assign(ReactNativeBaseComponent.prototype, ReactMultiChild_1, ReactNativeBaseComponent.Mixin, NativeMethodsMixin_1); }, Object.assign(ReactNativeBaseComponent.prototype, ReactMultiChild_1, ReactNativeBaseComponent.Mixin, NativeMethodsMixin_1);
var ReactNativeBaseComponent_1 = ReactNativeBaseComponent, createReactNativeComponentClassStack = function(viewConfig) { var ReactNativeBaseComponent_1 = ReactNativeBaseComponent, createReactNativeComponentClassStack = function(viewConfig) {
var Constructor = function(element) { var Constructor = function(element) {
this._currentElement = element, this._topLevelWrapper = null, this._hostParent = null, this._currentElement = element, this._topLevelWrapper = null, this._hostParent = null,
this._hostContainerInfo = null, this._rootNodeID = 0, this._renderedChildren = null; this._hostContainerInfo = null, this._rootNodeID = 0, this._renderedChildren = null;
}; };
return Constructor.displayName = viewConfig.uiViewClassName, Constructor.viewConfig = viewConfig, return Constructor.displayName = viewConfig.uiViewClassName, Constructor.viewConfig = viewConfig,
Constructor.propTypes = viewConfig.propTypes, Constructor.prototype = new ReactNativeBaseComponent_1(viewConfig), Constructor.propTypes = viewConfig.propTypes, Constructor.prototype = new ReactNativeBaseComponent_1(viewConfig),
Constructor.prototype.constructor = Constructor, Constructor; Constructor.prototype.constructor = Constructor, Constructor;
}, createReactNativeComponentClassStack_1 = createReactNativeComponentClassStack, createReactNativeComponentClass = ReactNativeFeatureFlags$1.useFiber ? DevOnlyStubShim : createReactNativeComponentClassStack_1, findNumericNodeHandle$1 = ReactNativeFeatureFlags$1.useFiber ? DevOnlyStubShim : findNumericNodeHandleStack; }, createReactNativeComponentClassStack_1 = createReactNativeComponentClassStack, createReactNativeComponentClass = ReactNativeFeatureFlags$1.useFiber ? DevOnlyStubShim : createReactNativeComponentClassStack_1, findNumericNodeHandle$1 = ReactNativeFeatureFlags$1.useFiber ? DevOnlyStubShim : findNumericNodeHandleStack;
function takeSnapshot(view, options) { function takeSnapshot(view, options) {
return "number" != typeof view && "window" !== view && (view = findNumericNodeHandle$1(view) || "window"), return "number" != typeof view && "window" !== view && (view = findNumericNodeHandle$1(view) || "window"),
UIManager.__takeSnapshot(view, options); UIManager.__takeSnapshot(view, options);
} }