import React, { useState, useEffect, useContext } from "react"; import FakeStorage from "../helpers/FakeStorage"; type AuthContextValue = { password: string; setPassword: React.Dispatch>; }; const AuthContext = React.createContext(undefined); let storage: Storage | FakeStorage; try { sessionStorage.setItem("__test", "__test"); sessionStorage.removeItem("__test"); storage = sessionStorage; } catch (e) { console.warn("Session storage is disabled, no authentication will be saved"); storage = new FakeStorage(); } export function AuthProvider({ children }: { children: React.ReactNode }) { const [password, setPassword] = useState( storage.getItem("auth") || "" ); useEffect(() => { storage.setItem("auth", password); }, [password]); const value = { password, setPassword, }; return {children}; } export function useAuth() { const context = useContext(AuthContext); if (context === undefined) { throw new Error("useAuth must be used within a AuthProvider"); } return context; } export default AuthContext;