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
};