Permalink
Browse files

Fix missing methods in Keyboard module

Summary:
They keyboard module is an instance of `NativeEventEmitter` which is an instance of `EventEmitter`. But the exported module only has a small subset of the APIs. This broke existing codebases which are using the methods not exported currently.

The PR just reassigns the variable before exporting so that the actual module is exported instead of the dummy object used for documentation. It also fixes a layout issue in the documentation.
Closes #10671

Differential Revision: D4110355

fbshipit-source-id: a6757f3ca8c2494970ba221b10a7e6e9a5f2d64d
  • Loading branch information...
1 parent 29888b5 commit 5105c09f56035df595104666e370a9fc57ca4dcd @ide ide committed with Facebook Github Bot Nov 1, 2016
Showing with 47 additions and 18 deletions.
  1. +47 −18 Libraries/Components/Keyboard/Keyboard.js
@@ -11,20 +11,41 @@
*/
'use strict';
+const invariant = require('fbjs/lib/invariant');
const NativeEventEmitter = require('NativeEventEmitter');
const KeyboardObserver = require('NativeModules').KeyboardObserver;
const dismissKeyboard = require('dismissKeyboard');
const KeyboardEventEmitter = new NativeEventEmitter(KeyboardObserver);
+type KeyboardEventName =
+ | 'keyboardWillShow'
+ | 'keyboardDidShow'
+ | 'keyboardWillHide'
+ | 'keyboardDidHide'
+ | 'keyboardWillChangeFrame'
+ | 'keyboardDidChangeFrame';
+
+type KeyboardEventData = {
+ endCoordinates: {
+ width: number,
+ height: number,
+ screenX: number,
+ screenY: number,
+ },
+};
+
+type KeyboardEventListener = (e: KeyboardEventData) => void;
+
// The following object exists for documentation purposes
// Actual work happens in
// https://github.com/facebook/react-native/blob/master/Libraries/EventEmitter/NativeEventEmitter.js
+
/**
- * `Keyboard` component to control keyboard events.
+ * `Keyboard` module to control keyboard events.
*
* ### Usage
*
- * The Keyboard component allows you to listen for native events and react to them, as
+ * The Keyboard module allows you to listen for native events and react to them, as
* well as make changes to the keyboard, like dismissing it.
*
*```
@@ -60,52 +81,60 @@ const KeyboardEventEmitter = new NativeEventEmitter(KeyboardObserver);
* }
*```
*/
-module.exports = {
+let Keyboard = {
/**
* The `addListener` function connects a JavaScript function to an identified native
* keyboard notification event.
*
* This function then returns the reference to the listener.
*
- * @param {string} nativeEvent The `nativeEvent` is the string that identifies the event you're listening for. This
+ * @param {string} eventName The `nativeEvent` is the string that identifies the event you're listening for. This
*can be any of the following:
+ *
* - `keyboardWillShow`
* - `keyboardDidShow`
* - `keyboardWillHide`
* - `keyboardDidHide`
* - `keyboardWillChangeFrame`
* - `keyboardDidChangeFrame`
*
- * @param {function} jsFunction function to be called when the event fires.
+ * @param {function} callback function to be called when the event fires.
*/
- addListener (nativeEvent: string, jsFunction: Function) {
- return KeyboardEventEmitter.addListener(nativeEvent, jsFunction);
+ addListener(eventName: KeyboardEventName, callback: KeyboardEventListener) {
+ invariant(false, 'Dummy method used for documentation');
},
/**
- * Removes all listeners for a specific event type.
+ * Removes a specific listener.
*
- * @param {string} eventType The native event string listeners are watching which will be removed.
+ * @param {string} eventName The `nativeEvent` is the string that identifies the event you're listening for.
+ * @param {function} callback function to be called when the event fires.
*/
- removeAllListeners (eventType: string) {
- KeyboardEventEmitter.removeAllListeners(eventType);
+ removeListener(eventName: KeyboardEventName, callback: Function) {
+ invariant(false, 'Dummy method used for documentation');
},
/**
- * Removes a specific subscription.
+ * Removes all listeners for a specific event type.
*
- * @param {EmitterSubscription} subscription The subscription emitter to be removed.
+ * @param {string} eventType The native event string listeners are watching which will be removed.
*/
- removeSubscription (subscription: Object) {
- KeyboardEventEmitter.removeSubscription(subscription);
+ removeAllListeners(eventName: KeyboardEventName) {
+ invariant(false, 'Dummy method used for documentation');
},
/**
* Dismisses the active keyboard and removes focus.
*/
- dismiss () {
- dismissKeyboard();
+ dismiss() {
+ invariant(false, 'Dummy method used for documentation');
}
-
};
+
+// Throw away the dummy object and reassign it to original module
+Keyboard = KeyboardEventEmitter;
+Keyboard.dismiss = dismissKeyboard;
+
+module.exports = Keyboard;
+

0 comments on commit 5105c09

Please sign in to comment.