/** * React Component for displaying a single WorkerScript's info as an * Accordion element */ import * as React from "react"; import { numeralWrapper } from "../numeralFormat"; import Table from "@mui/material/Table"; import TableCell from "@mui/material/TableCell"; import TableRow from "@mui/material/TableRow"; import TableBody from "@mui/material/TableBody"; import Button from "@mui/material/Button"; import Box from "@mui/material/Box"; import Paper from "@mui/material/Paper"; import Typography from "@mui/material/Typography"; import IconButton from "@mui/material/IconButton"; import DeleteIcon from "@mui/icons-material/Delete"; import ListItemButton from "@mui/material/ListItemButton"; import ListItemText from "@mui/material/ListItemText"; import makeStyles from "@mui/styles/makeStyles"; import Collapse from "@mui/material/Collapse"; import ExpandLess from "@mui/icons-material/ExpandLess"; import ExpandMore from "@mui/icons-material/ExpandMore"; import { killWorkerScript } from "../../Netscript/killWorkerScript"; import { WorkerScript } from "../../Netscript/WorkerScript"; import { dialogBoxCreate } from "../React/DialogBox"; import { LogBoxEvents } from "../React/LogBoxManager"; import { convertTimeMsToTimeElapsedString } from "../../utils/StringHelperFunctions"; import { arrayToString } from "../../utils/helpers/arrayToString"; import { Money } from "../React/Money"; import { MoneyRate } from "../React/MoneyRate"; const useStyles = makeStyles({ noborder: { borderBottom: "none", }, }); type IProps = { workerScript: WorkerScript; }; export function WorkerScriptAccordion(props: IProps): React.ReactElement { const classes = useStyles(); const [open, setOpen] = React.useState(false); const workerScript = props.workerScript; const scriptRef = workerScript.scriptRef; function logClickHandler(): void { LogBoxEvents.emit(scriptRef); } const killScript = killWorkerScript.bind(null, scriptRef as any, scriptRef.server); function killScriptClickHandler(): void { killScript(); dialogBoxCreate("Killing script"); } // Calculations for script stats const onlineMps = scriptRef.onlineMoneyMade / scriptRef.onlineRunningTime; const onlineEps = scriptRef.onlineExpGained / scriptRef.onlineRunningTime; return ( <> setOpen((old) => !old)} component={Paper}> └ {props.workerScript.name} {JSON.stringify(props.workerScript.args)}} /> {open ? : } └ Threads: {numeralWrapper.formatThreads(props.workerScript.scriptRef.threads)} └ Args: {arrayToString(props.workerScript.args)} └ Online Time: {convertTimeMsToTimeElapsedString(scriptRef.onlineRunningTime * 1e3)} └ Offline Time: {convertTimeMsToTimeElapsedString(scriptRef.offlineRunningTime * 1e3)} └ Total online production:  {numeralWrapper.formatExp(scriptRef.onlineExpGained) + " hacking exp"} └ Online production rate:  {numeralWrapper.formatExp(onlineEps) + " hacking exp / sec"} └ Total offline production:  {numeralWrapper.formatExp(scriptRef.offlineExpGained) + " hacking exp"}
); }