From f684a3656e43e050588f08e4aa597efc61837b98 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sat, 7 Apr 2018 14:22:17 -0700 Subject: [PATCH] [fix] InteractionManager improvements --- .../src/exports/InteractionManager/index.js | 18 ++++++++++++------ .../src/modules/requestIdleCallback/index.js | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/packages/react-native-web/src/exports/InteractionManager/index.js b/packages/react-native-web/src/exports/InteractionManager/index.js index 270218a8..04d6b7ae 100644 --- a/packages/react-native-web/src/exports/InteractionManager/index.js +++ b/packages/react-native-web/src/exports/InteractionManager/index.js @@ -9,6 +9,7 @@ */ import invariant from 'fbjs/lib/invariant'; +import requestIdleCallback, { cancelIdleCallback } from '../../modules/requestIdleCallback'; const InteractionManager = { Events: { @@ -20,16 +21,21 @@ const InteractionManager = { * Schedule a function to run after all interactions have completed. */ runAfterInteractions(task: ?Function): { then: Function, done: Function, cancel: Function } { - console.warn('InteractionManager is not supported on web'); + let handle; + const promise = new Promise(resolve => { - if (task) { - resolve(task()); - } + handle = requestIdleCallback(() => { + if (task) { + resolve(task()); + } + }); }); return { then: promise.then.bind(promise), - done: () => {}, - cancel: () => {} + done: promise.then.bind(promise), + cancel: () => { + cancelIdleCallback(handle); + } }; }, diff --git a/packages/react-native-web/src/modules/requestIdleCallback/index.js b/packages/react-native-web/src/modules/requestIdleCallback/index.js index 693dea48..37730322 100644 --- a/packages/react-native-web/src/modules/requestIdleCallback/index.js +++ b/packages/react-native-web/src/modules/requestIdleCallback/index.js @@ -9,7 +9,7 @@ import { canUseDOM } from 'fbjs/lib/ExecutionEnvironment'; -const _requestIdleCallback = function(cb: Function, options: Object) { +const _requestIdleCallback = function(cb: Function, options?: Object) { return setTimeout(() => { const start = Date.now(); cb({