Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | import React, { useState, useEffect } from "react"; import { useLocation, Redirect } from "react-router-dom"; /** @private */ interface Props { children: JSX.Element; } /** @private */ const isReady = (): boolean => document.readyState !== "loading"; export default function WrapperFor404RedirectsFromGitHubPages({ children }: Props): JSX.Element { const location = useLocation(); const [ triedPath, setTriedPath ] = useState<string>(); const [ ready, setReady ] = useState(isReady()); const [ keepAlive, setKeepAlive ] = useState<number>(); useEffect(() => { const tried = new URLSearchParams(location.search).get("tried"); if (tried != null) setTriedPath(tried); }, [ location ]); useEffect(() => { if (!ready && isReady()) setReady(true); }, [ ready, keepAlive ]); useEffect(() => { let timeoutID = setTimeout(function tick() { setKeepAlive(Math.random()); if (!ready) timeoutID = setTimeout(tick, 1000); }, 1000); return (): void => { clearTimeout(timeoutID); }; }, [ ready ]); if (triedPath != null && triedPath !== window.location.pathname) return <Redirect to={triedPath} />; if (!ready) return <></>; return children; } |