diff --git a/src/features/Auth/pages/LoginPage/LoginPage.tsx b/src/features/Auth/pages/LoginPage/LoginPage.tsx index 75ddbbb..a7fd37d 100644 --- a/src/features/Auth/pages/LoginPage/LoginPage.tsx +++ b/src/features/Auth/pages/LoginPage/LoginPage.tsx @@ -1,4 +1,4 @@ -import { useCallback, useEffect, useState } from "react" +import { useCallback, useEffect, useRef, useState } from "react" import { Helmet } from "react-helmet"; import { Grid } from "react-loader-spinner"; import { useNavigate, useLocation } from "react-router-dom"; @@ -62,6 +62,7 @@ export default function LoginPage() { const location = useLocation(); const [copied, setCopied] = useState(false); + const canFetchIsLogged = useRef(true) const { loadingLnurl, data: { lnurl, session_token }, error } = useLnurlQuery(); const clipboard = useCopyToClipboard() @@ -96,18 +97,26 @@ export default function LoginPage() { const startPolling = useCallback( () => { const interval = setInterval(() => { + if (canFetchIsLogged.current === false) return; + + canFetchIsLogged.current = false; fetch(CONSTS.apiEndpoint + '/is-logged-in', { credentials: 'include', headers: { session_token } - }).then(data => data.json()) + }) + .then(data => data.json()) .then(data => { if (data.logged_in) { clearInterval(interval) refetch(); } }) + .catch() + .finally(() => { + canFetchIsLogged.current = true; + }) }, 2000); return interval; @@ -123,6 +132,7 @@ export default function LoginPage() { interval = startPolling(); return () => { + canFetchIsLogged.current = true; clearInterval(interval) } }, [lnurl, startPolling]) diff --git a/src/features/Tournaments/pages/OverviewPage/RegisterationModals/LoginModal/LoginModal.tsx b/src/features/Tournaments/pages/OverviewPage/RegisterationModals/LoginModal/LoginModal.tsx index 88cdba8..7c68e50 100644 --- a/src/features/Tournaments/pages/OverviewPage/RegisterationModals/LoginModal/LoginModal.tsx +++ b/src/features/Tournaments/pages/OverviewPage/RegisterationModals/LoginModal/LoginModal.tsx @@ -6,7 +6,7 @@ import { useMeTournamentQuery } from 'src/graphql'; import Button from 'src/Components/Button/Button'; import { QRCodeSVG } from 'qrcode.react'; import { Grid } from 'react-loader-spinner'; -import { useCallback, useEffect, useState } from 'react'; +import { useCallback, useEffect, useRef, useState } from 'react'; import { CONSTS } from 'src/utils'; import useCopyToClipboard from 'src/utils/hooks/useCopyToClipboard'; import { useLnurlQuery } from 'src/features/Auth/pages/LoginPage/LoginPage'; @@ -24,7 +24,9 @@ export default function LinkingAccountModal({ onClose, direction, tournamentId, const [copied, setCopied] = useState(false); const { loadingLnurl, data: { lnurl, session_token }, error } = useLnurlQuery(); - const clipboard = useCopyToClipboard() + const clipboard = useCopyToClipboard(); + + const canFetchIsLogged = useRef(true) const dispatch = useAppDispatch(); @@ -64,18 +66,26 @@ export default function LinkingAccountModal({ onClose, direction, tournamentId, const startPolling = useCallback( () => { const interval = setInterval(() => { + if (canFetchIsLogged.current === false) return; + + canFetchIsLogged.current = false; fetch(CONSTS.apiEndpoint + '/is-logged-in', { credentials: 'include', headers: { session_token } - }).then(data => data.json()) + }) + .then(data => data.json()) .then(data => { if (data.logged_in) { clearInterval(interval) refetch(); } }) + .catch() + .finally(() => { + canFetchIsLogged.current = true; + }) }, 2000); return interval; @@ -91,6 +101,7 @@ export default function LinkingAccountModal({ onClose, direction, tournamentId, interval = startPolling(); return () => { + canFetchIsLogged.current = true; clearInterval(interval) } }, [lnurl, startPolling])