/** * React Component for displaying a single WorkerScript's info as an * Accordion element */ import * as React from "react"; import { formatExp, formatThreads } from "../formatNumber"; 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 Box from "@mui/material/Box"; import Paper from "@mui/material/Paper"; import Typography from "@mui/material/Typography"; import Button from "@mui/material/Button"; import ListItemButton from "@mui/material/ListItemButton"; import ListItemText from "@mui/material/ListItemText"; import { makeStyles } from "tss-react/mui"; import Collapse from "@mui/material/Collapse"; import ExpandLess from "@mui/icons-material/ExpandLess"; import ExpandMore from "@mui/icons-material/ExpandMore"; import { convertTimeMsToTimeElapsedString } from "../../utils/StringHelperFunctions"; import { arrayToString } from "../../utils/helpers/ArrayHelpers"; import { Money } from "../React/Money"; import { MoneyRate } from "../React/MoneyRate"; import { RecentScript } from "../../Netscript/RecentScripts"; import { LogBoxEvents } from "../React/LogBoxManager"; const useStyles = makeStyles()({ noborder: { borderBottom: "none", }, }); interface IProps { recentScript: RecentScript; } export function RecentScriptAccordion(props: IProps): React.ReactElement { const { classes } = useStyles(); const [open, setOpen] = React.useState(false); const recentScript = props.recentScript; // Calculations for script stats const onlineMps = recentScript.runningScript.onlineMoneyMade / recentScript.runningScript.onlineRunningTime; const onlineEps = recentScript.runningScript.onlineExpGained / recentScript.runningScript.onlineRunningTime; function logClickHandler(): void { LogBoxEvents.emit(recentScript.runningScript); } return ( <> setOpen((old) => !old)} component={Paper}> └ {recentScript.runningScript.filename} (died{" "} {convertTimeMsToTimeElapsedString(new Date().getTime() - recentScript.timeOfDeath.getTime())} ago) } /> {open ? : } └ Threads: {formatThreads(recentScript.runningScript.threads)} └ Args: {arrayToString(recentScript.runningScript.args)} └ Online Time: {convertTimeMsToTimeElapsedString(recentScript.runningScript.onlineRunningTime * 1e3)} └ Offline Time: {convertTimeMsToTimeElapsedString(recentScript.runningScript.offlineRunningTime * 1e3)} └ Total online production:  {formatExp(recentScript.runningScript.onlineExpGained) + " hacking exp"} └ Online production rate:  {formatExp(onlineEps) + " hacking exp / sec"} └ Total offline production:  {formatExp(recentScript.runningScript.offlineExpGained) + " hacking exp"}
); }