import React, { Component } from "react"; import { Row, Col, ListView, Icon } from "patternfly-react"; import { Link } from "react-router-dom"; import PlaybookArgs from "./PlaybookArgs"; import PlaybookHosts from "./PlaybookHosts"; import PlaybookFiles from "./PlaybookFiles"; export default class Playbook extends Component { constructor(props) { super(props); this.state = { expanded: false, selection: null }; } _toggleExpanded = selection => { this.setState(prevState => { if (selection === prevState.selection) { return { expanded: !prevState.expanded }; } else { return { expanded: true, selection }; } }); }; _getStatusMetadata(status) { switch(status) { case "running": return { "name": "running", "title": "Playbook is in progress.", "className": "pficon pficon-info list-view-pf-icon-md list-view-pf-icon-info" } case "completed": return { "name": "completed", "title": "Playbook has completed successfully.", "className": "pficon pficon-ok list-view-pf-icon-md list-view-pf-icon-success" } case "failed": return { "name": "failed", "title": "Playbook has failed with one or more errors.", "className": "pficon pficon-error-circle-o list-view-pf-icon-md list-view-pf-icon-danger" } case "unknown": return { "name": "unknown", "title": "Playbook's status is unknown.", "className": "pficon pficon-warning-triangle-o list-view-pf-icon-md list-view-pf-icon-warning" } default: return { "name": "unknown", "title": "Playbook's status is unknown.", "className": "pficon pficon-warning-triangle-o list-view-pf-icon-md list-view-pf-icon-warning" } } } render() { const { playbook } = this.props; const { expanded, selection } = this.state; const status_metadata = this._getStatusMetadata(playbook.status); const LeftIcon = return ( } leftContent={LeftIcon} additionalInfo={[ this._toggleExpanded("args")} > Arguments , this._toggleExpanded("hosts")} > {playbook.hosts.length} Hosts , this._toggleExpanded("files")} > {playbook.files.length} Files ]} actions={ {Math.round(playbook.duration)} sec } heading={ playbook.name ? playbook.name : playbook.file.path.split("/").slice(-1)[0] } stacked={false} compoundExpand compoundExpanded={expanded} onCloseCompoundExpand={() => this.setState({ expanded: false })} > {selection === "args" && } {selection === "hosts" && } {selection === "files" && } ); } }