Files
factorio-clusterio/packages/web_ui/src/components/InstanceRcon.tsx
T
Luciole 838170a9ff Port packages/web_ui to TypeScript (#508)
* .jsx to .tsx

* controller: tsc --build before webpack-cli

* Type Annotation

* disabled move into the <Input/> and <Checkbox/>

* cleanup debug left over

* documentation

* default ModPack

* modPackUpdateHandlers no undefined

* PluginInfo changes proposition

* PluginInfo changes proposition miss

* ModRecord & ModInfo feedback loop at const mods = [ ?

* ["connect", "drop", "resume", "close"] as const

* .tsx to .ts when possible
2023-09-02 14:51:35 +02:00

54 lines
1.2 KiB
TypeScript

import React, { useContext, useState } from "react";
import { Input, Typography } from "antd";
import * as lib from "@clusterio/lib";
import ControlContext from "./ControlContext";
import { notifyErrorHandler } from "../util/notify";
const { Title, Paragraph } = Typography;
type InstanceRconProps = {
id: number;
disabled: boolean;
};
export default function InstanceRcon(props: InstanceRconProps) {
let control = useContext(ControlContext);
let [output, setOutput] = useState<string|null>(null);
let [running, setRunning] = useState(false);
async function sendCommand(command: string) {
if (!command) {
setOutput(null);
return;
}
setRunning(true);
try {
let result = await control.sendTo(
{ instanceId: props.id },
new lib.InstanceSendRconRequest(command),
);
setOutput(result);
} finally {
setRunning(false);
}
}
return <>
{output && <>
<Title level={5}>Rcon result</Title>
<Paragraph code className="rcon-result">{output}</Paragraph>
</>}
<Input.Search
disabled={props.disabled}
placeholder="Send RCON Command"
enterButton="Send"
onSearch={(command) => sendCommand(command).catch(notifyErrorHandler("Error sending command"))}
loading={running}
/>
</>;
}