import { useEffect, useContext, createContext } from "react"; import { useLocalStorage } from "../hooks/useLocalStorage"; const AuthContext = createContext({ signedIn: false, setSignedIn: () => null, sessionOver: new Date(), setSessionOver: () => null, setPlayer: () => null, player: null, signOut: () => null, }); export const useAuthContext = () => useContext(AuthContext); export const AuthProvider = ({ children }) => { const [signedIn, setSignedIn] = useLocalStorage("signedIn", false); const [sessionOver, setSessionOver] = useLocalStorage( "sessionOver", Date.now() ); const [player, setPlayer] = useLocalStorage("player", null); const setDefaults = () => { setPlayer(null); setSessionOver(Date.now()); setSignedIn(false); }; const signOut = () => fetch("/api/player/logout", { method: "GET", credentials: "same-origin", }).then(setDefaults); useEffect(() => { setTimeout(() => { setSessionOver((sessionOver) => { if (Date.now() >= sessionOver) { setSignedIn(false); setPlayer(null); } return sessionOver; }); }, sessionOver - Date.now()); // eslint-disable-next-line react-hooks/exhaustive-deps }, [sessionOver]); return ( {children} ); };