1- import React , { useEffect } from 'react' ;
1+ import React , { useEffect , useState } from 'react' ;
22import { Websocket } from '@/plugins/Websocket' ;
33import { ServerContext } from '@/state/server' ;
44import getWebsocketToken from '@/api/server/getWebsocketToken' ;
5+ import ContentContainer from '@/components/elements/ContentContainer' ;
6+ import { CSSTransition } from 'react-transition-group' ;
7+ import Spinner from '@/components/elements/Spinner' ;
58
69export default ( ) => {
710 const server = ServerContext . useStoreState ( state => state . server . data ) ;
8- const { instance } = ServerContext . useStoreState ( state => state . socket ) ;
11+ const [ error , setError ] = useState ( false ) ;
12+ const { connected, instance } = ServerContext . useStoreState ( state => state . socket ) ;
913 const setServerStatus = ServerContext . useStoreActions ( actions => actions . status . setServerStatus ) ;
1014 const { setInstance, setConnectionState } = ServerContext . useStoreActions ( actions => actions . socket ) ;
1115
@@ -15,6 +19,16 @@ export default () => {
1519 . catch ( error => console . error ( error ) ) ;
1620 } ;
1721
22+ useEffect ( ( ) => {
23+ connected && setError ( false ) ;
24+ } , [ connected ] ) ;
25+
26+ useEffect ( ( ) => {
27+ return ( ) => {
28+ instance && instance . close ( ) ;
29+ } ;
30+ } , [ instance ] ) ;
31+
1832 useEffect ( ( ) => {
1933 // If there is already an instance or there is no server, just exit out of this process
2034 // since we don't need to make a new connection.
@@ -26,7 +40,10 @@ export default () => {
2640
2741 socket . on ( 'auth success' , ( ) => setConnectionState ( true ) ) ;
2842 socket . on ( 'SOCKET_CLOSE' , ( ) => setConnectionState ( false ) ) ;
29- socket . on ( 'SOCKET_ERROR' , ( ) => setConnectionState ( false ) ) ;
43+ socket . on ( 'SOCKET_ERROR' , ( ) => {
44+ setError ( true ) ;
45+ setConnectionState ( false ) ;
46+ } ) ;
3047 socket . on ( 'status' , ( status ) => setServerStatus ( status ) ) ;
3148
3249 socket . on ( 'daemon error' , message => {
@@ -47,5 +64,19 @@ export default () => {
4764 . catch ( error => console . error ( error ) ) ;
4865 } , [ server ] ) ;
4966
50- return null ;
67+ return (
68+ error ?
69+ < CSSTransition timeout = { 250 } in = { true } appear = { true } classNames = { 'fade' } >
70+ < div className = { 'bg-red-500 py-2' } >
71+ < ContentContainer className = { 'flex items-center justify-center' } >
72+ < Spinner size = { 'tiny' } />
73+ < p className = { 'ml-2 text-sm text-red-100' } >
74+ We're having some trouble connecting to the console, please wait...
75+ </ p >
76+ </ ContentContainer >
77+ </ div >
78+ </ CSSTransition >
79+ :
80+ null
81+ ) ;
5182} ;
0 commit comments