Skip to content

Commit 03f18cc

Browse files
authored
Merge pull request #55498 from nkdengineer/fix/55405
fix: unable to receive New Magic Codes for Primary Contact
2 parents 8481853 + 191eeb9 commit 03f18cc

File tree

1 file changed

+37
-24
lines changed

1 file changed

+37
-24
lines changed

src/pages/settings/Profile/Contacts/ContactMethodDetailsPage.tsx

Lines changed: 37 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import ConfirmModal from '@components/ConfirmModal';
77
import ErrorMessageRow from '@components/ErrorMessageRow';
88
import FullscreenLoadingIndicator from '@components/FullscreenLoadingIndicator';
99
import HeaderWithBackButton from '@components/HeaderWithBackButton';
10-
import * as Expensicons from '@components/Icon/Expensicons';
10+
import {Star, Trashcan} from '@components/Icon/Expensicons';
1111
import MenuItem from '@components/MenuItem';
1212
import OfflineWithFeedback from '@components/OfflineWithFeedback';
1313
import ScreenWrapper from '@components/ScreenWrapper';
@@ -20,14 +20,23 @@ import usePrevious from '@hooks/usePrevious';
2020
import useTheme from '@hooks/useTheme';
2121
import useThemeStyles from '@hooks/useThemeStyles';
2222
import blurActiveElement from '@libs/Accessibility/blurActiveElement';
23+
import {
24+
clearContactMethod,
25+
clearContactMethodErrors,
26+
clearUnvalidatedNewContactMethodAction,
27+
deleteContactMethod,
28+
requestContactMethodValidateCode,
29+
resetContactMethodValidateCodeSentState,
30+
setContactMethodAsDefault,
31+
validateSecondaryLogin,
32+
} from '@libs/actions/User';
2333
import {canUseTouchScreen} from '@libs/DeviceCapabilities';
24-
import * as ErrorUtils from '@libs/ErrorUtils';
34+
import {getEarliestErrorField, getLatestErrorField} from '@libs/ErrorUtils';
2535
import Navigation from '@libs/Navigation/Navigation';
2636
import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
2737
import type {SettingsNavigatorParamList} from '@libs/Navigation/types';
2838
import {addSMSDomainIfPhoneNumber} from '@libs/PhoneNumber';
29-
import * as Modal from '@userActions/Modal';
30-
import * as User from '@userActions/User';
39+
import {close} from '@userActions/Modal';
3140
import CONST from '@src/CONST';
3241
import ONYXKEYS from '@src/ONYXKEYS';
3342
import ROUTES from '@src/ROUTES';
@@ -80,13 +89,13 @@ function ContactMethodDetailsPage({route}: ContactMethodDetailsPageProps) {
8089
}, [route.params.contactMethod]);
8190
const loginData = useMemo(() => loginList?.[contactMethod], [loginList, contactMethod]);
8291
const isDefaultContactMethod = useMemo(() => session?.email === loginData?.partnerUserID, [session?.email, loginData?.partnerUserID]);
83-
const validateLoginError = ErrorUtils.getEarliestErrorField(loginData, 'validateLogin');
92+
const validateLoginError = getEarliestErrorField(loginData, 'validateLogin');
8493

8594
/**
8695
* Attempt to set this contact method as user's "Default contact method"
8796
*/
8897
const setAsDefault = useCallback(() => {
89-
User.setContactMethodAsDefault(contactMethod, backTo);
98+
setContactMethodAsDefault(contactMethod, backTo);
9099
}, [contactMethod, backTo]);
91100

92101
/**
@@ -136,7 +145,7 @@ function ContactMethodDetailsPage({route}: ContactMethodDetailsPageProps) {
136145
*/
137146
const confirmDeleteAndHideModal = useCallback(() => {
138147
toggleDeleteModal(false);
139-
User.deleteContactMethod(contactMethod, loginList ?? {}, backTo);
148+
deleteContactMethod(contactMethod, loginList ?? {}, backTo);
140149
}, [contactMethod, loginList, toggleDeleteModal, backTo]);
141150

142151
const prevValidatedDate = usePrevious(loginData?.validatedDate);
@@ -157,13 +166,17 @@ function ContactMethodDetailsPage({route}: ContactMethodDetailsPageProps) {
157166
setIsValidateCodeActionModalVisible(!loginData?.validatedDate);
158167
}, [loginData?.validatedDate, loginData?.errorFields?.addedLogin]);
159168

169+
useEffect(() => {
170+
resetContactMethodValidateCodeSentState(contactMethod);
171+
}, [contactMethod]);
172+
160173
const getThreeDotsMenuItems = useCallback(() => {
161174
const menuItems = [];
162175
if (isValidateCodeActionModalVisible && !isDefaultContactMethod) {
163176
menuItems.push({
164-
icon: Expensicons.Trashcan,
177+
icon: Trashcan,
165178
text: translate('common.remove'),
166-
onSelected: () => Modal.close(() => toggleDeleteModal(true)),
179+
onSelected: () => close(() => toggleDeleteModal(true)),
167180
});
168181
}
169182
return menuItems;
@@ -214,36 +227,36 @@ function ContactMethodDetailsPage({route}: ContactMethodDetailsPageProps) {
214227
<>
215228
{canChangeDefaultContactMethod ? (
216229
<OfflineWithFeedback
217-
errors={ErrorUtils.getLatestErrorField(loginData, 'defaultLogin')}
230+
errors={getLatestErrorField(loginData, 'defaultLogin')}
218231
errorRowStyles={[themeStyles.ml8, themeStyles.mr5]}
219-
onClose={() => User.clearContactMethodErrors(contactMethod, 'defaultLogin')}
232+
onClose={() => clearContactMethodErrors(contactMethod, 'defaultLogin')}
220233
>
221234
<MenuItem
222235
title={translate('contacts.setAsDefault')}
223-
icon={Expensicons.Star}
236+
icon={Star}
224237
onPress={setAsDefault}
225238
/>
226239
</OfflineWithFeedback>
227240
) : null}
228241
{isDefaultContactMethod ? (
229242
<OfflineWithFeedback
230243
pendingAction={loginData.pendingFields?.defaultLogin}
231-
errors={ErrorUtils.getLatestErrorField(loginData, isFailedRemovedContactMethod ? 'deletedLogin' : 'defaultLogin')}
244+
errors={getLatestErrorField(loginData, isFailedRemovedContactMethod ? 'deletedLogin' : 'defaultLogin')}
232245
errorRowStyles={[themeStyles.ml8, themeStyles.mr5]}
233-
onClose={() => User.clearContactMethodErrors(contactMethod, isFailedRemovedContactMethod ? 'deletedLogin' : 'defaultLogin')}
246+
onClose={() => clearContactMethodErrors(contactMethod, isFailedRemovedContactMethod ? 'deletedLogin' : 'defaultLogin')}
234247
>
235248
<Text style={[themeStyles.ph5, themeStyles.mv3]}>{translate('contacts.yourDefaultContactMethod')}</Text>
236249
</OfflineWithFeedback>
237250
) : (
238251
<OfflineWithFeedback
239252
pendingAction={loginData.pendingFields?.deletedLogin}
240-
errors={ErrorUtils.getLatestErrorField(loginData, 'deletedLogin')}
253+
errors={getLatestErrorField(loginData, 'deletedLogin')}
241254
errorRowStyles={[themeStyles.mt6, themeStyles.ph5]}
242-
onClose={() => User.clearContactMethodErrors(contactMethod, 'deletedLogin')}
255+
onClose={() => clearContactMethodErrors(contactMethod, 'deletedLogin')}
243256
>
244257
<MenuItem
245258
title={translate('common.remove')}
246-
icon={Expensicons.Trashcan}
259+
icon={Trashcan}
247260
iconFill={theme.danger}
248261
onPress={() => toggleDeleteModal(true)}
249262
/>
@@ -265,11 +278,11 @@ function ContactMethodDetailsPage({route}: ContactMethodDetailsPageProps) {
265278
<ScrollView keyboardShouldPersistTaps="handled">
266279
{isFailedAddContactMethod && (
267280
<ErrorMessageRow
268-
errors={ErrorUtils.getLatestErrorField(loginData, 'addedLogin')}
281+
errors={getLatestErrorField(loginData, 'addedLogin')}
269282
errorRowStyles={[themeStyles.mh5, themeStyles.mv3]}
270283
onClose={() => {
271-
User.clearContactMethod(contactMethod);
272-
User.clearUnvalidatedNewContactMethodAction();
284+
clearContactMethod(contactMethod);
285+
clearUnvalidatedNewContactMethodAction();
273286
Navigation.goBack(ROUTES.SETTINGS_CONTACT_METHODS.getRoute(backTo));
274287
}}
275288
canDismissError
@@ -282,14 +295,14 @@ function ContactMethodDetailsPage({route}: ContactMethodDetailsPageProps) {
282295
hasMagicCodeBeenSent={hasMagicCodeBeenSent}
283296
isVisible={isValidateCodeActionModalVisible && !loginData.validatedDate && !!loginData}
284297
validatePendingAction={loginData.pendingFields?.validateCodeSent}
285-
handleSubmitForm={(validateCode) => User.validateSecondaryLogin(loginList, contactMethod, validateCode)}
286-
validateError={!isEmptyObject(validateLoginError) ? validateLoginError : ErrorUtils.getLatestErrorField(loginData, 'validateCodeSent')}
287-
clearError={() => User.clearContactMethodErrors(contactMethod, !isEmptyObject(validateLoginError) ? 'validateLogin' : 'validateCodeSent')}
298+
handleSubmitForm={(validateCode) => validateSecondaryLogin(loginList, contactMethod, validateCode)}
299+
validateError={!isEmptyObject(validateLoginError) ? validateLoginError : getLatestErrorField(loginData, 'validateCodeSent')}
300+
clearError={() => clearContactMethodErrors(contactMethod, !isEmptyObject(validateLoginError) ? 'validateLogin' : 'validateCodeSent')}
288301
onClose={() => {
289302
Navigation.goBack(ROUTES.SETTINGS_CONTACT_METHODS.getRoute(backTo));
290303
setIsValidateCodeActionModalVisible(false);
291304
}}
292-
sendValidateCode={() => User.requestContactMethodValidateCode(contactMethod)}
305+
sendValidateCode={() => requestContactMethodValidateCode(contactMethod)}
293306
descriptionPrimary={translate('contacts.enterMagicCode', {contactMethod: formattedContactMethod})}
294307
onThreeDotsButtonPress={() => {
295308
// Hide the keyboard when the user clicks the three-dot menu.

0 commit comments

Comments
 (0)