From 6076918fcf62e5349c1c96937b3467cbd5b33290 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Ch=C3=A1vez?= Date: Mon, 23 May 2022 18:16:05 -0500 Subject: [PATCH 1/8] add new SaveResponseInOnyx middleware --- src/libs/Middleware/SaveResponseInOnyx.js | 27 +++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/libs/Middleware/SaveResponseInOnyx.js diff --git a/src/libs/Middleware/SaveResponseInOnyx.js b/src/libs/Middleware/SaveResponseInOnyx.js new file mode 100644 index 000000000000..6509da157060 --- /dev/null +++ b/src/libs/Middleware/SaveResponseInOnyx.js @@ -0,0 +1,27 @@ +import Onyx from 'react-native-onyx'; + +/** + * @param {Promise} response + * @param {Object} request + * @returns {Promise} + */ +function SaveResponseInOnyx(response, request) { + return response + .then((responseObject) => { + let data; + if (responseObject.jsonCode === 200) { + data = [ + ...request.successData, + ...responseObject.onyxData, + ]; + } else { + data = [ + ...request.failureData, + ...responseObject.onyxData, + ]; + } + Onyx.update(data); + }); +} + +export default SaveResponseInOnyx; From 08c6957a375a532f7909db4d5723df1635eaa39f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Ch=C3=A1vez?= Date: Mon, 23 May 2022 18:18:25 -0500 Subject: [PATCH 2/8] use SaveResponseInOnyx middleware --- src/libs/API.js | 3 +++ src/libs/Middleware/index.js | 2 ++ 2 files changed, 5 insertions(+) diff --git a/src/libs/API.js b/src/libs/API.js index d0054514ed0a..d154ee6c0472 100644 --- a/src/libs/API.js +++ b/src/libs/API.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} diff --git a/src/libs/Middleware/index.js b/src/libs/Middleware/index.js index 8aa09c9e2041..4e270b009c1d 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, }; From 918851451400c4cde0ee514cd21cbd4fdea84b16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Ch=C3=A1vez?= Date: Mon, 23 May 2022 19:30:47 -0500 Subject: [PATCH 3/8] return data in Reauthentication to chain next middleware --- src/libs/Middleware/Reauthentication.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libs/Middleware/Reauthentication.js b/src/libs/Middleware/Reauthentication.js index 218457b12caf..a8eee71b192b 100644 --- a/src/libs/Middleware/Reauthentication.js +++ b/src/libs/Middleware/Reauthentication.js @@ -82,6 +82,7 @@ function Reauthentication(response, request, isFromSequentialQueue) { } request.resolve(data); + return data; }); } From 9dcd3106793459b3d7f38528330cb85fae6f77b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Ch=C3=A1vez?= Date: Mon, 23 May 2022 19:31:23 -0500 Subject: [PATCH 4/8] check if onyxData exists to update the data in Onyx --- src/libs/Middleware/SaveResponseInOnyx.js | 29 +++++++++++++---------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/libs/Middleware/SaveResponseInOnyx.js b/src/libs/Middleware/SaveResponseInOnyx.js index 6509da157060..a3bdccc8727e 100644 --- a/src/libs/Middleware/SaveResponseInOnyx.js +++ b/src/libs/Middleware/SaveResponseInOnyx.js @@ -7,20 +7,23 @@ import Onyx from 'react-native-onyx'; */ function SaveResponseInOnyx(response, request) { return response - .then((responseObject) => { - let data; - if (responseObject.jsonCode === 200) { - data = [ - ...request.successData, - ...responseObject.onyxData, - ]; - } else { - data = [ - ...request.failureData, - ...responseObject.onyxData, - ]; + .then((responseData) => { + if (responseData.onyxData) { + let data; + if (responseData.jsonCode === 200) { + data = [ + ...request.successData, + ...responseData.onyxData, + ]; + } else { + data = [ + ...request.failureData, + ...responseData.onyxData, + ]; + } + Onyx.update(data); } - Onyx.update(data); + return responseData; }); } From ca3b49a028e16eca80f542904864ecde21b78238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Ch=C3=A1vez?= Date: Wed, 25 May 2022 16:40:56 -0500 Subject: [PATCH 5/8] add comment to return data --- src/libs/Middleware/Reauthentication.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libs/Middleware/Reauthentication.js b/src/libs/Middleware/Reauthentication.js index a8eee71b192b..33182bbe85c1 100644 --- a/src/libs/Middleware/Reauthentication.js +++ b/src/libs/Middleware/Reauthentication.js @@ -82,6 +82,8 @@ function Reauthentication(response, request, isFromSequentialQueue) { } request.resolve(data); + + // Return response data so we can chain the response with the following middlewares. return data; }); } From 66d2636ce22752da72ec0d965adf74085210cc23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Ch=C3=A1vez?= Date: Wed, 25 May 2022 16:43:41 -0500 Subject: [PATCH 6/8] add comment to SaveResponseInOnyx --- src/libs/Middleware/SaveResponseInOnyx.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libs/Middleware/SaveResponseInOnyx.js b/src/libs/Middleware/SaveResponseInOnyx.js index a3bdccc8727e..d5cbb0c28be4 100644 --- a/src/libs/Middleware/SaveResponseInOnyx.js +++ b/src/libs/Middleware/SaveResponseInOnyx.js @@ -8,6 +8,7 @@ import Onyx from 'react-native-onyx'; function SaveResponseInOnyx(response, request) { return response .then((responseData) => { + // We'll only save the onyxData, successData and failureData for the refactored commands if (responseData.onyxData) { let data; if (responseData.jsonCode === 200) { From f82ccb5cc038e55c40767057e68a38d9ac4d0e76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Ch=C3=A1vez?= Date: Wed, 25 May 2022 17:54:35 -0500 Subject: [PATCH 7/8] return error in Retry to chain middlewares --- src/libs/Middleware/Retry.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/libs/Middleware/Retry.js b/src/libs/Middleware/Retry.js index 779cdb6b7c87..9669a0bdf051 100644 --- a/src/libs/Middleware/Retry.js +++ b/src/libs/Middleware/Retry.js @@ -47,7 +47,7 @@ function Retry(response, request, isFromSequentialQueue) { .catch((error) => { // Do not retry any requests that are cancelled if (error.name === CONST.ERROR.REQUEST_CANCELLED) { - return; + return error; } if (isFromSequentialQueue) { @@ -57,11 +57,11 @@ function Retry(response, request, isFromSequentialQueue) { Log.info('Request failed too many times, removing from storage', false, {retryCount, command: request.command, error: error.message}); PersistedRequests.remove(request); } - return; + return error; } if (retryFailedRequest(request, error)) { - return; + return error; } if (request.command !== 'Log') { @@ -71,6 +71,8 @@ function Retry(response, request, isFromSequentialQueue) { } request.resolve({jsonCode: CONST.JSON_CODE.UNABLE_TO_RETRY}); + + return error; }); } From 8c4ef62818f56a0be990799caf939534c7fecdd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Ch=C3=A1vez?= Date: Wed, 25 May 2022 17:59:20 -0500 Subject: [PATCH 8/8] use underscore to check if responseData and onyxData exists --- src/libs/Middleware/Retry.js | 8 +++----- src/libs/Middleware/SaveResponseInOnyx.js | 3 ++- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/libs/Middleware/Retry.js b/src/libs/Middleware/Retry.js index 9669a0bdf051..779cdb6b7c87 100644 --- a/src/libs/Middleware/Retry.js +++ b/src/libs/Middleware/Retry.js @@ -47,7 +47,7 @@ function Retry(response, request, isFromSequentialQueue) { .catch((error) => { // Do not retry any requests that are cancelled if (error.name === CONST.ERROR.REQUEST_CANCELLED) { - return error; + return; } if (isFromSequentialQueue) { @@ -57,11 +57,11 @@ function Retry(response, request, isFromSequentialQueue) { Log.info('Request failed too many times, removing from storage', false, {retryCount, command: request.command, error: error.message}); PersistedRequests.remove(request); } - return error; + return; } if (retryFailedRequest(request, error)) { - return error; + return; } if (request.command !== 'Log') { @@ -71,8 +71,6 @@ function Retry(response, request, isFromSequentialQueue) { } request.resolve({jsonCode: CONST.JSON_CODE.UNABLE_TO_RETRY}); - - return error; }); } diff --git a/src/libs/Middleware/SaveResponseInOnyx.js b/src/libs/Middleware/SaveResponseInOnyx.js index d5cbb0c28be4..0acea5fb93d3 100644 --- a/src/libs/Middleware/SaveResponseInOnyx.js +++ b/src/libs/Middleware/SaveResponseInOnyx.js @@ -1,4 +1,5 @@ import Onyx from 'react-native-onyx'; +import _ from 'underscore'; /** * @param {Promise} response @@ -9,7 +10,7 @@ function SaveResponseInOnyx(response, request) { return response .then((responseData) => { // We'll only save the onyxData, successData and failureData for the refactored commands - if (responseData.onyxData) { + if (_.has(responseData, 'onyxData')) { let data; if (responseData.jsonCode === 200) { data = [