From 4bc16fa3eb76048b600b0fc8a07631914d765875 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Wed, 9 May 2018 10:52:44 -0700 Subject: [PATCH] [fix] AppState should not throw for 'memoryWarning' event --- .../src/exports/AppState/index.js | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/packages/react-native-web/src/exports/AppState/index.js b/packages/react-native-web/src/exports/AppState/index.js index e68d1a5f..8688e496 100644 --- a/packages/react-native-web/src/exports/AppState/index.js +++ b/packages/react-native-web/src/exports/AppState/index.js @@ -16,7 +16,7 @@ import invariant from 'fbjs/lib/invariant'; const isPrefixed = canUseDOM && !document.hasOwnProperty('hidden') && document.hasOwnProperty('webkitHidden'); -const EVENT_TYPES = ['change']; +const EVENT_TYPES = ['change', 'memoryWarning']; const VISIBILITY_CHANGE_EVENT = isPrefixed ? 'webkitvisibilitychange' : 'visibilitychange'; const VISIBILITY_STATE_PROPERTY = isPrefixed ? 'webkitVisibilityState' : 'visibilityState'; @@ -52,9 +52,11 @@ export default class AppState { 'Trying to subscribe to unknown event: "%s"', type ); - const callback = () => handler(AppState.currentState); - listeners.push([handler, callback]); - document.addEventListener(VISIBILITY_CHANGE_EVENT, callback, false); + if (type === 'change') { + const callback = () => handler(AppState.currentState); + listeners.push([handler, callback]); + document.addEventListener(VISIBILITY_CHANGE_EVENT, callback, false); + } } } @@ -65,14 +67,16 @@ export default class AppState { 'Trying to remove listener for unknown event: "%s"', type ); - const listenerIndex = findIndex(listeners, pair => pair[0] === handler); - invariant( - listenerIndex !== -1, - 'Trying to remove AppState listener for unregistered handler' - ); - const callback = listeners[listenerIndex][1]; - document.removeEventListener(VISIBILITY_CHANGE_EVENT, callback, false); - listeners.splice(listenerIndex, 1); + if (type === 'change') { + const listenerIndex = findIndex(listeners, pair => pair[0] === handler); + invariant( + listenerIndex !== -1, + 'Trying to remove AppState listener for unregistered handler' + ); + const callback = listeners[listenerIndex][1]; + document.removeEventListener(VISIBILITY_CHANGE_EVENT, callback, false); + listeners.splice(listenerIndex, 1); + } } } }