bitburner-src/src/DevMenu/ui/Adjuster.tsx

70 lines
2.2 KiB
TypeScript
Raw Normal View History

2021-09-14 02:37:35 +02:00
import React, { useState } from "react";
import AddIcon from "@material-ui/icons/Add";
import RemoveIcon from "@material-ui/icons/Remove";
import IconButton from "@material-ui/core/IconButton";
import ExposureZeroIcon from "@material-ui/icons/ExposureZero";
import DoubleArrowIcon from "@material-ui/icons/DoubleArrow";
2021-09-14 04:27:43 +02:00
import TextField from "@material-ui/core/TextField";
import Tooltip from "@material-ui/core/Tooltip";
2021-09-14 02:37:35 +02:00
interface IProps {
label: string;
placeholder: string;
add: (x: number) => void;
subtract: (x: number) => void;
tons: () => void;
reset: () => void;
}
export function Adjuster(props: IProps): React.ReactElement {
const [value, setValue] = useState<number | string>("");
function onChange(event: React.ChangeEvent<HTMLInputElement>): void {
if (event.target.value === "") setValue("");
else setValue(parseFloat(event.target.value));
}
const { label, placeholder, add, subtract, reset, tons } = props;
return (
<>
<TextField
label={label}
value={value}
onChange={onChange}
placeholder={placeholder}
type="number"
InputProps={{
startAdornment: (
<>
2021-09-14 04:27:43 +02:00
<Tooltip title="Add a lot">
<IconButton color="primary" onClick={tons}>
<DoubleArrowIcon style={{ transform: "rotate(-90deg)" }} />
</IconButton>
</Tooltip>
<Tooltip title="Add">
<IconButton color="primary" onClick={() => add(typeof value !== "string" ? value : 0)}>
<AddIcon />
</IconButton>
</Tooltip>
2021-09-14 02:37:35 +02:00
</>
),
endAdornment: (
<>
2021-09-14 04:27:43 +02:00
<Tooltip title="Remove">
<IconButton color="primary" onClick={() => subtract(typeof value !== "string" ? value : 0)}>
<RemoveIcon />
</IconButton>
</Tooltip>
<Tooltip title="Reset">
<IconButton color="primary" onClick={reset}>
<ExposureZeroIcon />
</IconButton>
</Tooltip>
2021-09-14 02:37:35 +02:00
</>
),
}}
/>
</>
);
}