mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-27 10:33:21 +00:00
57 lines
2.0 KiB
TypeScript
57 lines
2.0 KiB
TypeScript
import { BooleanLike } from 'common/react';
|
|
import { Fragment } from 'inferno';
|
|
import { useBackend } from '../backend';
|
|
import { Box, Button, LabeledList, ProgressBar, Section } from '../components';
|
|
import { Window } from '../layouts';
|
|
|
|
type Data = {
|
|
cell: BooleanLike;
|
|
cellCharge: number;
|
|
cellMaxCharge: number;
|
|
locked: BooleanLike;
|
|
suspension_field: BooleanLike;
|
|
};
|
|
|
|
export const XenoarchSuspension = (props, context) => {
|
|
const { act, data } = useBackend<Data>(context);
|
|
|
|
const { cell, cellCharge, cellMaxCharge, locked, suspension_field } = data;
|
|
|
|
return (
|
|
<Window width={400} height={150}>
|
|
<Window.Content>
|
|
<Section
|
|
title={'Triple-phase S.F.G. MK III "Reliant"'}
|
|
buttons={
|
|
<Button icon={locked ? 'lock' : 'lock-open'} selected={!locked} onClick={() => act('lock')}>
|
|
{locked ? 'Locked' : 'Unlocked'}
|
|
</Button>
|
|
}>
|
|
{(locked && <Box color="bad">This interface is locked. Swipe an ID card to unlock it.</Box>) || (
|
|
<Fragment>
|
|
<LabeledList>
|
|
<LabeledList.Item label="Cell Charge">
|
|
{(cell && (
|
|
<ProgressBar
|
|
ranges={{
|
|
good: [cellMaxCharge * 0.75, Infinity],
|
|
average: [cellMaxCharge * 0.5, cellMaxCharge * 0.75],
|
|
bad: [-Infinity, cellMaxCharge * 0.5],
|
|
}}
|
|
value={cellCharge}
|
|
maxValue={cellMaxCharge}
|
|
/>
|
|
)) || <Box color="bad">No cell inserted.</Box>}
|
|
</LabeledList.Item>
|
|
</LabeledList>
|
|
<Button fluid mt={1} icon="meteor" selected={suspension_field} onClick={() => act('toggle_field')}>
|
|
{suspension_field ? 'Disengage Suspension Field' : 'Engage Suspension Field'}
|
|
</Button>
|
|
</Fragment>
|
|
)}
|
|
</Section>
|
|
</Window.Content>
|
|
</Window>
|
|
);
|
|
};
|