import Collapse from '@material-ui/core/Collapse'; import ExpandMore from '@material-ui/icons/ExpandMore'; import { Link } from 'react-router-dom'; import ListItemIcon from '@material-ui/core/ListItemIcon'; import ListItemText from '@material-ui/core/ListItemText'; import MenuItem from '@material-ui/core/MenuItem'; import MenuList from '@material-ui/core/MenuList'; import NavigateNextIcon from '@material-ui/icons/NavigateNext'; import PropTypes from 'prop-types'; import React from 'react'; import SuccessRateDot from "./util/SuccessRateDot.jsx"; import _merge from 'lodash/merge'; import _orderBy from 'lodash/orderBy'; import { friendlyTitle } from "./util/Utils.js"; import { processedMetricsPropType } from './util/MetricUtils.jsx'; import { withContext } from './util/AppContext.jsx'; import { withStyles } from '@material-ui/core/styles'; const styles = () => ({ navMenuItem: { paddingLeft: "24px", paddingRight: "12px", }, navResourceItem: { marginRight: "0", paddingLeft: "38px", }, navResourceText: { overflow: "hidden", padding: "0px 0px 0px 10px", textOverflow: "ellipsis", } }); class NavigationResource extends React.Component { static defaultProps = { metrics: [], } static propTypes = { api: PropTypes.shape({ prefixLink: PropTypes.func.isRequired, }).isRequired, classes: PropTypes.shape({}).isRequired, metrics: PropTypes.arrayOf(processedMetricsPropType), type: PropTypes.string.isRequired, }; constructor(props) { super(props); this.to = props.api.prefixLink("/" + props.type); this.state = {open: false}; } handleOnClick = () => { this.setState({ open: !this.state.open }); }; listItemIcon() { let icon = ; if (this.state.open) { icon = ; } return ({icon}); } menu() { const { classes, type } = this.props; return ( {this.listItemIcon()} ); } subMenu() { const { api, classes, metrics } = this.props; const resources = _orderBy(metrics .filter(m => m.pods.meshedPods !== "0") .map(m => _merge(m, { menuName: this.props.type === "namespaces" ? m.name : `${m.namespace}/${m.name}` }) ), r => r.menuName); return ( { resources.map(r => { let url = api.prefixLink(api.generateResourceURL(r)); return ( ); }) } ); } render() { return ( {this.menu()} {this.subMenu()} ); } } export default withContext(withStyles(styles, { withTheme: true })(NavigationResource));