From abce30f771e07670b3efac6ffdcab1a7139556a9 Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Wed, 6 Sep 2017 15:34:02 -0700 Subject: [PATCH] React native event type fixes (#10627) * Added invariant check for native dispatching an unsupported event type This prevents a case of a silent failure when native dispatches an event that JavaScript does not know how to handle. * Added iOS direct event type 'onSnapshotReady' This is used for snapshot testing. --- src/renderers/native/ReactNativeBridgeEventPlugin.js | 6 ++++++ src/renderers/native/ReactNativeEventTypes.js | 3 +++ 2 files changed, 9 insertions(+) diff --git a/src/renderers/native/ReactNativeBridgeEventPlugin.js b/src/renderers/native/ReactNativeBridgeEventPlugin.js index 051ef35c6afe1..e8e0ddf188c78 100644 --- a/src/renderers/native/ReactNativeBridgeEventPlugin.js +++ b/src/renderers/native/ReactNativeBridgeEventPlugin.js @@ -14,6 +14,7 @@ var EventPropagators = require('EventPropagators'); var SyntheticEvent = require('SyntheticEvent'); var ReactNativeEventTypes = require('ReactNativeEventTypes'); +var invariant = require('fbjs/lib/invariant'); var customBubblingEventTypes = ReactNativeEventTypes.customBubblingEventTypes; var customDirectEventTypes = ReactNativeEventTypes.customDirectEventTypes; @@ -44,6 +45,11 @@ var ReactNativeBridgeEventPlugin = { ): ?Object { var bubbleDispatchConfig = customBubblingEventTypes[topLevelType]; var directDispatchConfig = customDirectEventTypes[topLevelType]; + invariant( + bubbleDispatchConfig || directDispatchConfig, + 'Unsupported top level event type "%s" dispatched', + topLevelType, + ); var event = SyntheticEvent.getPooled( bubbleDispatchConfig || directDispatchConfig, targetInst, diff --git a/src/renderers/native/ReactNativeEventTypes.js b/src/renderers/native/ReactNativeEventTypes.js index 179b1bc5c928c..8804cae37bb58 100644 --- a/src/renderers/native/ReactNativeEventTypes.js +++ b/src/renderers/native/ReactNativeEventTypes.js @@ -284,6 +284,9 @@ const IOS_DIRECT_EVENT_TYPES = { topShouldStartLoadWithRequest: { registrationName: 'onShouldStartLoadWithRequest', }, + topSnapshotReady: { + registrationName: 'onSnapshotReady', + }, topStateChange: { registrationName: 'onStateChange', },