import { type IorangePaymentStarter, getTransactionStatus, getTransactionsData, } from "@/utils/requests/orangePayment"; import { useMutation } from "@tanstack/react-query"; import * as WebBrowser from "expo-web-browser"; import { useState } from "react"; const paymentObjectDefault: IorangePaymentStarter = { // biome-ignore lint/style/useNamingConvention: type_paiement: 1, marchand: "1", service: "1", montant: 0, numero: "0707070707", commentaire: "Un commentaire", }; const useOrangeMoney = () => { const [isBrowserOpen, setIsBrowserOpen] = useState(false); const handlePaymentUsingBrowser = async (url: string) => { setIsBrowserOpen(true); const result = await WebBrowser.openBrowserAsync(url); // setResult(result); console.log("result", result); setIsBrowserOpen(false); }; const orangeTransactionInitializerMutation = useMutation({ mutationFn: (amount: number) => getTransactionsData({ ...paymentObjectDefault, montant: amount, }), onSuccess: async (data) => { // return data.payment_url console.log("om start success ", data); await handlePaymentUsingBrowser(data.payment_url); // await transactionsStatusMutation.mutate(data.order_id); // setResult(result); }, onError: (err) => { console.log("om start error ", err); }, }); const maxRetry = 3; const retryDelay = 5000; const transactionsStatusMutation = useMutation({ mutationFn: (orderId: string) => getTransactionStatus(orderId), onSuccess: (data) => { console.log("useOrangeMoney Check status :: ", data); return data.status; }, onError: (err) => { console.log("useOrangeMoney Error ::", err); }, retry: (failureCount, error) => { return failureCount < maxRetry; }, retryDelay(failureCount, error) { console.log("failureCount", failureCount, "error", error); return retryDelay; }, }); return { orangeTransactionInitializerMutation: orangeTransactionInitializerMutation, handlePaymentUsingBrowser, isBrowserOpen, isWaitingForOmPaymentUrl: orangeTransactionInitializerMutation.isPending, isCheckingForTransactionStatus: transactionsStatusMutation.isPending, transactionsStatusMutation, }; }; export default useOrangeMoney;