diff --git a/src/libs/Network/NetworkStore.js b/src/libs/Network/NetworkStore.js index 8420d27f6667..67b57f966974 100644 --- a/src/libs/Network/NetworkStore.js +++ b/src/libs/Network/NetworkStore.js @@ -2,7 +2,6 @@ import lodashGet from 'lodash/get'; import Onyx from 'react-native-onyx'; import _ from 'underscore'; import ONYXKEYS from '../../ONYXKEYS'; -import createCallback from '../createCallback'; let credentials; let authToken; @@ -10,7 +9,21 @@ let currentUserEmail; let offline = false; let authenticating = false; -const [triggerConnectivityResumed, onConnectivityResumed] = createCallback(); +// Allow code that is outside of the network listen for when a reconnection happens so that it can execute any side-effects (like flushing the sequential network queue) +let reconnectCallback; +function triggerReconnectCallback() { + if (!_.isFunction(reconnectCallback)) { + return; + } + return reconnectCallback(); +} + +/** + * @param {Function} callbackFunction + */ +function onReconnection(callbackFunction) { + reconnectCallback = callbackFunction; +} let resolveIsReadyPromise; let isReadyPromise = new Promise((resolve) => { @@ -64,7 +77,7 @@ Onyx.connect({ // Client becomes online emit connectivity resumed event if (offline && !network.isOffline) { - triggerConnectivityResumed(); + triggerReconnectCallback(); } offline = network.isOffline; @@ -134,7 +147,7 @@ export { hasReadRequiredDataFromStorage, resetHasReadRequiredDataFromStorage, isOffline, - onConnectivityResumed, + onReconnection, isAuthenticating, setIsAuthenticating, getCredentials, diff --git a/src/libs/Network/SequentialQueue.js b/src/libs/Network/SequentialQueue.js index 8486bc5b9f71..82b39463eb28 100644 --- a/src/libs/Network/SequentialQueue.js +++ b/src/libs/Network/SequentialQueue.js @@ -68,7 +68,7 @@ function isRunning() { } // Flush the queue when the connection resumes -NetworkStore.onConnectivityResumed(flush); +NetworkStore.onReconnection(flush); /** * @param {Object} request diff --git a/src/libs/createCallback.js b/src/libs/createCallback.js deleted file mode 100644 index 61402a6edc33..000000000000 --- a/src/libs/createCallback.js +++ /dev/null @@ -1,36 +0,0 @@ -import _ from 'underscore'; - -/** - * Utility for registering a single callback. Use to inject dependencies in places where you would normally "register" a method - * that you want to call later. Can be overwritten or cleared and returns value to caller. This is intented to be used with array - * destructuring. - * - * @example - * - * const [onResponse, handleResponse, clearHandler] = createCallback(); - * - * @returns {Array} - */ -function createCallback() { - let callback = null; - - function clear() { - callback = null; - } - - function set(newCallback) { - callback = newCallback; - } - - function run(...args) { - if (!_.isFunction(callback)) { - return; - } - - return callback(...args); - } - - return [run, set, clear]; -} - -export default createCallback; diff --git a/tests/unit/createCallbackTest.js b/tests/unit/createCallbackTest.js deleted file mode 100644 index 7180452bf9f7..000000000000 --- a/tests/unit/createCallbackTest.js +++ /dev/null @@ -1,25 +0,0 @@ -import createCallback from '../../src/libs/createCallback'; - -test('Callback utility works', () => { - // GIVEN a generic callback setup - const [doSomething, registerDoSomething, clear] = createCallback(); - const mockCallback = jest.fn(); - - // WHEN we register a callback - registerDoSomething(mockCallback); - - // THEN call the callback - doSomething(); - - // THEN our callback will be called - expect(mockCallback).toHaveBeenCalledTimes(1); - - // WHEN we clear the callback - clear(); - - // and call again - doSomething(); - - // THEN expect mock callback to not have been called again - expect(mockCallback).toHaveBeenCalledTimes(1); -});