mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-17 05:32:27 +00:00
TGUI APCs TGUI vending machines Fix AI default_tgui_interaction TGUI Airlocks Station & Atmospheric Alert TGUI + Misc NTOS-TGUI Fixes TGUI Air Alarms & Central Atmospheric Control Airlock TGUI TG... got rid of UI for fire alarm. í´· TGUI Gas Heating/Cooling System TGUI Gas Pump & Passive Gate + Fixes TGUI Omni Atmospherics TGUI Pipe Dispensers & RPD TGUI IntelliCore & Vending Fix TGUI Handheld Tanks TGUI Portable Pump & Scrubber TGUI Tank Dispenser & Canisters TGUI Radios TGUI SMES & Air Alarm adjustment Tweak vending machine interfaces a tad TGUI Algae Farm TGUI general_air_control - Distro & Waste Console - Riot Control Console - Atmos Intake Console - Engine Cooling Console TGUI Heavy Scrubber Control (and body scanner fix) TGUI trinary devices & shutoff monitor TGUI Telecomms Log Browser TGUI Telecomms Machine Browser TGUI Spaceheater Internal Panel TGUI Gravity Generator TGUI Id Cards & Fix ID Card Images TGUI Id Card Redesign TGUI Turbolift TGUI Suit Cycler & Suit Storage Unit & Vending Fixes TGUI Power Monitor TGUI Signalers TGUI Employment Records TGUI Drone Console TGUI RIGSuits TGUI PA & PACMAN, and Margin Fix TGUI Solar Panels & Fix Power Monitor Adjust TGUI modules & their interaction with NTOS TGUI RCON TGUI Message Monitor Bump TGUI line limit to 120 (ParadiseSS13/Paradise#14002) TGUI Exonet & NTNet Relay TGUI Telecomms Multitool Menu TGUI Shield Capacitor & Shield Generator TGUI Supermatter-everything & Refactors
164 lines
4.6 KiB
JavaScript
164 lines
4.6 KiB
JavaScript
import { round } from 'common/math';
|
|
import { Fragment } from 'inferno';
|
|
import { useBackend, useLocalState } from "../backend";
|
|
import { Box, Button, Flex, Icon, LabeledList, ProgressBar, Section, Tabs } from "../components";
|
|
import { Window } from "../layouts";
|
|
|
|
export const RCON = (props, context) => {
|
|
return (
|
|
<Window
|
|
width={630}
|
|
height={440}
|
|
resizable>
|
|
<Window.Content scrollable>
|
|
<RCONContent />
|
|
</Window.Content>
|
|
</Window>
|
|
);
|
|
};
|
|
|
|
export const RCONContent = (props, context) => {
|
|
const [tabIndex, setTabIndex] = useLocalState(context, 'tabIndex', 0);
|
|
|
|
let body;
|
|
if (tabIndex === 0) {
|
|
body = <RCONSmesList />;
|
|
} else if (tabIndex === 1) {
|
|
body = <RCONBreakerList />;
|
|
}
|
|
|
|
return (
|
|
<Fragment>
|
|
<Tabs>
|
|
<Tabs.Tab
|
|
key="SMESs"
|
|
selected={0 === tabIndex}
|
|
onClick={() => setTabIndex(0)}>
|
|
<Icon name="power-off" /> SMESs
|
|
</Tabs.Tab>
|
|
<Tabs.Tab
|
|
key="Breakers"
|
|
selected={1 === tabIndex}
|
|
onClick={() => setTabIndex(1)}>
|
|
<Icon name="bolt" /> Breakers
|
|
</Tabs.Tab>
|
|
</Tabs>
|
|
<Box m={2}>
|
|
{body}
|
|
</Box>
|
|
</Fragment>
|
|
);
|
|
};
|
|
|
|
const RCONSmesList = (props, context) => {
|
|
const { act, data } = useBackend(context);
|
|
|
|
const {
|
|
smes_info,
|
|
} = data;
|
|
|
|
return (
|
|
<Section title="SMESs">
|
|
<LabeledList>
|
|
{smes_info ? smes_info.map(smes => (
|
|
<LabeledList.Item key={smes.RCON_tag} label={smes.RCON_tag}>
|
|
<Box mb={1}>
|
|
<ProgressBar
|
|
value={smes.capacityPercent * 0.01}
|
|
ranges={{
|
|
good: [0.5, Infinity],
|
|
average: [0.15, 0.5],
|
|
bad: [-Infinity, 0.15],
|
|
}}>
|
|
{
|
|
round(smes.charge/(1000*60), 1)
|
|
} kWh / {
|
|
round(smes.capacity/(1000*60))
|
|
} kWh ({smes.capacityPercent}%)
|
|
</ProgressBar>
|
|
</Box>
|
|
<LabeledList>
|
|
<LabeledList.Item
|
|
label="Input"
|
|
buttons={(
|
|
<Fragment>
|
|
<Button
|
|
icon="power-off"
|
|
onClick={() => act("smes_in_toggle", {
|
|
smes: smes.RCON_tag,
|
|
})} />
|
|
<Button
|
|
icon="pen"
|
|
onClick={() => act("smes_in_set", {
|
|
smes: smes.RCON_tag,
|
|
})} />
|
|
</Fragment>
|
|
)}>
|
|
{smes.input_val} kW - {smes.input_set ? "ON" : "OFF"}
|
|
</LabeledList.Item>
|
|
<LabeledList.Item
|
|
label="Output"
|
|
buttons={(
|
|
<Fragment>
|
|
<Button
|
|
icon="power-off"
|
|
onClick={() => act("smes_out_toggle", {
|
|
smes: smes.RCON_tag,
|
|
})} />
|
|
<Button
|
|
icon="pen"
|
|
onClick={() => act("smes_out_set", {
|
|
smes: smes.RCON_tag,
|
|
})} />
|
|
</Fragment>
|
|
)}>
|
|
{smes.output_val} kW - {smes.output_set ? "ONLINE" : "OFFLINE"}
|
|
</LabeledList.Item>
|
|
<LabeledList.Item label="Output Load">
|
|
{smes.output_load} kW
|
|
</LabeledList.Item>
|
|
</LabeledList>
|
|
</LabeledList.Item>
|
|
)) : (
|
|
<LabeledList.Item color="bad">
|
|
No SMESs detected.
|
|
</LabeledList.Item>
|
|
)}
|
|
</LabeledList>
|
|
</Section>
|
|
);
|
|
};
|
|
|
|
const RCONBreakerList = (props, context) => {
|
|
const { act, data } = useBackend(context);
|
|
|
|
const {
|
|
breaker_info,
|
|
} = data;
|
|
|
|
return (
|
|
<Section title="Breakers">
|
|
<LabeledList>
|
|
{breaker_info ? breaker_info.map(breaker => (
|
|
<LabeledList.Item
|
|
key={breaker.RCON_tag}
|
|
label={breaker.RCON_tag}
|
|
buttons={(
|
|
<Button
|
|
icon="power-off"
|
|
content={breaker.enabled ? "Enabled" : "Disabled"}
|
|
selected={breaker.enabled}
|
|
color={breaker.enabled ? null : "bad"}
|
|
onClick={() => act("toggle_breaker", {
|
|
breaker: breaker.RCON_tag,
|
|
})} />
|
|
)} />
|
|
)) : (
|
|
<LabeledList.Item color="bad">
|
|
No breakers detected.
|
|
</LabeledList.Item>
|
|
)}
|
|
</LabeledList>
|
|
</Section>
|
|
);
|
|
}; |