import { useModalsManagerContext } from "@/contexts/ModalsManagerContext"; import type { PaymentStackScreenComponentProps } from "@/navigations/Types"; import BeasyLogoIcon from "@components/BeasyLogoIcon"; import Button from "@components/Button"; import GoBackIconButton from "@components/GoBackIconButton"; import InputWithTopLabel from "@components/InputWithTopLabel"; import PaymentOption from "@components/PaymentOption"; import BackgroundDefault from "@components/backgrounds/BackgroundDefault"; import Box from "@components/bases/Box"; import Text from "@components/bases/Text"; import useOrangeMoney from "@hooks/useOrangeMoney"; import useWave from "@hooks/useWave"; import { LOG } from "@logger"; import { useCallback, useState } from "react"; import { Keyboard, View } from "react-native"; import { useSafeAreaInsets } from "react-native-safe-area-context"; const log = LOG.extend("PaymentAmountInputScreen"); const PaymentAmountInputScreen: PaymentStackScreenComponentProps<"paymentAmountInputScreen"> = ({ route, navigation, }) => { log.debug("PaymentAmountInputScreen"); const { paymentType } = route.params; const [amountToPay, setAmountToPay] = useState(0); const { showModal, closeModal } = useModalsManagerContext(); const { orangeTransactionInitializerMutation, handlePaymentUsingBrowser, isBrowserOpen, isWaitingForOmPaymentUrl, isCheckingForTransactionStatus, transactionsStatusMutation, orangePaymentTransactionHandler, } = useOrangeMoney(navigation); const { waveTransactionHandler } = useWave(navigation); const insets = useSafeAreaInsets(); log.debug({ isWaitingForOmPaymentUrl, isCheckingForTransactionStatus, isBrowserOpen, }); const updateAmountToPay = (amount: string) => { const amountParsed = Number.parseInt(amount); if (!Number.isNaN(amountParsed)) { return setAmountToPay(amountParsed); } return setAmountToPay(0); }; const handlePaymentButton = useCallback(async () => { switch (paymentType) { case "OM": { Keyboard.dismiss(); log.info("OM so we stays on screen !!"); // await orangePaymentSequence(); try { await orangePaymentTransactionHandler(amountToPay); // navigation.getParent()?.navigate("paymentResultScreen"); } catch (error) { log.error("handlePaymentButton |", error); } break; } case "WAVE": { try { log.info("Wave so we stay on screen."); await waveTransactionHandler(amountToPay); } catch (error) { log.error("handlePaymentButton Wave|", error); } break; } default: log.info("Navigating to numberAndOtpForPaymentScreen"); navigation.navigate("numberAndOtpForPaymentScreen"); break; } }, [ paymentType, navigation, amountToPay, orangePaymentTransactionHandler, waveTransactionHandler, ]); return ( {/* */} {transactionsStatusMutation.isPending && } navigation.goBack()} /> {/* */} Montant à payé {amountToPay} {}} paymentMethod={paymentType} /> updateAmountToPay(e)} />