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 (
act('temperature')} />
);
};
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 (
);
};
// Home screen
// --------------------------------------------------------
const AirAlarmControlHome = (props, context) => {
const { act, data } = useBackend(context);
const [screen, setScreen] = useLocalState(context, 'screen');
const { mode, atmos_alarm } = data;
return (
act(atmos_alarm ? 'reset' : 'alarm')}
/>
act('mode', {
mode: mode === 3 ? 1 : 3,
})
}
/>
setScreen('vents')} />
setScreen('scrubbers')} />
setScreen('modes')} />
setScreen('thresholds')} />
);
};
// Vents
// --------------------------------------------------------
const AirAlarmControlVents = (props, context) => {
const { data } = useBackend(context);
const { vents } = data;
if (!vents || vents.length === 0) {
return 'Nothing to show';
}
return vents.map((vent) => );
};
// Scrubbers
// --------------------------------------------------------
const AirAlarmControlScrubbers = (props, context) => {
const { data } = useBackend(context);
const { scrubbers } = data;
if (!scrubbers || scrubbers.length === 0) {
return 'Nothing to show';
}
return scrubbers.map((scrubber) => );
};
// Modes
// --------------------------------------------------------
const AirAlarmControlModes = (props, context) => {
const { act, data } = useBackend(context);
const { modes } = data;
if (!modes || modes.length === 0) {
return 'Nothing to show';
}
return modes.map((mode) => (
act('mode', { mode: mode.mode })}
/>
));
};
// Thresholds
// --------------------------------------------------------
const AirAlarmControlThresholds = (props, context) => {
const { act, data } = useBackend(context);
const { thresholds } = data;
return (
|
min2 |
min1 |
max1 |
max2 |
{thresholds.map((threshold) => (
|
{getGasLabel(threshold.name)}
|
{threshold.settings.map((setting) => (
act('threshold', {
env: setting.env,
var: setting.val,
})
}
/>
|
))}
))}
);
};