import React, { useState, useEffect, useContext } from 'react'; import { useAsyncFn, useAsyncRetry } from 'react-use'; import { serverCheck } from '../api/NirvanaApi'; interface IStabilityContext { isServerHealthy: boolean; } const StabilityContext = React.createContext({ isServerHealthy: false, }); export function StabilityProvider({ children }: { children: React.ReactNode }) { const state = useAsyncRetry(serverCheck, []); const [isOffline, setIsOffline] = useState(false); // handle network connection useEffect(() => { setIsOffline(!navigator.onLine); window.addEventListener('online', () => setIsOffline(false)); window.addEventListener('offline', () => setIsOffline(true)); }, [setIsOffline]); useEffect(() => { const interval = setInterval(() => { if (!state.loading) state.retry(); }, 5000); return () => clearInterval(interval); }, [state.loading]); if (isOffline) return (
{'poor network connection... :('}{' '}
); if (state.error || state.loading) return (
{'sorry this is our bad. servers are rebooting... :('}
{'try refresh or restart application'}
{'call me for emergencies : (949)237-2715'}
); return ( {children} ); } export default function useStabilityContext() { return useContext(StabilityContext); }