ManageIQ/manageiq-providers-lenovo

View on GitHub
app/javascript/components/form/fields/firmware_field.js

Summary

Maintainability
A
0 mins
Test Coverage
import React from "react";
import PropTypes from "prop-types";
import {
  Col,
  ControlLabel,
  Nav,
  NavItem,
  Row,
  Tab,
} from "react-bootstrap";
import FirmwareCheckListField from "./firmware_check_list_field";
import "../../style/firmware-update-field.css";

class FirmwareField extends React.Component {

  constructor(props) {
    super(props);

    this.state = {
      navItemSelected: {},
    };

  }

  updateNavItem = (id, firmwareName, checked) => {
    let navItemSelected= this.state.navItemSelected;
    let values = navItemSelected[id] || {};
    values[firmwareName] = checked;
    navItemSelected[id] = values;
    this.setState({navItemSelected})
  };

  hideNavItem = (id) => {
    let navItemSelected= this.state.navItemSelected;
    if (navItemSelected.hasOwnProperty(id)) {
      return !Object.values(navItemSelected[id]).includes(true);
    }
    return true;
  };


  render() {
    const serverNavItens = this.props.physicalServerData.map((physicalServer) => {
      const visibility = this.hideNavItem(physicalServer.id) ? "invisible" : "visible";
      return(
        <NavItem
          eventKey={physicalServer.id}
          key={physicalServer.id}>
          <div className="media">
            <div className="media-left">
              <i className="pficon pficon-server serverIcon"/>
              {physicalServer.name}
            </div>
            <div className="media-right">
              <i className={"fa fa-check " + visibility}/>
            </div>

          </div>
        </NavItem>
      )
    });
    const firmwareTabPane = this.props.physicalServerData.map((physicalServer) => {
      return(
        <Tab.Pane
          key={physicalServer.id}
          eventKey={physicalServer.id}>
          <h4>{physicalServer.name}</h4>
          <FirmwareCheckListField
            updateNavItem={this.updateNavItem}
            firmwareData={physicalServer.firmwares}
            parentName={this.props.name}
            serverID={physicalServer.id}/>
        </Tab.Pane>
      )
    });

    return (
      <div>
        <Tab.Container id="left-tabs-firmware" defaultActiveKey={this.props.physicalServerData[0].id}>
          <Row className="clearfix tabRow">
            <Col sm={4} className="serversCol">
              <ControlLabel>{__('Physical Servers')}</ControlLabel>
              <Nav bsStyle="pills" stacked>
                {serverNavItens}
              </Nav>
            </Col>
            <Col sm={8} className="firmwaresCol">
              <Tab.Content animation>
                {firmwareTabPane}
              </Tab.Content>
            </Col>
          </Row>
        </Tab.Container>
      </div>
    );
  }
}

FirmwareField.propTypes = {
  physicalServerData: PropTypes.array.isRequired,
  name: PropTypes.string.isRequired,
};

export default FirmwareField;