Skip to content

Commit

Permalink
Merge pull request #9764 from Expensify/cmartins-refactorUpdateAccount
Browse files Browse the repository at this point in the history
Refactor UpdateAccount in App
  • Loading branch information
luacmartins authored Jul 12, 2022
2 parents 61f7d4b + e5eadb6 commit 0d820fb
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 47 deletions.
41 changes: 23 additions & 18 deletions src/libs/actions/User.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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},
},
],
});
}

/**
Expand Down Expand Up @@ -453,7 +458,7 @@ export {
getBetas,
getUserDetails,
resendValidateCode,
setExpensifyNewsStatus,
updateNewsletterSubscription,
setSecondaryLoginAndNavigate,
validateLogin,
isBlockedFromConcierge,
Expand Down
26 changes: 0 additions & 26 deletions src/libs/deprecatedAPI.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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,
Expand Down
2 changes: 2 additions & 0 deletions src/libs/migrateOnyx.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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
Expand Down
35 changes: 35 additions & 0 deletions src/libs/migrations/RenameExpensifyNewsStatus.js
Original file line number Diff line number Diff line change
@@ -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();
});
},
});
});
}
6 changes: 3 additions & 3 deletions src/pages/settings/PreferencesPage.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}),

Expand Down Expand Up @@ -78,8 +78,8 @@ const PreferencesPage = (props) => {
</View>
<View style={[styles.flex1, styles.alignItemsEnd]}>
<Switch
isOn={lodashGet(props.user, 'expensifyNewsStatus', true)}
onToggle={User.setExpensifyNewsStatus}
isOn={lodashGet(props.user, 'isSubscribedToNewsletter', true)}
onToggle={User.updateNewsletterSubscription}
/>
</View>
</View>
Expand Down

0 comments on commit 0d820fb

Please sign in to comment.