@@ -41,8 +41,9 @@ const StatusIndicatorBox = styled(GreyRowBox)<{ $status: ServerPowerState | unde
4141
4242export default ( { server, className } : { server : Server ; className ?: string } ) => {
4343 const interval = useRef < number > ( null ) ;
44- const [ stats , setStats ] = useState < ServerStats | null > ( null ) ;
4544 const [ statsError , setStatsError ] = useState ( false ) ;
45+ const [ isSuspended , setIsSuspended ] = useState ( server . isSuspended ) ;
46+ const [ stats , setStats ] = useState < ServerStats | null > ( null ) ;
4647
4748 const getStats = ( ) => {
4849 setStatsError ( false ) ;
@@ -55,6 +56,14 @@ export default ({ server, className }: { server: Server; className?: string }) =
5556 } ;
5657
5758 useEffect ( ( ) => {
59+ setIsSuspended ( stats ?. isSuspended || server . isSuspended ) ;
60+ } , [ stats ?. isSuspended , server . isSuspended ] ) ;
61+
62+ useEffect ( ( ) => {
63+ // Don't waste a HTTP request if there is nothing important to show to the user because
64+ // the server is suspended.
65+ if ( isSuspended ) return ;
66+
5867 getStats ( ) . then ( ( ) => {
5968 // @ts -ignore
6069 interval . current = setInterval ( ( ) => getStats ( ) , 20000 ) ;
@@ -63,7 +72,7 @@ export default ({ server, className }: { server: Server; className?: string }) =
6372 return ( ) => {
6473 interval . current && clearInterval ( interval . current ) ;
6574 } ;
66- } , [ ] ) ;
75+ } , [ isSuspended ] ) ;
6776
6877 const alarms = { cpu : false , memory : false , disk : false } ;
6978 if ( stats ) {
@@ -101,9 +110,13 @@ export default ({ server, className }: { server: Server; className?: string }) =
101110 </ p >
102111 </ div >
103112 < div css = { tw `hidden col-span-7 lg:col-span-4 sm:flex items-baseline justify-center` } >
104- { ! stats ?
105- ! statsError ?
106- < Spinner size = { 'small' } />
113+ { ( ! stats || isSuspended ) ?
114+ isSuspended ?
115+ < div css = { tw `flex-1 text-center` } >
116+ < span css = { tw `bg-red-500 rounded px-2 py-1 text-red-100 text-xs` } >
117+ { server . isSuspended ? 'Suspended' : 'Connection Error' }
118+ </ span >
119+ </ div >
107120 :
108121 server . isInstalling ?
109122 < div css = { tw `flex-1 text-center` } >
@@ -112,11 +125,7 @@ export default ({ server, className }: { server: Server; className?: string }) =
112125 </ span >
113126 </ div >
114127 :
115- < div css = { tw `flex-1 text-center` } >
116- < span css = { tw `bg-red-500 rounded px-2 py-1 text-red-100 text-xs` } >
117- { server . isSuspended ? 'Suspended' : 'Connection Error' }
118- </ span >
119- </ div >
128+ < Spinner size = { 'small' } />
120129 :
121130 < React . Fragment >
122131 < div css = { tw `flex-1 flex md:ml-4 sm:flex hidden justify-center` } >
0 commit comments