stability provider server check and network check
This commit is contained in:
@@ -42,8 +42,8 @@
|
|||||||
[
|
[
|
||||||
"@electron-forge/plugin-webpack",
|
"@electron-forge/plugin-webpack",
|
||||||
{
|
{
|
||||||
"port": "4005",
|
"port": "4000",
|
||||||
"loggerPort": "9005",
|
"loggerPort": "9000",
|
||||||
"mainConfig": "./webpack.main.config.js",
|
"mainConfig": "./webpack.main.config.js",
|
||||||
"devContentSecurityPolicy": "connect-src 'self' http://localhost:5000 ws://localhost:5000 https://api.quotable.io/random 'unsafe-eval'",
|
"devContentSecurityPolicy": "connect-src 'self' http://localhost:5000 ws://localhost:5000 https://api.quotable.io/random 'unsafe-eval'",
|
||||||
"renderer": {
|
"renderer": {
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
|
|||||||
// });
|
// });
|
||||||
// }, []);
|
// }, []);
|
||||||
|
|
||||||
|
// todo: check this in intervals repeatedly
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (jwtToken) {
|
if (jwtToken) {
|
||||||
console.warn(jwtToken);
|
console.warn(jwtToken);
|
||||||
|
|||||||
@@ -22,16 +22,6 @@ export function ElectronProvider({ children }: { children: React.ReactNode }) {
|
|||||||
const [desktopMode, setDesktopMode] = useState<DesktopMode>('mainApp');
|
const [desktopMode, setDesktopMode] = useState<DesktopMode>('mainApp');
|
||||||
const [isWindowFocused, setIsWindowFocused] = useState<boolean>(false);
|
const [isWindowFocused, setIsWindowFocused] = useState<boolean>(false);
|
||||||
|
|
||||||
const [isOffline, setIsOffline] = useState<boolean>();
|
|
||||||
|
|
||||||
// handle network connection
|
|
||||||
useEffect(() => {
|
|
||||||
setIsOffline(!navigator.onLine);
|
|
||||||
|
|
||||||
window.addEventListener('online', () => setIsOffline(false));
|
|
||||||
window.addEventListener('offline', () => setIsOffline(true));
|
|
||||||
}, [setIsOffline]);
|
|
||||||
|
|
||||||
// handle all window resizing logic
|
// handle all window resizing logic
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// add dimensions if it's not overlay only mode
|
// add dimensions if it's not overlay only mode
|
||||||
@@ -90,13 +80,6 @@ export function ElectronProvider({ children }: { children: React.ReactNode }) {
|
|||||||
setDesktopMode((prevMode) => (prevMode === 'mainApp' ? 'overlayOnly' : 'mainApp'));
|
setDesktopMode((prevMode) => (prevMode === 'mainApp' ? 'overlayOnly' : 'mainApp'));
|
||||||
}, [setDesktopMode]);
|
}, [setDesktopMode]);
|
||||||
|
|
||||||
if (isOffline)
|
|
||||||
return (
|
|
||||||
<div className="h-screen w-screen bg-white flex-1 flex flex-row justify-center items-center">
|
|
||||||
<span>{'poor network connection... :('}</span>{' '}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ElectronContext.Provider value={{ desktopMode, handleToggleDesktopMode, isWindowFocused }}>
|
<ElectronContext.Provider value={{ desktopMode, handleToggleDesktopMode, isWindowFocused }}>
|
||||||
{children}
|
{children}
|
||||||
|
|||||||
@@ -0,0 +1,59 @@
|
|||||||
|
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<IStabilityContext>({
|
||||||
|
isServerHealthy: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
export function StabilityProvider({ children }: { children: React.ReactNode }) {
|
||||||
|
const state = useAsyncRetry(serverCheck, []);
|
||||||
|
const [isOffline, setIsOffline] = useState<boolean>(false);
|
||||||
|
|
||||||
|
// handle network connection
|
||||||
|
useEffect(() => {
|
||||||
|
setIsOffline(!navigator.onLine);
|
||||||
|
|
||||||
|
window.addEventListener('online', () => setIsOffline(false));
|
||||||
|
window.addEventListener('offline', () => setIsOffline(true));
|
||||||
|
}, [setIsOffline]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setInterval(() => {
|
||||||
|
state.retry();
|
||||||
|
}, 5000);
|
||||||
|
}, [state]);
|
||||||
|
|
||||||
|
if (isOffline)
|
||||||
|
return (
|
||||||
|
<div className="h-screen w-screen bg-white flex-1 flex flex-row justify-center items-center">
|
||||||
|
<span>{'poor network connection... :('}</span>{' '}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
|
if (state.error || state.loading)
|
||||||
|
return (
|
||||||
|
<div className="h-screen w-screen text-gray-400 bg-white flex-1 flex flex-col justify-center items-center">
|
||||||
|
<span>{'sorry this is our bad. servers are rebooting... :('}</span>
|
||||||
|
<br />
|
||||||
|
<span>{'try refresh or restart application'}</span>
|
||||||
|
<br />
|
||||||
|
<span>{'call me for emergencies : (949)237-2715'}</span>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<StabilityContext.Provider value={{ isServerHealthy: true }}>
|
||||||
|
{children}
|
||||||
|
</StabilityContext.Provider>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function useStabilityContext() {
|
||||||
|
return useContext(StabilityContext);
|
||||||
|
}
|
||||||
@@ -6,31 +6,34 @@ import { AuthProvider } from '../providers/AuthProvider';
|
|||||||
import { ElectronProvider } from '../providers/ElectronProvider';
|
import { ElectronProvider } from '../providers/ElectronProvider';
|
||||||
import { SocketProvider } from '../providers/SocketProvider';
|
import { SocketProvider } from '../providers/SocketProvider';
|
||||||
import ProtectedRoute from './protected/ProtectedRoute';
|
import ProtectedRoute from './protected/ProtectedRoute';
|
||||||
|
import { StabilityProvider } from '../providers/StabilityProvider';
|
||||||
export default function ElectronApp() {
|
export default function ElectronApp() {
|
||||||
return (
|
return (
|
||||||
<ElectronProvider>
|
<StabilityProvider>
|
||||||
<AuthProvider>
|
<ElectronProvider>
|
||||||
<ProtectedRoute>
|
<AuthProvider>
|
||||||
<SocketProvider>
|
<ProtectedRoute>
|
||||||
<RoomsProvider>
|
<SocketProvider>
|
||||||
<TerminalProvider>
|
<RoomsProvider>
|
||||||
<></>
|
<TerminalProvider>
|
||||||
</TerminalProvider>
|
<></>
|
||||||
</RoomsProvider>
|
</TerminalProvider>
|
||||||
</SocketProvider>
|
</RoomsProvider>
|
||||||
</ProtectedRoute>
|
</SocketProvider>
|
||||||
</AuthProvider>
|
</ProtectedRoute>
|
||||||
|
</AuthProvider>
|
||||||
|
|
||||||
<Toaster
|
<Toaster
|
||||||
position={'bottom-right'}
|
position={'bottom-right'}
|
||||||
toastOptions={{
|
toastOptions={{
|
||||||
style: {
|
style: {
|
||||||
borderRadius: '10px',
|
borderRadius: '10px',
|
||||||
background: '#333',
|
background: '#333',
|
||||||
color: '#fff',
|
color: '#fff',
|
||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</ElectronProvider>
|
</ElectronProvider>
|
||||||
|
</StabilityProvider>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user