import React from 'react';
import PropTypes from 'prop-types';
class SimpleTable extends React.Component {
render() {
const striped = this.props.striped ? ' table-striped' : '';
const condensed = this.props.condensed ? ' table-condensed' : '';
const bordered = this.props.bordered ? ' table-bordered' : '';
const hovers = this.props.hovers ? ' table-hover' : '';
const headers = this.props.headers.length > 0 ? (
<tr>
{this.props.headers.map((header, h) => {
return (
<th
key={h}
style={typeof header === 'string' || Object.keys(header).indexOf('width') < 0 ? null : {
width: header.width
}}
>
{typeof header === 'string' ? header : header.content}
</th>
);
})}
</tr>
) : null;
const content = this.props.data.length > 0 ? this.props.data.map((dataset, ds) => {
const cells = this.props.headers.length !== 0 ? this.props.headers.map((header, h) => {
const cellDatum = dataset[header.id] || null;
return <td key={h}>{cellDatum}</td>;
}) : Object.keys(dataset).map((datum, d) => {
return <td key={d}>{dataset[datum]}</td>;
});
return <tr key={ds}>{cells}</tr>;
}) : null;
return (
<table className={`table${striped}${condensed}${bordered}${hovers}`}>
<tbody>
{headers}
{content}
</tbody>
</table>
);
}
}
SimpleTable.propTypes = {
striped: PropTypes.bool,
condensed: PropTypes.bool,
bordered: PropTypes.bool,
hovers: PropTypes.bool,
headers: PropTypes.array,
data: PropTypes.array
};
SimpleTable.defaultProps = {
striped: false,
condensed: false,
bordered: false,
hovers: false,
headers: [],
data: []
};
export default SimpleTable;
|