[ReactNative] PushNotificationIOS listener Map

This commit is contained in:
Eric Vicenti 2015-06-11 13:34:38 -07:00
parent f0bba0c111
commit 1b9067a3e3

View File

@ -11,11 +11,12 @@
*/
'use strict';
var Map = require('Map');
var RCTDeviceEventEmitter = require('RCTDeviceEventEmitter');
var RCTPushNotificationManager = require('NativeModules').PushNotificationManager;
var invariant = require('invariant');
var _notifHandlers = {};
var _notifHandlers = new Map();
var _initialNotification = RCTPushNotificationManager &&
RCTPushNotificationManager.initialNotification;
@ -65,21 +66,23 @@ class PushNotificationIOS {
type === 'notification' || type === 'register',
'PushNotificationIOS only supports `notification` and `register` events'
);
var listener;
if (type === 'notification') {
_notifHandlers[String(handler)] = RCTDeviceEventEmitter.addListener(
listener = RCTDeviceEventEmitter.addListener(
DEVICE_NOTIF_EVENT,
(notifData) => {
handler(new PushNotificationIOS(notifData));
}
);
} else if (type === 'register') {
_notifHandlers[String(handler)] = RCTDeviceEventEmitter.addListener(
listener = RCTDeviceEventEmitter.addListener(
NOTIF_REGISTER_EVENT,
(registrationInfo) => {
handler(registrationInfo.deviceToken);
}
);
}
_notifHandlers.set(handler, listener);
}
/**
@ -143,11 +146,12 @@ class PushNotificationIOS {
type === 'notification' || type === 'register',
'PushNotificationIOS only supports `notification` and `register` events'
);
if (!_notifHandlers[String(handler)]) {
var listener = _notifHandlers.get(handler);
if (!listener) {
return;
}
_notifHandlers[String(handler)].remove();
_notifHandlers[String(handler)] = null;
listener.remove();
_notifHandlers.delete(handler);
}