index.ios.js 2.03 KB
Newer Older
Lidan Hifi's avatar
Lidan Hifi committed
1
/**
Lidan Hifi's avatar
Lidan Hifi committed
2
 * @providesModule RNNotifications
Lidan Hifi's avatar
Lidan Hifi committed
3 4
 * @flow
 */
Lidan Hifi's avatar
Lidan Hifi committed
5 6 7 8
"use strict";
import { NativeModules, DeviceEventEmitter } from "react-native";
import Map from "core-js/library/es6/map";
var NativeRNNotifications = NativeModules.RNNotifications; // eslint-disable-line no-unused-vars
Lidan Hifi's avatar
Lidan Hifi committed
9

Lidan Hifi's avatar
Lidan Hifi committed
10 11 12
var DEVICE_NOTIFICATION_RECEIVED_FOREGROUND_EVENT = "notificationReceivedForeground";
var DEVICE_NOTIFICATION_RECEIVED_BACKGROUND_EVENT = "notificationReceivedBackground";
var DEVICE_NOTIFICATION_OPENED_EVENT = "notificationOpened";
Lidan Hifi's avatar
Lidan Hifi committed
13 14 15

var _notificationHandlers = new Map();

Lidan Hifi's avatar
Lidan Hifi committed
16
class NotificationsIOS {
Lidan Hifi's avatar
Lidan Hifi committed
17 18 19 20 21 22 23 24 25 26 27 28 29 30
  /**
   * Attaches a listener to remote notification events while the app is running
   * in the foreground or the background.
   *
   * Valid events are:
   *
   * - `notificationReceivedForeground` : Fired when a notification (local / remote) is received when app is on foreground state.
   * - `notificationReceivedBackground`: Fired when a background notification is received.
   * - `notificationOpened`: Fired when a notification (local / remote) is opened.
   */
  static addEventListener(type: string, handler: Function) {
    if (type === DEVICE_NOTIFICATION_RECEIVED_FOREGROUND_EVENT ||
        type === DEVICE_NOTIFICATION_RECEIVED_BACKGROUND_EVENT ||
        type === DEVICE_NOTIFICATION_OPENED_EVENT) {
Lidan Hifi's avatar
Lidan Hifi committed
31 32 33 34 35 36
      var listener = DeviceEventEmitter.addListener(
        type,
        (notification) => {
          handler(notification);
        }
      );
Lidan Hifi's avatar
Lidan Hifi committed
37

Lidan Hifi's avatar
Lidan Hifi committed
38
      _notificationHandlers.set(handler, listener);
Lidan Hifi's avatar
Lidan Hifi committed
39 40 41 42 43 44 45 46 47 48 49
    }
  }

  /**
   * Removes the event listener. Do this in `componentWillUnmount` to prevent
   * memory leaks
   */
  static removeEventListener(type: string, handler: Function) {
    if (type === DEVICE_NOTIFICATION_RECEIVED_FOREGROUND_EVENT ||
        type === DEVICE_NOTIFICATION_RECEIVED_BACKGROUND_EVENT ||
        type === DEVICE_NOTIFICATION_OPENED_EVENT) {
Lidan Hifi's avatar
Lidan Hifi committed
50 51 52 53
      var listener = _notificationHandlers.get(handler);
      if (!listener) {
        return;
      }
Lidan Hifi's avatar
Lidan Hifi committed
54

Lidan Hifi's avatar
Lidan Hifi committed
55 56
      listener.remove();
      _notificationHandlers.delete(handler);
Lidan Hifi's avatar
Lidan Hifi committed
57 58 59 60
    }
  }
}

Lidan Hifi's avatar
Lidan Hifi committed
61
module.exports = NotificationsIOS;