fix: connect loader

This commit is contained in:
devthejo 2025-10-23 22:51:43 +02:00
parent 52fc3bc24b
commit cccb49134f
No known key found for this signature in database
GPG key ID: 00CCA7A92B1D5351
6 changed files with 65 additions and 15 deletions

View file

@ -20,6 +20,7 @@ export default function AccountManagement({
profileData, profileData,
openAccountModal, openAccountModal,
waitingSmsType, waitingSmsType,
clearAuthWaitParams,
}) { }) {
const { colors, custom } = useTheme(); const { colors, custom } = useTheme();
const isConnected = isConnectedProfile(profileData); const isConnected = isConnectedProfile(profileData);
@ -136,6 +137,7 @@ export default function AccountManagement({
modalState={modalState} modalState={modalState}
profileData={profileData} profileData={profileData}
waitingSmsType={waitingSmsType} waitingSmsType={waitingSmsType}
clearAuthWaitParams={clearAuthWaitParams}
/> />
</View> </View>
); );

View file

@ -12,6 +12,7 @@ export default function AccountManagementModal({
modalState, modalState,
profileData, profileData,
waitingSmsType, waitingSmsType,
clearAuthWaitParams,
}) { }) {
const styles = useStyles(); const styles = useStyles();
const [modal, setModal] = modalState; const [modal, setModal] = modalState;
@ -38,6 +39,7 @@ export default function AccountManagementModal({
authMethod={authMethod} authMethod={authMethod}
setAuthMethod={setAuthMethod} setAuthMethod={setAuthMethod}
waitingSmsType={waitingSmsType} waitingSmsType={waitingSmsType}
clearAuthWaitParams={clearAuthWaitParams}
/> />
)} )}
{visible && component === "destroy" && ( {visible && component === "destroy" && (

View file

@ -29,6 +29,7 @@ export default function AccountManagementModalConnect({
authMethod, authMethod,
setAuthMethod, setAuthMethod,
waitingSmsType, waitingSmsType,
clearAuthWaitParams,
}) { }) {
const styles = useStyles(); const styles = useStyles();
const { colors, custom } = useTheme(); const { colors, custom } = useTheme();
@ -92,20 +93,39 @@ export default function AccountManagementModalConnect({
const [loginConfirmRequest] = useMutation(LOGIN_CONFIRM_MUTATION); const [loginConfirmRequest] = useMutation(LOGIN_CONFIRM_MUTATION);
const confirmLoginRequest = useCallback(async () => { const confirmLoginRequest = useCallback(async () => {
const deviceUuid = await getDeviceUuid(); try {
const { const deviceUuid = await getDeviceUuid();
data: { const {
doAuthLoginConfimLoginRequest: { authTokenJwt }, data: {
}, doAuthLoginConfimLoginRequest: { authTokenJwt },
} = await loginConfirmRequest({ },
variables: { loginRequestId: loginRequest.id, deviceUuid }, } = await loginConfirmRequest({
}); variables: { loginRequestId: loginRequest.id, deviceUuid },
await authActions.confirmLoginRequest({ authTokenJwt, isConnected }); });
}, [loginConfirmRequest, loginRequest?.id, isConnected]); await authActions.confirmLoginRequest({ authTokenJwt, isConnected });
setIsLoading(false);
clearAuthWaitParams?.();
closeModal();
} catch (e) {
setIsLoading(false);
}
}, [
loginConfirmRequest,
loginRequest?.id,
isConnected,
clearAuthWaitParams,
closeModal,
]);
const rejectLoginRequest = useCallback(async () => { const rejectLoginRequest = useCallback(async () => {
await deleteLoginRequest({ variables: { id: loginRequest.id } }); try {
}, [deleteLoginRequest, loginRequest]); await deleteLoginRequest({ variables: { id: loginRequest.id } });
} finally {
setIsLoading(false);
clearAuthWaitParams?.();
closeModal();
}
}, [deleteLoginRequest, loginRequest?.id, clearAuthWaitParams, closeModal]);
return ( return (
<View <View

View file

@ -48,6 +48,7 @@ export default function Form({
profileData, profileData,
openAccountModal, openAccountModal,
waitingSmsType, waitingSmsType,
clearAuthWaitParams,
}) { }) {
const { userId } = useSessionState(["userId"]); const { userId } = useSessionState(["userId"]);
@ -153,7 +154,11 @@ export default function Form({
borderBottomWidth: 1, borderBottomWidth: 1,
}} }}
> >
<PhoneNumbers data={profileData} waitingSmsType={waitingSmsType} /> <PhoneNumbers
data={profileData}
waitingSmsType={waitingSmsType}
clearAuthWaitParams={clearAuthWaitParams}
/>
</View> </View>
<View <View
@ -190,6 +195,7 @@ export default function Form({
profileData={profileData} profileData={profileData}
openAccountModal={openAccountModal} openAccountModal={openAccountModal}
waitingSmsType={waitingSmsType} waitingSmsType={waitingSmsType}
clearAuthWaitParams={clearAuthWaitParams}
/> />
</View> </View>
</View> </View>

View file

@ -26,7 +26,11 @@ import {
import useSendAuthSMS from "~/hooks/useSendAuthSMS"; 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 [isLoading, setIsLoading] = useState(waitingSmsType === "R" || false);
const phoneNumberList = data.selectOneUser.manyPhoneNumber; const phoneNumberList = data.selectOneUser.manyPhoneNumber;
@ -69,8 +73,16 @@ export default function PhoneNumbersView({ data, waitingSmsType }) {
useEffect(() => { useEffect(() => {
if (data.selectOneUser.oneUserLoginRequest) { if (data.selectOneUser.oneUserLoginRequest) {
setIsLoading(false); 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 deletePhoneNumberModalStatePair = useState({ visible: false });
const [deletePhoneNumberModalState, setDeletePhoneNumberModalState] = const [deletePhoneNumberModalState, setDeletePhoneNumberModalState] =

View file

@ -37,6 +37,13 @@ export default withConnectivity(function Profile({ navigation, route }) {
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, [userId]); }, [userId]);
const clearAuthWaitParams = React.useCallback(() => {
navigation.setParams({
waitingSmsType: undefined,
openAccountModal: undefined,
});
}, [navigation]);
if (loading || !data?.selectOneUser) { if (loading || !data?.selectOneUser) {
return <Loader />; return <Loader />;
} }
@ -53,6 +60,7 @@ export default withConnectivity(function Profile({ navigation, route }) {
profileData={data} profileData={data}
openAccountModal={route.params?.openAccountModal} openAccountModal={route.params?.openAccountModal}
waitingSmsType={route.params?.waitingSmsType} waitingSmsType={route.params?.waitingSmsType}
clearAuthWaitParams={clearAuthWaitParams}
/> />
</ScrollView> </ScrollView>
); );