import React, { useMemo } from "react"; import PropTypes from "prop-types"; import { TableCell, TableRow, IconButton, Collapse, Tooltip, Menu } from "@material-ui/core"; import { KeyboardArrowDown, KeyboardArrowUp } from "@material-ui/icons"; import { makeStyles } from "@material-ui/core/styles"; import MachineLog from "./MachineLog"; import WakeComponent from "./WakeComponent"; const useRowStyles = makeStyles({ root: { "& > *": { borderBottom: "unset" } } }); const ActionButton = React.forwardRef((props, _ref) => { const { action, machine } = props; return ( ); }); ActionButton.propTypes = { machine: PropTypes.shape({ machineId: PropTypes.number.isRequired }).isRequired, action: PropTypes.shape({ code: PropTypes.string.isRequired, tooltip: PropTypes.string.isRequired, system: PropTypes.bool, effect: PropTypes.func.isRequired }).isRequired }; const Machine = ({ machine, actions, logs, addLog, secondaryActionsMenuProps }) => { const [open, setOpen] = React.useState(false); const classes = useRowStyles(); const topActions = useMemo( () => actions.filter(a => a.top === true), [actions] ); const secondaryActions = useMemo( () => actions.filter(a => a.top === false), [actions] ); return ( setOpen(!open)} > {open ? : } {machine.fullMachineName} {machine.machineName} {machine.iPv4Address} {machine.macAddress} {topActions.map(action => ( ))} {secondaryActions.map(action => ( ))} ); }; Machine.propTypes = { machine: PropTypes.shape({ machineId: PropTypes.number.isRequired, machineName: PropTypes.string.isRequired, fullMachineName: PropTypes.string.isRequired, macAddress: PropTypes.string.isRequired, iPv4Address: PropTypes.string, description: PropTypes.string }).isRequired, actions: PropTypes.array.isRequired, logs: PropTypes.array.isRequired, addLog: PropTypes.func.isRequired, secondaryActionsMenuProps: PropTypes.object.isRequired }; export default Machine;