import { useNavigate } from "react-router-dom"; import { payCart } from "@api/cart"; const MINUTE = 1000 * 60; export const useAfterpay = () => { const navigate = useNavigate(); const checkPayment = () => { const redirectUrl = new URL(window.location.href); redirectUrl.searchParams.set("afterpay", "false"); navigate(redirectUrl); const payCartPendingRequestDeadline = localStorage.getItem( "payCartPendingRequestDeadline", ); const deadline = payCartPendingRequestDeadline ? Number(payCartPendingRequestDeadline) : Date.now() + 20 * MINUTE; localStorage.setItem("payCartPendingRequestDeadline", deadline.toString()); let tryCount = 0; tryPayCart(); async function tryPayCart() { tryCount += 1; const [, payCartError] = await payCart(); if (!payCartError || Date.now() > deadline) { localStorage.removeItem("payCartPendingRequestDeadline"); return; } setTimeout(tryPayCart, tryCount > 5 ? MINUTE / 2 : MINUTE / 6); } }; const checkParams = () => { const afterpay = new URLSearchParams(window.location.search).get( "afterpay", ); if (afterpay) { checkPayment(); } }; setInterval(checkParams, 5000); };