diff --git a/src/libs/actions/User.js b/src/libs/actions/User.js index 148d5cbfa40e..2f5084dc03ec 100644 --- a/src/libs/actions/User.js +++ b/src/libs/actions/User.js @@ -123,9 +123,9 @@ function getUserDetails() { .then((response) => { // Update the User onyx key const loginList = _.where(response.loginList, {partnerName: 'expensify.com'}); - const expensifyNewsStatus = lodashGet(response, 'account.subscribed', true); + const isSubscribedToNewsletter = lodashGet(response, 'account.subscribed', true); const validatedStatus = lodashGet(response, 'account.validated', false); - Onyx.merge(ONYXKEYS.USER, {expensifyNewsStatus: !!expensifyNewsStatus, validated: !!validatedStatus}); + Onyx.merge(ONYXKEYS.USER, {isSubscribedToNewsletter: !!isSubscribedToNewsletter, validated: !!validatedStatus}); Onyx.set(ONYXKEYS.LOGIN_LIST, loginList); // Update the nvp_payPalMeAddress NVP @@ -157,22 +157,27 @@ function resendValidateCode(login) { /** * Sets whether or not the user is subscribed to Expensify news * - * @param {Boolean} subscribed + * @param {Boolean} isSubscribed */ -function setExpensifyNewsStatus(subscribed) { - Onyx.merge(ONYXKEYS.USER, {expensifyNewsStatus: subscribed}); - - DeprecatedAPI.UpdateAccount({subscribed}) - .then((response) => { - if (response.jsonCode === 200) { - return; - } - - Onyx.merge(ONYXKEYS.USER, {expensifyNewsStatus: !subscribed}); - }) - .catch(() => { - Onyx.merge(ONYXKEYS.USER, {expensifyNewsStatus: !subscribed}); - }); +function updateNewsletterSubscription(isSubscribed) { + API.write('UpdateNewsletterSubscription', { + isSubscribed, + }, { + optimisticData: [ + { + onyxMethod: 'merge', + key: ONYXKEYS.USER, + value: {isSubscribedToNewsletter: isSubscribed}, + }, + ], + failureData: [ + { + onyxMethod: 'merge', + key: ONYXKEYS.USER, + value: {isSubscribedToNewsletter: !isSubscribed}, + }, + ], + }); } /** @@ -453,7 +458,7 @@ export { getBetas, getUserDetails, resendValidateCode, - setExpensifyNewsStatus, + updateNewsletterSubscription, setSecondaryLoginAndNavigate, validateLogin, isBlockedFromConcierge, diff --git a/src/libs/deprecatedAPI.js b/src/libs/deprecatedAPI.js index b27a3c28c451..146bd52d21f5 100644 --- a/src/libs/deprecatedAPI.js +++ b/src/libs/deprecatedAPI.js @@ -317,19 +317,6 @@ function Report_GetHistory(parameters) { return Network.post(commandName, parameters); } -/** - * @param {Object} parameters - * @param {Number} parameters.reportID - * @param {Boolean} parameters.pinnedValue - * @returns {Promise} - */ -function Report_TogglePinned(parameters) { - const commandName = 'Report_TogglePinned'; - requireParameters(['reportID', 'pinnedValue'], - parameters, commandName); - return Network.post(commandName, parameters); -} - /** * @param {Object} parameters * @param {Number} parameters.reportID @@ -403,17 +390,6 @@ function SetWalletLinkedAccount(parameters) { return Network.post(commandName, parameters); } -/** - * @param {Object} parameters - * @param {String} parameters.subscribed - * @returns {Promise} - */ -function UpdateAccount(parameters) { - const commandName = 'UpdateAccount'; - requireParameters(['subscribed'], parameters, commandName); - return Network.post(commandName, parameters); -} - /** * @param {Object} parameters * @param {String} parameters.message @@ -914,14 +890,12 @@ export { RejectTransaction, Report_AddComment, Report_GetHistory, - Report_TogglePinned, Report_EditComment, ResendValidateCode, ResetPassword, SetNameValuePair, SetPassword, SetWalletLinkedAccount, - UpdateAccount, UpdatePolicy, User_SignUp, User_Delete, diff --git a/src/libs/migrateOnyx.js b/src/libs/migrateOnyx.js index 726ad34abe7f..e9746a8379f2 100644 --- a/src/libs/migrateOnyx.js +++ b/src/libs/migrateOnyx.js @@ -4,6 +4,7 @@ import AddEncryptedAuthToken from './migrations/AddEncryptedAuthToken'; import RenameActiveClientsKey from './migrations/RenameActiveClientsKey'; import RenamePriorityModeKey from './migrations/RenamePriorityModeKey'; import MoveToIndexedDB from './migrations/MoveToIndexedDB'; +import RenameExpensifyNewsStatus from './migrations/RenameExpensifyNewsStatus'; export default function () { const startTime = Date.now(); @@ -16,6 +17,7 @@ export default function () { RenameActiveClientsKey, RenamePriorityModeKey, AddEncryptedAuthToken, + RenameExpensifyNewsStatus, ]; // Reduce all promises down to a single promise. All promises run in a linear fashion, waiting for the diff --git a/src/libs/migrations/RenameExpensifyNewsStatus.js b/src/libs/migrations/RenameExpensifyNewsStatus.js new file mode 100644 index 000000000000..3a5e306c0995 --- /dev/null +++ b/src/libs/migrations/RenameExpensifyNewsStatus.js @@ -0,0 +1,35 @@ +import Onyx from 'react-native-onyx'; +import _ from 'underscore'; +import ONYXKEYS from '../../ONYXKEYS'; +import Log from '../Log'; + +// This migration changes the name of the Onyx key user.expensifyNewsStatus from expensifyNewsStatus to isSubscribedToNewsletter +export default function () { + return new Promise((resolve) => { + // Connect to the USER key in Onyx to get the value of expensifyNewsStatus + // then set that value as isSubscribedToNewsletter + // finally remove expensifyNewsStatus by setting the value to null + const connectionID = Onyx.connect({ + key: ONYXKEYS.USER, + callback: (user) => { + Onyx.disconnect(connectionID); + + // Fail early here because there is nothing to migrate + if (!user || _.isNull(user.expensifyNewsStatus) || _.isUndefined(user.expensifyNewsStatus)) { + Log.info('[Migrate Onyx] Skipped migration RenameExpensifyNewsStatus'); + return resolve(); + } + + // eslint-disable-next-line rulesdir/prefer-actions-set-data + Onyx.merge(ONYXKEYS.USER, { + expensifyNewsStatus: null, + isSubscribedToNewsletter: user.expensifyNewsStatus, + }) + .then(() => { + Log.info('[Migrate Onyx] Ran migration RenameExpensifyNewsStatus'); + resolve(); + }); + }, + }); + }); +} diff --git a/src/pages/settings/PreferencesPage.js b/src/pages/settings/PreferencesPage.js index 56b928553571..9848380a96f2 100755 --- a/src/pages/settings/PreferencesPage.js +++ b/src/pages/settings/PreferencesPage.js @@ -30,7 +30,7 @@ const propTypes = { /** The details about the user that is signed in */ user: PropTypes.shape({ /** Whether or not the user is subscribed to news updates */ - expensifyNewsStatus: PropTypes.bool, + isSubscribedToNewsletter: PropTypes.bool, shouldUseSecureStaging: PropTypes.bool, }), @@ -78,8 +78,8 @@ const PreferencesPage = (props) => {