minecluster/src/components/server-options/ExtraPortsOption.jsx
dunemask 3d73f69678 [FEATURE] Mutable Servers & Edit UI (#8)
Co-authored-by: Dunemask <dunemask@gmail.com>
Reviewed-on: https://gitea.dunemask.dev/elysium/minecluster/pulls/8
2024-01-23 20:10:00 +00:00

42 lines
1.2 KiB
JavaScript

import { useState } from "react";
import TextField from "@mui/material/TextField";
import Autocomplete from "@mui/material/Autocomplete";
import Chip from "@mui/material/Chip";
const validatePort = (p) => p !== "25565" && p !== "25575" && p.length < 6;
export default function ExtraPortsOption(props) {
const { extraPorts: initExtraPorts } = props;
const [extraPorts, setExtraPorts] = useState(initExtraPorts ?? []);
const { onChange } = props;
function portChange(e, val, optionType, changedValue) {
if (optionType === "clear") {
setExtraPorts([]);
onChange("extraPorts", []);
return;
}
if (!validatePort(changedValue.option))
return alert("That port cannot be added/removed as an extra port!");
setExtraPorts(val);
onChange("extraPorts", val);
}
return (
<Autocomplete
multiple
id="extra-ports-autocomplete"
options={[]}
value={extraPorts}
onChange={portChange}
freeSolo
renderInput={(p) => <TextField {...p} label="Extra Ports" />}
renderTags={(value, getTagProps) =>
value.map((option, index) => {
const defaultChipProps = getTagProps({ index });
return <Chip label={option} {...defaultChipProps} />;
})
}
/>
);
}