From 9da8381a1f21c7835c2143e83eca7b4b92644113 Mon Sep 17 00:00:00 2001
From: Stefan Kraus <stefan.kraus@methodpark.de>
Date: Sun, 13 Dec 2020 15:41:40 +0100
Subject: [PATCH] Add new status info if init connection failed

---
 .../src/backendconnection/communication.ts    |  8 ++++++--
 .../connectionstatus/ConnectionStatusBar.tsx  | 20 +++++++++++++------
 .../connectionstatus/ConnectionStatusSlice.ts |  4 ++--
 frontend/tsconfig.json                        |  1 +
 4 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/frontend/src/backendconnection/communication.ts b/frontend/src/backendconnection/communication.ts
index 14fe03a..3bd97a3 100644
--- a/frontend/src/backendconnection/communication.ts
+++ b/frontend/src/backendconnection/communication.ts
@@ -4,7 +4,7 @@ import {
   setPlaySeconds,
 } from "../player/PlayerSlice";
 
-import { setConnectionStatus } from "../connectionstatus/ConnectionStatusSlice";
+import { selectConnected, setConnectionStatus } from "../connectionstatus/ConnectionStatusSlice";
 
 import { all, put, select, takeEvery } from "redux-saga/effects";
 
@@ -110,7 +110,11 @@ function* handleConnectionStatus(action: any) {
       break;
     }
     case "REDUX_WEBSOCKET::CLOSED": {
-      yield put(setConnectionStatus(false));
+      let isConnect = yield select(selectConnected);
+      if (isConnect !== null)
+      {
+        yield put(setConnectionStatus(false));
+      }
       break;
     }
   }
diff --git a/frontend/src/connectionstatus/ConnectionStatusBar.tsx b/frontend/src/connectionstatus/ConnectionStatusBar.tsx
index 5fc0d49..5de5c46 100644
--- a/frontend/src/connectionstatus/ConnectionStatusBar.tsx
+++ b/frontend/src/connectionstatus/ConnectionStatusBar.tsx
@@ -20,7 +20,7 @@ const useStyles = makeStyles((theme: Theme) =>
 );
 
 interface StateProps {
-  connected: boolean;
+  connected: boolean | null;
 }
 
 export type Props = StateProps;
@@ -28,16 +28,24 @@ export type Props = StateProps;
 export function ConnectionStatusBar(
   props: Props
 ) {
+
+  function TypographyHelper(){
+    console.log(props.connected)
+    if (props.connected === true){
+      return <Typography variant="h6" className={classes.title}>Connected to server</Typography>
+    } else if (props.connected === false){
+      return <Typography style={{color: 'red'}} variant="h6" className={classes.title}>Lost connection to server</Typography>
+    } else if (props.connected === null) {
+      return <Typography style={{color: 'red'}} variant="h1" className={classes.title}>Server is offline, pls restart website to connect</Typography>
+    }
+  }
+
   const classes = useStyles();
   return (
     <div className={classes.root}>
       <AppBar position="static" color="default">
         <Toolbar>
-          <Typography variant="h6" className={classes.title}>
-            {props.connected
-              ? "Connected to server"
-              : "Lost connection to server"}
-          </Typography>
+          { TypographyHelper() }
         </Toolbar>
       </AppBar>
     </div>
diff --git a/frontend/src/connectionstatus/ConnectionStatusSlice.ts b/frontend/src/connectionstatus/ConnectionStatusSlice.ts
index 1f96414..8d60bba 100644
--- a/frontend/src/connectionstatus/ConnectionStatusSlice.ts
+++ b/frontend/src/connectionstatus/ConnectionStatusSlice.ts
@@ -2,11 +2,11 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit";
 import { RootState } from "../store/store";
 
 export interface ConnectionStatusState {
-  connected: boolean;
+  connected: boolean | null;
 }
 
 export const initialState: ConnectionStatusState = {
-  connected: false,
+  connected: null,
 };
 
 export type ConnectionStatusAction = PayloadAction<boolean>;
diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json
index 1d693b2..a0553fb 100644
--- a/frontend/tsconfig.json
+++ b/frontend/tsconfig.json
@@ -14,6 +14,7 @@
     "resolveJsonModule": true,
     "isolatedModules": true,
     "noEmit": true,
+    "strictNullChecks": true,
     "jsx": "react"
   },
   "include": ["src"]
-- 
GitLab