import { Box, Switch } from '@material-ui/core'; import { makeStyles } from '@material-ui/core/styles'; import { InnerPanel, PanelHeader } from '../Panels'; import { ProgressBar } from '../Bars'; import { BodyText } from '../Text'; import Decorator, { Colours } from '../Decorator'; import HOST_STATUS from '../../lib/consts/NODES'; import putJSON from '../../lib/fetchers/putJSON'; import { LARGE_MOBILE_BREAKPOINT } from '../../lib/consts/DEFAULT_THEME'; const useStyles = makeStyles((theme) => ({ root: { overflow: 'auto', height: '28vh', paddingLeft: '.3em', paddingRight: '.3em', [theme.breakpoints.down(LARGE_MOBILE_BREAKPOINT)]: { height: '100%', overflow: 'hidden', }, }, state: { paddingLeft: '.7em', paddingRight: '.7em', paddingTop: '1em', }, bar: { paddingLeft: '.7em', paddingRight: '.7em', }, header: { paddingTop: '.3em', paddingRight: '.7em', }, label: { paddingTop: '.3em', }, decoratorBox: { paddingRight: '.3em', }, })); const selectStateMessage = (regex: RegExp, message: string): string => { const msg = regex.exec(message); if (msg) { return HOST_STATUS.get(msg[0]) || 'Error code not recognized'; } return 'Error code not found'; }; const selectDecorator = (state: string): Colours => { switch (state) { case 'online': return 'ok'; case 'offline': return 'off'; default: return 'warning'; } }; const AnvilHost = ({ hosts, }: { hosts: Array; }): JSX.Element => { const classes = useStyles(); const stateRegex = /^[a-zA-Z]/; const messageRegex = /^(message_[0-9]+)/; return ( {hosts && hosts.map( (host): JSX.Element => { return ( c.toUpperCase(), ) || 'Not Available' } /> putJSON('/set_power', { host_uuid: host.host_uuid, is_on: !(host.state === 'online'), }) } /> putJSON('/set_membership', { host_uuid: host.host_uuid, is_member: !(host.state === 'online'), }) } /> {host.state !== 'online' && host.state !== 'offline' && ( <> )} ); }, )} ); }; export default AnvilHost;