import RetryLogin from "@/components/icons/RetryLogin"; import { changeNumToDefault } from "@/helper"; import { request } from "@/services/response"; import { Button } from "@mui/material"; import { useEffect, useRef, useState } from "react"; import Altcha from "@/components/Altcha"; const time_resend_code = 120; function Recode({ retryIcon, timer, setUuid, num, setTimer }) { const timerIntervalRef = useRef(null); const animIntervalRef = useRef(null); const [altcha, setAltcha] = useState(""); const [altchaKey, setAltchaKey] = useState(0); useEffect(() => { return () => { if (timerIntervalRef.current) clearInterval(timerIntervalRef.current); if (animIntervalRef.current) clearInterval(animIntervalRef.current); }; }, []); const handleTimer = () => { setTimer("loading"); if (timerIntervalRef.current) clearInterval(timerIntervalRef.current); setTimeout(() => { setTimer(time_resend_code); let timePresent = time_resend_code; timerIntervalRef.current = setInterval(() => { timePresent--; setTimer(timePresent); if (!timePresent) { clearInterval(timerIntervalRef.current); timerIntervalRef.current = null; } }, 1000); }, 1000); }; const rotateIcon = () => { if (!retryIcon.current) return; retryIcon.current.classList.add("retry-icon"); setTimeout(() => { retryIcon.current?.classList.remove("retry-icon"); }, 1000); }; const handleReq = () => { rotateIcon(); if (animIntervalRef.current) clearInterval(animIntervalRef.current); animIntervalRef.current = setInterval(() => { rotateIcon(); }, 1200); request .sendCode(changeNumToDefault(num), altcha, typeof window !== "undefined" ? window.location.hostname : "") .then((response) => { clearInterval(animIntervalRef.current); animIntervalRef.current = null; if (response.uuid) { setUuid(response.uuid); handleTimer(); } }) .catch(() => { clearInterval(animIntervalRef.current); animIntervalRef.current = null; // challenge یک‌بارمصرف؛ برای تلاش بعدی تازه بگیر setAltcha(""); setAltchaKey((k) => k + 1); }); }; return ( <> ); } export default Recode;