This just configures flow to be checked and fixes our existing Flow typed files. Possible enhancements: Export .js.flow declarations from the build. Unclear whether this will be a supported workflow in the future or not, so let's wait on that. We should fail builds and CI on Flow errors. Ideally we should lint for Flow style guides (like no space before colon).
71 lines
2.0 KiB
JavaScript
71 lines
2.0 KiB
JavaScript
/**
|
|
* 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 ReactNativeBridgeEventPlugin
|
|
* @flow
|
|
*/
|
|
'use strict';
|
|
|
|
var EventPropagators = require('EventPropagators');
|
|
var SyntheticEvent = require('SyntheticEvent');
|
|
var UIManager = require('UIManager');
|
|
|
|
var warning = require('warning');
|
|
|
|
var customBubblingEventTypes = UIManager.customBubblingEventTypes;
|
|
var customDirectEventTypes = UIManager.customDirectEventTypes;
|
|
|
|
var allTypesByEventName = {};
|
|
|
|
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
|
|
);
|
|
allTypesByEventName[directTypeName] = customDirectEventTypes[directTypeName];
|
|
}
|
|
|
|
var ReactNativeBridgeEventPlugin = {
|
|
|
|
eventTypes: { ...customBubblingEventTypes, ...customDirectEventTypes },
|
|
|
|
/**
|
|
* @see {EventPluginHub.extractEvents}
|
|
*/
|
|
extractEvents: function(
|
|
topLevelType: string,
|
|
targetInst: Object,
|
|
nativeEvent: Event,
|
|
nativeEventTarget: Object
|
|
): ?Object {
|
|
var bubbleDispatchConfig = customBubblingEventTypes[topLevelType];
|
|
var directDispatchConfig = customDirectEventTypes[topLevelType];
|
|
var event = SyntheticEvent.getPooled(
|
|
bubbleDispatchConfig || directDispatchConfig,
|
|
targetInst,
|
|
nativeEvent,
|
|
nativeEventTarget
|
|
);
|
|
if (bubbleDispatchConfig) {
|
|
EventPropagators.accumulateTwoPhaseDispatches(event);
|
|
} else if (directDispatchConfig) {
|
|
EventPropagators.accumulateDirectDispatches(event);
|
|
} else {
|
|
return null;
|
|
}
|
|
return event;
|
|
},
|
|
};
|
|
|
|
module.exports = ReactNativeBridgeEventPlugin;
|