frontPanel/src/utils/hooks/useAfterpay.ts

56 lines
1.5 KiB
TypeScript
Raw Normal View History

2024-04-01 14:49:00 +00:00
import { useNavigate } from "react-router-dom";
2024-04-06 09:07:30 +00:00
import { useWallet, setCash } from "@root/cash";
2024-04-01 14:49:00 +00:00
import { payCart } from "@api/cart";
2024-04-06 09:07:30 +00:00
import { currencyFormatter } from "../../pages/Tariffs/tariffsUtils/currencyFormatter";
2024-04-01 14:49:00 +00:00
const MINUTE = 1000 * 60;
export const useAfterpay = () => {
const navigate = useNavigate();
2024-04-06 09:07:30 +00:00
const { cash } = useWallet()
2024-04-01 14:49:00 +00:00
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;
2024-04-06 09:07:30 +00:00
const [data, payCartError] = await payCart();
if (data !== null) setCash(currencyFormatter.format(Number(data.wallet.cash) / 100));
2024-04-01 14:49:00 +00:00
if (!payCartError || Date.now() > deadline) {
localStorage.removeItem("payCartPendingRequestDeadline");
return;
}
2024-04-06 09:07:30 +00:00
setTimeout(tryPayCart, tryCount > 10 ? MINUTE / 60 : MINUTE / 6);
2024-04-01 14:49:00 +00:00
}
};
const checkParams = () => {
const afterpay = new URLSearchParams(window.location.search).get(
"afterpay",
);
if (afterpay) {
checkPayment();
}
};
setInterval(checkParams, 5000);
};