diff --git a/src/libs/Middleware/Reauthentication.js b/src/libs/Middleware/Reauthentication.js index 218457b12ca..33182bbe85c 100644 --- a/src/libs/Middleware/Reauthentication.js +++ b/src/libs/Middleware/Reauthentication.js @@ -82,6 +82,9 @@ function Reauthentication(response, request, isFromSequentialQueue) { } request.resolve(data); + + // Return response data so we can chain the response with the following middlewares. + return data; }); } diff --git a/src/libs/Middleware/SaveResponseInOnyx.js b/src/libs/Middleware/SaveResponseInOnyx.js new file mode 100644 index 00000000000..0acea5fb93d --- /dev/null +++ b/src/libs/Middleware/SaveResponseInOnyx.js @@ -0,0 +1,32 @@ +import Onyx from 'react-native-onyx'; +import _ from 'underscore'; + +/** + * @param {Promise} response + * @param {Object} request + * @returns {Promise} + */ +function SaveResponseInOnyx(response, request) { + return response + .then((responseData) => { + // We'll only save the onyxData, successData and failureData for the refactored commands + if (_.has(responseData, 'onyxData')) { + let data; + if (responseData.jsonCode === 200) { + data = [ + ...request.successData, + ...responseData.onyxData, + ]; + } else { + data = [ + ...request.failureData, + ...responseData.onyxData, + ]; + } + Onyx.update(data); + } + return responseData; + }); +} + +export default SaveResponseInOnyx; diff --git a/src/libs/Middleware/index.js b/src/libs/Middleware/index.js index 8aa09c9e204..4e270b009c1 100644 --- a/src/libs/Middleware/index.js +++ b/src/libs/Middleware/index.js @@ -2,10 +2,12 @@ import Logging from './Logging'; import Reauthentication from './Reauthentication'; import RecheckConnection from './RecheckConnection'; import Retry from './Retry'; +import SaveResponseInOnyx from './SaveResponseInOnyx'; export { Logging, Reauthentication, RecheckConnection, Retry, + SaveResponseInOnyx, }; diff --git a/src/libs/deprecatedAPI.js b/src/libs/deprecatedAPI.js index d0054514ed0..d154ee6c047 100644 --- a/src/libs/deprecatedAPI.js +++ b/src/libs/deprecatedAPI.js @@ -23,6 +23,9 @@ Request.use(Middleware.Reauthentication); // Retry - Handles retrying any failed requests. Request.use(Middleware.Retry); +// SaveResponseInOnyx - Merges either the successData or failureData into Onyx depending on if the call was successful or not +Request.use(Middleware.SaveResponseInOnyx); + /** * @param {Object} parameters * @returns {Promise}