diff --git a/python/ray/dashboard/client/src/pages/dashboard/memory/MemoryRowGroup.tsx b/python/ray/dashboard/client/src/pages/dashboard/memory/MemoryRowGroup.tsx index 956cd5f3093d..1a02384acf0f 100644 --- a/python/ray/dashboard/client/src/pages/dashboard/memory/MemoryRowGroup.tsx +++ b/python/ray/dashboard/client/src/pages/dashboard/memory/MemoryRowGroup.tsx @@ -9,7 +9,7 @@ import { import AddIcon from "@material-ui/icons/Add"; import RemoveIcon from "@material-ui/icons/Remove"; import classNames from "classnames"; -import React from "react"; +import React, { useState } from "react"; import { MemoryTableResponse, MemoryTableEntry, @@ -46,103 +46,82 @@ type Props = { initialExpanded: boolean; }; -type State = { - expanded: boolean; -}; - -class MemoryRowGroup extends React.Component< - Props & WithStyles, - State -> { - state: State = { - expanded: this.props.initialExpanded, - }; - - toggleExpand = () => { - this.setState((state) => ({ - expanded: !state.expanded, - })); - }; +const MemoryRowGroup = (props: Props & WithStyles) => { + const { classes, groupKey, memoryTableGroups } = props; + const [expanded, setExpanded] = useState(props.initialExpanded); + const toggleExpanded = () => setExpanded(!expanded); - render() { - const { classes, groupKey, memoryTableGroups } = this.props; - const { expanded } = this.state; + const features = [ + "node_ip_address", + "pid", + "type", + "object_id", + "object_size", + "reference_type", + "call_site", + ]; - const features = [ - "node_ip_address", - "pid", - "type", - "object_id", - "object_size", - "reference_type", - "call_site", - ]; + const memoryTableGroup = memoryTableGroups[groupKey]; + const entries: Array = memoryTableGroup["entries"]; + const summary: MemoryTableSummary = memoryTableGroup["summary"]; - const memoryTableGroup = memoryTableGroups[groupKey]; - const entries: Array = memoryTableGroup["entries"]; - const summary: MemoryTableSummary = memoryTableGroup["summary"]; - - return ( - - - - {!expanded ? ( - - ) : ( - - )} + return ( + + + + {!expanded ? ( + + ) : ( + + )} + + {features.map((feature, index) => ( + + {// TODO(sang): For now, it is always grouped by node_ip_address. + feature === "node_ip_address" ? groupKey : ""} - {features.map((feature, index) => ( - - {// TODO(sang): For now, it is always grouped by node_ip_address. - feature === "node_ip_address" ? groupKey : ""} - - ))} - - {expanded && ( - - - {entries.map((memory_table_entry, index) => { - const object_size = - memory_table_entry.object_size === -1 - ? "?" - : memory_table_entry.object_size + " B"; - return ( - - - - {memory_table_entry.node_ip_address} - - - {memory_table_entry.pid} - - - {memory_table_entry.type} - - - {memory_table_entry.object_id} - - {object_size} - - {memory_table_entry.reference_type} - - - {memory_table_entry.call_site} - - - ); - })} - - )} - - ); - } -} + ))} + + {expanded && ( + + + {entries.map((memory_table_entry, index) => { + const object_size = + memory_table_entry.object_size === -1 + ? "?" + : memory_table_entry.object_size + " B"; + return ( + + + + {memory_table_entry.node_ip_address} + + + {memory_table_entry.pid} + + + {memory_table_entry.type} + + + {memory_table_entry.object_id} + + {object_size} + + {memory_table_entry.reference_type} + + + {memory_table_entry.call_site} + + + ); + })} + + )} + + ); +}; export default withStyles(styles)(MemoryRowGroup);