From 21d3ff881b511974e461cddf8113af4432c5785b Mon Sep 17 00:00:00 2001 From: talksik Date: Sun, 22 May 2022 04:20:50 -0500 Subject: [PATCH] stability provider server check and network check --- packages/desktop/package.json | 4 +- .../desktop/src/providers/AuthProvider.tsx | 1 + .../src/providers/ElectronProvider.tsx | 17 ------ .../src/providers/StabilityProvider.tsx | 59 +++++++++++++++++++ packages/desktop/src/tree/electronApp.tsx | 49 +++++++-------- 5 files changed, 88 insertions(+), 42 deletions(-) create mode 100644 packages/desktop/src/providers/StabilityProvider.tsx diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 0227512..86a4d99 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -42,8 +42,8 @@ [ "@electron-forge/plugin-webpack", { - "port": "4005", - "loggerPort": "9005", + "port": "4000", + "loggerPort": "9000", "mainConfig": "./webpack.main.config.js", "devContentSecurityPolicy": "connect-src 'self' http://localhost:5000 ws://localhost:5000 https://api.quotable.io/random 'unsafe-eval'", "renderer": { diff --git a/packages/desktop/src/providers/AuthProvider.tsx b/packages/desktop/src/providers/AuthProvider.tsx index 0fb426e..501e8f2 100644 --- a/packages/desktop/src/providers/AuthProvider.tsx +++ b/packages/desktop/src/providers/AuthProvider.tsx @@ -33,6 +33,7 @@ export function AuthProvider({ children }: { children: React.ReactNode }) { // }); // }, []); + // todo: check this in intervals repeatedly useEffect(() => { if (jwtToken) { console.warn(jwtToken); diff --git a/packages/desktop/src/providers/ElectronProvider.tsx b/packages/desktop/src/providers/ElectronProvider.tsx index 1822fa7..cbafbe2 100644 --- a/packages/desktop/src/providers/ElectronProvider.tsx +++ b/packages/desktop/src/providers/ElectronProvider.tsx @@ -22,16 +22,6 @@ export function ElectronProvider({ children }: { children: React.ReactNode }) { const [desktopMode, setDesktopMode] = useState('mainApp'); const [isWindowFocused, setIsWindowFocused] = useState(false); - const [isOffline, setIsOffline] = useState(); - - // handle network connection - useEffect(() => { - setIsOffline(!navigator.onLine); - - window.addEventListener('online', () => setIsOffline(false)); - window.addEventListener('offline', () => setIsOffline(true)); - }, [setIsOffline]); - // handle all window resizing logic useEffect(() => { // 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]); - if (isOffline) - return ( -
- {'poor network connection... :('}{' '} -
- ); - return ( {children} diff --git a/packages/desktop/src/providers/StabilityProvider.tsx b/packages/desktop/src/providers/StabilityProvider.tsx new file mode 100644 index 0000000..c44b283 --- /dev/null +++ b/packages/desktop/src/providers/StabilityProvider.tsx @@ -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({ + 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(() => { + setInterval(() => { + state.retry(); + }, 5000); + }, [state]); + + 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); +} diff --git a/packages/desktop/src/tree/electronApp.tsx b/packages/desktop/src/tree/electronApp.tsx index 23facc1..328dedd 100644 --- a/packages/desktop/src/tree/electronApp.tsx +++ b/packages/desktop/src/tree/electronApp.tsx @@ -6,31 +6,34 @@ import { AuthProvider } from '../providers/AuthProvider'; import { ElectronProvider } from '../providers/ElectronProvider'; import { SocketProvider } from '../providers/SocketProvider'; import ProtectedRoute from './protected/ProtectedRoute'; +import { StabilityProvider } from '../providers/StabilityProvider'; export default function ElectronApp() { return ( - - - - - - - <> - - - - - + + + + + + + + <> + + + + + - - + + + ); }