frontPanel/src/utils/hooks/useAfterpay.ts

77 lines
2.1 KiB
TypeScript
Raw Normal View History

2024-04-01 14:49:00 +00:00
import { useNavigate } from "react-router-dom";
2024-04-08 09:37:42 +00:00
import { setCash } from "@root/cash";
import { useUserStore } from "@root/user";
2024-04-01 14:49:00 +00:00
import { payCart } from "@api/cart";
import { currencyFormatter } from "../../pages/Tariffs/tariffsUtils/currencyFormatter";
2024-04-01 14:49:00 +00:00
const MINUTE = 1000 * 60;
export const useAfterpay = () => {
2024-04-08 09:37:42 +00:00
const userId = useUserStore((state) => state.userId);
2024-04-01 14:49:00 +00:00
const navigate = useNavigate();
const checkPayment = () => {
const redirectUrl = new URL(window.location.href);
2024-04-08 12:56:46 +00:00
const paymentUserId = redirectUrl.searchParams.get("userid");
2024-04-01 14:49:00 +00:00
redirectUrl.searchParams.set("afterpay", "false");
navigate(redirectUrl);
2024-04-08 12:56:46 +00:00
if (userId !== paymentUserId) {
return;
}
2024-04-01 14:49:00 +00:00
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),
Number(data.wallet.cash),
Number(data.wallet.cash) / 100,
);
2024-04-01 14:49:00 +00:00
if (!payCartError || Date.now() > deadline) {
localStorage.removeItem("payCartPendingRequestDeadline");
return;
}
2024-04-10 13:55:08 +00:00
setTimeout(tryPayCart, tryCount > 5 ? MINUTE : MINUTE / 6);
2024-04-01 14:49:00 +00:00
}
};
2024-04-08 09:37:42 +00:00
2024-04-01 14:49:00 +00:00
const checkParams = () => {
2024-04-08 12:56:46 +00:00
const afterpay = new URLSearchParams(window.location.search).get(
"afterpay",
);
2024-04-01 14:49:00 +00:00
const payCartPendingRequestDeadline = localStorage.getItem(
"payCartPendingRequestDeadline",
);
const deadline = payCartPendingRequestDeadline
? Number(payCartPendingRequestDeadline)
: Date.now() + 20 * MINUTE;
if (Date.now() <= deadline) {
if (afterpay) {
checkPayment();
}
2024-04-01 14:49:00 +00:00
}
};
setInterval(checkParams, 5000);
2024-04-08 12:56:46 +00:00
checkParams();
2024-04-01 14:49:00 +00:00
};