import * as _ from 'lodash'; import React from 'react'; import ImmutablePropTypes from 'react-immutable-proptypes'; import DataTable from '../ui/tables/DataTable'; import { DataTableCell, DataTableDataFieldCell, DataTableHeaderCell } from '../ui/tables/DataTableCells'; import { DataTableCheckBoxCell } from '../ui/tables/DataTableCells'; import DataTableColumn from '../ui/tables/DataTableColumn'; import Loader from '../ui/Loader'; import { parseNodeCapabilities } from '../../utils/nodes'; export default class NodesTable extends React.Component { constructor() { super(); this.state = { filterString: '', sortBy: '', sortDir: 'asc' }; } renderNoNodesFound() { return (

There are no Nodes available

); } onFilter(filterString) { this.setState({ filterString: filterString }); } _filterData(filterString, data) { let dataKeys = ['name']; return filterString ? data.filter((row) => { let result = dataKeys.filter((dataKey) => { return row[dataKey].toLowerCase().includes(filterString.toLowerCase()); }); return result.length > 0; }) : data; } render() { let filteredData = this._filterData(this.state.filterString, this.props.nodes.toList().toJS()); return ( } cell={}/> MAC Address(es)} cell={}/> Name} cell={}/> Profile} cell={}/> CPU Arch.} cell={}/> CPU (cores)} cell={}/> Disk (GB)} cell={}/> Memory (MB)} cell={}/> Power State} cell={}/> Provision State} cell={}/> ); } } NodesTable.propTypes = { isFetchingNodes: React.PropTypes.bool.isRequired, nodes: ImmutablePropTypes.map.isRequired, nodesInProgress: ImmutablePropTypes.set.isRequired, roles: ImmutablePropTypes.map.isRequired }; export class NodesTableCheckBoxCell extends React.Component { render() { const nodeId = _.result(this.props.data[this.props.rowIndex], this.props.field); return ( ); } } NodesTableCheckBoxCell.propTypes = { data: React.PropTypes.array.isRequired, field: React.PropTypes.string.isRequired, nodesInProgress: ImmutablePropTypes.set.isRequired, rowIndex: React.PropTypes.number }; export class NodesTableProfileCell extends React.Component { getAssignedRoleTitle() { const capabilities = _.result(this.props.data[this.props.rowIndex], 'properties.capabilities', ''); const profile = parseNodeCapabilities(capabilities).profile; if(profile) { const role = this.props.roles.get(profile); return role ? role.title : profile; } else { return '-'; } } render() { return ( {this.getAssignedRoleTitle()} ); } } NodesTableProfileCell.propTypes = { data: React.PropTypes.array.isRequired, roles: ImmutablePropTypes.map.isRequired, rowIndex: React.PropTypes.number };