mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-13 23:14:53 +09:00
* .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
54 lines
1.2 KiB
TypeScript
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}
|
|
/>
|
|
</>;
|
|
}
|
|
|