import { toFixed } from 'common/math'; import { Fragment } from 'inferno'; import { useBackend, useLocalState } from '../backend'; import { Box, Button, LabeledList, Section } from '../components'; import { getGasLabel, getGasColor } from '../constants'; import { Window } from '../layouts'; import { InterfaceLockNoticeBox } from './common/InterfaceLockNoticeBox'; import { Vent, Scrubber } from './common/AtmosControls'; export const AirAlarm = (props, context) => { const { act, data } = useBackend(context); const locked = data.locked && !data.siliconUser && !data.remoteUser; return ( {!locked && } ); }; const AirAlarmStatus = (props, context) => { const { data } = useBackend(context); const entries = (data.environment_data || []).filter((entry) => entry.value >= 0.01); const dangerMap = { 0: { color: 'good', localStatusText: 'Optimal', }, 1: { color: 'average', localStatusText: 'Caution', }, 2: { color: 'bad', localStatusText: 'Danger (Internals Required)', }, }; const localStatus = dangerMap[data.danger_level] || dangerMap[0]; return (
{(entries.length > 0 && ( {entries.map((entry) => { const status = dangerMap[entry.danger_level] || dangerMap[0]; return ( {toFixed(entry.value, 2)} {entry.unit} ); })} {localStatus.localStatusText} {(data.atmos_alarm && 'Atmosphere Alarm') || (data.fire_alarm && 'Fire Alarm') || 'Nominal'} )) || ( Cannot obtain air sample for analysis. )} {!!data.emagged && ( Safety measures offline. Device may exhibit abnormal behavior. )}
); }; const AirAlarmUnlockedControl = (props, context) => { const { act, data } = useBackend(context); const { target_temperature, rcon } = data; return (
); }; const AIR_ALARM_ROUTES = { home: { title: 'Air Controls', component: () => AirAlarmControlHome, }, vents: { title: 'Vent Controls', component: () => AirAlarmControlVents, }, scrubbers: { title: 'Scrubber Controls', component: () => AirAlarmControlScrubbers, }, modes: { title: 'Operating Mode', component: () => AirAlarmControlModes, }, thresholds: { title: 'Alarm Thresholds', component: () => AirAlarmControlThresholds, }, }; const AirAlarmControl = (props, context) => { const [screen, setScreen] = useLocalState(context, 'screen'); const route = AIR_ALARM_ROUTES[screen] || AIR_ALARM_ROUTES.home; const Component = route.component(); return (
setScreen()} />}>
); }; // Home screen // -------------------------------------------------------- const AirAlarmControlHome = (props, context) => { const { act, data } = useBackend(context); const [screen, setScreen] = useLocalState(context, 'screen'); const { mode, atmos_alarm } = data; return (