diff --git a/src/scenes/Profile/AccountManagement.js b/src/scenes/Profile/AccountManagement.js
index aafc0ab..fe13b97 100644
--- a/src/scenes/Profile/AccountManagement.js
+++ b/src/scenes/Profile/AccountManagement.js
@@ -20,6 +20,7 @@ export default function AccountManagement({
profileData,
openAccountModal,
waitingSmsType,
+ clearAuthWaitParams,
}) {
const { colors, custom } = useTheme();
const isConnected = isConnectedProfile(profileData);
@@ -136,6 +137,7 @@ export default function AccountManagement({
modalState={modalState}
profileData={profileData}
waitingSmsType={waitingSmsType}
+ clearAuthWaitParams={clearAuthWaitParams}
/>
);
diff --git a/src/scenes/Profile/AccountManagementModal.js b/src/scenes/Profile/AccountManagementModal.js
index 81a2f31..2568204 100644
--- a/src/scenes/Profile/AccountManagementModal.js
+++ b/src/scenes/Profile/AccountManagementModal.js
@@ -12,6 +12,7 @@ export default function AccountManagementModal({
modalState,
profileData,
waitingSmsType,
+ clearAuthWaitParams,
}) {
const styles = useStyles();
const [modal, setModal] = modalState;
@@ -38,6 +39,7 @@ export default function AccountManagementModal({
authMethod={authMethod}
setAuthMethod={setAuthMethod}
waitingSmsType={waitingSmsType}
+ clearAuthWaitParams={clearAuthWaitParams}
/>
)}
{visible && component === "destroy" && (
diff --git a/src/scenes/Profile/AccountManagementModalConnect.js b/src/scenes/Profile/AccountManagementModalConnect.js
index acea2a6..a4c84fb 100644
--- a/src/scenes/Profile/AccountManagementModalConnect.js
+++ b/src/scenes/Profile/AccountManagementModalConnect.js
@@ -29,6 +29,7 @@ export default function AccountManagementModalConnect({
authMethod,
setAuthMethod,
waitingSmsType,
+ clearAuthWaitParams,
}) {
const styles = useStyles();
const { colors, custom } = useTheme();
@@ -92,20 +93,39 @@ export default function AccountManagementModalConnect({
const [loginConfirmRequest] = useMutation(LOGIN_CONFIRM_MUTATION);
const confirmLoginRequest = useCallback(async () => {
- const deviceUuid = await getDeviceUuid();
- const {
- data: {
- doAuthLoginConfimLoginRequest: { authTokenJwt },
- },
- } = await loginConfirmRequest({
- variables: { loginRequestId: loginRequest.id, deviceUuid },
- });
- await authActions.confirmLoginRequest({ authTokenJwt, isConnected });
- }, [loginConfirmRequest, loginRequest?.id, isConnected]);
+ try {
+ const deviceUuid = await getDeviceUuid();
+ const {
+ data: {
+ doAuthLoginConfimLoginRequest: { authTokenJwt },
+ },
+ } = await loginConfirmRequest({
+ variables: { loginRequestId: loginRequest.id, deviceUuid },
+ });
+ await authActions.confirmLoginRequest({ authTokenJwt, isConnected });
+ setIsLoading(false);
+ clearAuthWaitParams?.();
+ closeModal();
+ } catch (e) {
+ setIsLoading(false);
+ }
+ }, [
+ loginConfirmRequest,
+ loginRequest?.id,
+ isConnected,
+ clearAuthWaitParams,
+ closeModal,
+ ]);
const rejectLoginRequest = useCallback(async () => {
- await deleteLoginRequest({ variables: { id: loginRequest.id } });
- }, [deleteLoginRequest, loginRequest]);
+ try {
+ await deleteLoginRequest({ variables: { id: loginRequest.id } });
+ } finally {
+ setIsLoading(false);
+ clearAuthWaitParams?.();
+ closeModal();
+ }
+ }, [deleteLoginRequest, loginRequest?.id, clearAuthWaitParams, closeModal]);
return (
-
+
diff --git a/src/scenes/Profile/PhoneNumbers.js b/src/scenes/Profile/PhoneNumbers.js
index a75eb03..2b44124 100644
--- a/src/scenes/Profile/PhoneNumbers.js
+++ b/src/scenes/Profile/PhoneNumbers.js
@@ -26,7 +26,11 @@ import {
import useSendAuthSMS from "~/hooks/useSendAuthSMS";
-export default function PhoneNumbersView({ data, waitingSmsType }) {
+export default function PhoneNumbersView({
+ data,
+ waitingSmsType,
+ clearAuthWaitParams,
+}) {
const [isLoading, setIsLoading] = useState(waitingSmsType === "R" || false);
const phoneNumberList = data.selectOneUser.manyPhoneNumber;
@@ -69,8 +73,16 @@ export default function PhoneNumbersView({ data, waitingSmsType }) {
useEffect(() => {
if (data.selectOneUser.oneUserLoginRequest) {
setIsLoading(false);
+ clearAuthWaitParams?.();
}
- }, [data.selectOneUser.oneUserLoginRequest]);
+ }, [data.selectOneUser.oneUserLoginRequest, clearAuthWaitParams]);
+
+ // Defensive cleanup on unmount to ensure no lingering loader
+ useEffect(() => {
+ return () => {
+ setIsLoading(false);
+ };
+ }, []);
const deletePhoneNumberModalStatePair = useState({ visible: false });
const [deletePhoneNumberModalState, setDeletePhoneNumberModalState] =
diff --git a/src/scenes/Profile/index.js b/src/scenes/Profile/index.js
index 0f229ad..a4ddb2d 100644
--- a/src/scenes/Profile/index.js
+++ b/src/scenes/Profile/index.js
@@ -37,6 +37,13 @@ export default withConnectivity(function Profile({ navigation, route }) {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [userId]);
+ const clearAuthWaitParams = React.useCallback(() => {
+ navigation.setParams({
+ waitingSmsType: undefined,
+ openAccountModal: undefined,
+ });
+ }, [navigation]);
+
if (loading || !data?.selectOneUser) {
return ;
}
@@ -53,6 +60,7 @@ export default withConnectivity(function Profile({ navigation, route }) {
profileData={data}
openAccountModal={route.params?.openAccountModal}
waitingSmsType={route.params?.waitingSmsType}
+ clearAuthWaitParams={clearAuthWaitParams}
/>
);