ai-generated junk tool for migrating atproto identities in-browser
at main 38 lines 1.1 kB view raw
1import { createContext, useContext, useState, useEffect, ReactNode } from 'react'; 2 3interface NetworkContextType { 4 isOnline: boolean; 5} 6 7const NetworkContext = createContext<NetworkContextType | undefined>(undefined); 8 9export function NetworkProvider({ children }: { children: ReactNode }) { 10 const [isOnline, setIsOnline] = useState(navigator.onLine); 11 12 useEffect(() => { 13 const handleOnline = () => setIsOnline(true); 14 const handleOffline = () => setIsOnline(false); 15 16 window.addEventListener('online', handleOnline); 17 window.addEventListener('offline', handleOffline); 18 19 return () => { 20 window.removeEventListener('online', handleOnline); 21 window.removeEventListener('offline', handleOffline); 22 }; 23 }, []); 24 25 return ( 26 <NetworkContext.Provider value={{ isOnline }}> 27 {children} 28 </NetworkContext.Provider> 29 ); 30} 31 32export function useNetwork() { 33 const context = useContext(NetworkContext); 34 if (context === undefined) { 35 throw new Error('useNetwork must be used within a NetworkProvider'); 36 } 37 return context; 38}