mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
c954efa70f
Whenever we do this, Rollup needs to materialize this as an object. This causes it to also add the Babel compatibility property which is unnecessary bloat. However, since when we use these, we leak the object this often also deopts any compiler optimizations. If we really need an object we should export default an object. Currently there is an exception for DOMTopLevelEventTypes since listing out the imports is a PITA and it doesn't escape so it should get properly inlined. We should probably move to a different pattern to avoid this for consistency though.
65 lines
1.7 KiB
JavaScript
65 lines
1.7 KiB
JavaScript
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @flow
|
|
*/
|
|
|
|
import type {AnyNativeEvent} from 'events/PluginModuleType';
|
|
import {
|
|
accumulateTwoPhaseDispatches,
|
|
accumulateDirectDispatches,
|
|
} from 'events/EventPropagators';
|
|
import type {TopLevelType} from 'events/TopLevelEventTypes';
|
|
import {
|
|
customBubblingEventTypes,
|
|
customDirectEventTypes,
|
|
eventTypes,
|
|
} from 'ReactNativeViewConfigRegistry';
|
|
import SyntheticEvent from 'events/SyntheticEvent';
|
|
import invariant from 'shared/invariant';
|
|
|
|
const ReactNativeBridgeEventPlugin = {
|
|
eventTypes: eventTypes,
|
|
|
|
/**
|
|
* @see {EventPluginHub.extractEvents}
|
|
*/
|
|
extractEvents: function(
|
|
topLevelType: TopLevelType,
|
|
targetInst: null | Object,
|
|
nativeEvent: AnyNativeEvent,
|
|
nativeEventTarget: Object,
|
|
): ?Object {
|
|
if (targetInst == null) {
|
|
// Probably a node belonging to another renderer's tree.
|
|
return null;
|
|
}
|
|
const bubbleDispatchConfig = customBubblingEventTypes[topLevelType];
|
|
const directDispatchConfig = customDirectEventTypes[topLevelType];
|
|
invariant(
|
|
bubbleDispatchConfig || directDispatchConfig,
|
|
'Unsupported top level event type "%s" dispatched',
|
|
topLevelType,
|
|
);
|
|
const event = SyntheticEvent.getPooled(
|
|
bubbleDispatchConfig || directDispatchConfig,
|
|
targetInst,
|
|
nativeEvent,
|
|
nativeEventTarget,
|
|
);
|
|
if (bubbleDispatchConfig) {
|
|
accumulateTwoPhaseDispatches(event);
|
|
} else if (directDispatchConfig) {
|
|
accumulateDirectDispatches(event);
|
|
} else {
|
|
return null;
|
|
}
|
|
return event;
|
|
},
|
|
};
|
|
|
|
export default ReactNativeBridgeEventPlugin;
|