import React, { useMemo } from "react"; import PropTypes from "prop-types"; import { TableCell, TableRow, IconButton, Collapse, Menu } from "@material-ui/core"; import { KeyboardArrowDown, KeyboardArrowUp } from "@material-ui/icons"; import { makeStyles } from "@material-ui/core/styles"; import MachineLog from "./common/MachineLog"; import WakeComponent from "./common/WakeComponent"; import ActionButton from "./common/ActionButton"; import { useSensitiveInfo } from "../../../hooks"; const useRowStyles = makeStyles({ root: { "& > *": { borderBottom: "unset" } } }); const Machine = ({ machine, actions, logs, addLog, secondaryActionsMenuProps }) => { const [open, setOpen] = React.useState(false); const classes = useRowStyles(); const { mask, maskElements } = useSensitiveInfo(); const topActions = useMemo( () => actions.filter(a => a.top === true), [actions] ); const secondaryActions = useMemo( () => actions.filter(a => a.top === false), [actions] ); return ( setOpen(!open)} > {open ? : } {mask(machine.fullMachineName)} {mask(machine.machineName)} {mask(machine.iPv4Address)} {mask(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;