@@ -9,20 +9,12 @@ import tw from 'twin.macro';
99import GreyRowBox from '@/components/elements/GreyRowBox' ;
1010import Spinner from '@/components/elements/Spinner' ;
1111import styled from 'styled-components/macro' ;
12- import { IconProp } from '@fortawesome/fontawesome-svg-core' ;
1312import isEqual from 'react-fast-compare' ;
1413
1514// Determines if the current value is in an alarm threshold so we can show it in red rather
1615// than the more faded default style.
1716const isAlarmState = ( current : number , limit : number ) : boolean => limit > 0 && ( current / ( limit * 1024 * 1024 ) >= 0.90 ) ;
1817
19- interface IconProps {
20- icon : IconProp ;
21- usage : number ;
22- limit : string ;
23- isAlarm : boolean ;
24- }
25-
2618const Icon = memo ( styled ( FontAwesomeIcon ) < { $alarm : boolean } > `
2719 ${ props => props . $alarm ? tw `text-red-400` : tw `text-neutral-500` } ;
2820` , isEqual ) ;
@@ -69,29 +61,31 @@ export default ({ server, className }: { server: Server; className?: string }) =
6961 const memorylimit = server . limits . memory !== 0 ? megabytesToHuman ( server . limits . memory ) : 'Unlimited' ;
7062
7163 return (
72- < GreyRowBox as = { Link } to = { `/server/${ server . id } ` } className = { className } >
73- < div className = { 'icon' } css = { tw `hidden md:block` } >
74- < FontAwesomeIcon icon = { faServer } />
75- </ div >
76- < div css = { tw `flex-1 md:ml-4` } >
77- < p css = { tw `text-lg break-all` } > { server . name } </ p >
78- { ! ! server . description &&
79- < p css = { tw `text-sm text-neutral-300 break-all` } > { server . description } </ p >
80- }
81- </ div >
82- < div css = { tw `w-48 overflow-hidden self-start hidden lg:block` } >
83- < div css = { tw `flex ml-4 justify-end` } >
84- < FontAwesomeIcon icon = { faEthernet } css = { tw `text-neutral-500` } />
85- < p css = { tw `text-sm text-neutral-400 ml-2` } >
86- {
87- server . allocations . filter ( alloc => alloc . isDefault ) . map ( allocation => (
88- < span key = { allocation . ip + allocation . port . toString ( ) } > { allocation . alias || allocation . ip } :{ allocation . port } </ span >
89- ) )
90- }
91- </ p >
64+ < GreyRowBox as = { Link } to = { `/server/${ server . id } ` } className = { className } css = { tw `grid grid-cols-12 gap-4` } >
65+ < div css = { tw `flex items-center col-span-11 sm:col-span-5 lg:col-span-6` } >
66+ < div className = { 'icon' } css = { tw `mr-4` } >
67+ < FontAwesomeIcon icon = { faServer } />
68+ </ div >
69+ < div >
70+ < p css = { tw `text-lg break-words` } > { server . name } </ p >
71+ { ! ! server . description &&
72+ < p css = { tw `text-sm text-neutral-300 break-all` } > { server . description } </ p >
73+ }
9274 </ div >
9375 </ div >
94- < div css = { tw `w-1/3 sm:w-1/2 lg:w-1/3 flex items-baseline justify-center relative` } >
76+ < div css = { tw `hidden lg:col-span-2 lg:flex ml-4 justify-end h-full` } >
77+ < FontAwesomeIcon icon = { faEthernet } css = { tw `text-neutral-500` } />
78+ < p css = { tw `text-sm text-neutral-400 ml-2` } >
79+ {
80+ server . allocations . filter ( alloc => alloc . isDefault ) . map ( allocation => (
81+ < React . Fragment key = { allocation . ip + allocation . port . toString ( ) } >
82+ { allocation . alias || allocation . ip } :{ allocation . port }
83+ </ React . Fragment >
84+ ) )
85+ }
86+ </ p >
87+ </ div >
88+ < div css = { tw `hidden col-span-7 lg:col-span-4 sm:flex items-baseline justify-center` } >
9589 { ! stats ?
9690 ! statsError ?
9791 < Spinner size = { 'small' } />
@@ -134,21 +128,19 @@ export default ({ server, className }: { server: Server; className?: string }) =
134128 </ div >
135129 < p css = { tw `text-xs text-neutral-600 text-center mt-1` } > of { disklimit } </ p >
136130 </ div >
137- < div css = { tw `flex-1 flex justify-end sm:hidden` } >
138- < div css = { tw `flex items-end text-right` } >
139- < div
140- css = { [
141- tw `w-3 h-3 rounded-full` ,
142- ( ! stats ?. status || stats ?. status === 'offline' )
143- ? tw `bg-red-500`
144- : ( stats ?. status === 'running' ? tw `bg-green-500` : tw `bg-yellow-500` ) ,
145- ] }
146- />
147- </ div >
148- </ div >
149131 </ React . Fragment >
150132 }
151133 </ div >
134+ < div css = { tw `col-span-1 sm:hidden flex justify-end` } >
135+ < div
136+ css = { [
137+ tw `w-3 h-3 rounded-full` ,
138+ ( ! stats ?. status || stats ?. status === 'offline' )
139+ ? tw `bg-red-500`
140+ : ( stats ?. status === 'running' ? tw `bg-green-500` : tw `bg-yellow-500` ) ,
141+ ] }
142+ />
143+ </ div >
152144 </ GreyRowBox >
153145 ) ;
154146} ;
0 commit comments