From bc445c69d97c3855d74195b5ff5db54b3ea87c0d Mon Sep 17 00:00:00 2001 From: g-ouattara Date: Fri, 6 Sep 2024 14:06:26 +0000 Subject: [PATCH] using appstate to listen to browser closing. Current implementation is wack tho. waiting for the api to be fixed to handle response properly --- src/hooks/useOrangeMoney.tsx | 50 +++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/src/hooks/useOrangeMoney.tsx b/src/hooks/useOrangeMoney.tsx index d921f2e..7810905 100644 --- a/src/hooks/useOrangeMoney.tsx +++ b/src/hooks/useOrangeMoney.tsx @@ -13,7 +13,9 @@ import type { NativeStackNavigationProp } from "@react-navigation/native-stack"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import { AxiosError } from "axios"; import * as WebBrowser from "expo-web-browser"; -import { useState } from "react"; +import { useRef, useState } from "react"; + +import { AppState, Platform } from "react-native"; const log = LOG.extend("useOrangeMoney"); @@ -37,6 +39,8 @@ const useOrangeMoney = ( const [isBrowserOpen, setIsBrowserOpen] = useState(false); const { showModal, closeModal } = useModalsManagerContext(); + const appState = useRef(AppState.currentState); + const [appStateVisible, setAppStateVisible] = useState(appState.current); const handlePaymentUsingBrowser = async (url: string) => { setIsBrowserOpen(true); @@ -121,12 +125,44 @@ const useOrangeMoney = ( const openBrowserThenCheckStatus = async (paymentUrl: string, orderId: string) => { try { await handlePaymentUsingBrowser(paymentUrl); - log.info("openBrowserThenCheckStatus | Verifying transaction status..."); - showModal(); - // await transactionsStatusMutation.mutateAsync(orderId); - const message = await checkStatus(orderId); - if (message) { - showModal(); + if (Platform.OS === "android") { + log.debug( + "useOrangeMoney | openBrowserThenCheckStatus | Android device. Setup listener for browser close event.", + ); + const sub = AppState.addEventListener("change", async (nextAppState) => { + log.debug( + "useOrangeMoney | openBrowserThenCheckStatus | Android device. Browser state :", + nextAppState, + ); + + if (nextAppState === "active") { + log.debug( + "useOrangeMoney | openBrowserThenCheckStatus | Android device. Browser is closed. Removing listener. Checking for transaction State.", + ); + sub.remove(); + log.info("openBrowserThenCheckStatus | Verifying transaction status..."); + showModal( + , + ); + // await transactionsStatusMutation.mutateAsync(orderId); + const message = await checkStatus(orderId); + if (message) { + showModal(); + } else { + navigation?.getParent()?.navigate("paymentResultScreen"); + } + } + }); + } else { + log.info("openBrowserThenCheckStatus | Verifying transaction status..."); + showModal(); + // await transactionsStatusMutation.mutateAsync(orderId); + const message = await checkStatus(orderId); + if (message) { + showModal(); + } else { + navigation?.getParent()?.navigate("paymentResultScreen"); + } } // closeModal(); } catch (error: unknown) { -- libgit2 0.27.1