admin-on-rest-fr05t1k
Version:
A frontend Framework for building admin applications on top of REST services, using ES6, React and Material UI
46 lines (39 loc) • 1.68 kB
JavaScript
import React, { PropTypes } from 'react';
import shouldUpdate from 'recompose/shouldUpdate';
import { TableBody, TableRow } from 'material-ui/Table';
import DatagridCell from './DatagridCell';
const DatagridBody = ({ resource, children, ids, data, basePath, styles, rowStyle, options, rowOptions, ...rest }) => (
<TableBody displayRowCheckbox={false} {...rest} {...options}>
{ids.map((id, rowIndex) => (
<TableRow style={rowStyle ? rowStyle(data[id], rowIndex) : styles.tr} key={id} selectable={false} {...rowOptions}>
{React.Children.map(children, (field, index) => (
<DatagridCell
key={`${id}-${field.props.source || index}`}
record={data[id]}
defaultStyle={index === 0 ? styles.cell['td:first-child'] : styles.cell.td}
{...{ field, basePath, resource }}
/>
))}
</TableRow>
))}
</TableBody>
);
DatagridBody.propTypes = {
ids: PropTypes.arrayOf(PropTypes.any).isRequired,
isLoading: PropTypes.bool,
resource: PropTypes.string,
data: PropTypes.object.isRequired,
basePath: PropTypes.string,
options: PropTypes.object,
rowOptions: PropTypes.object,
styles: PropTypes.object,
rowStyle: PropTypes.func,
};
DatagridBody.defaultProps = {
data: {},
ids: [],
};
const PureDatagridBody = shouldUpdate((props, nextProps) => nextProps.isLoading === false)(DatagridBody);
// trick material-ui Table into thinking this is one of the child type it supports
PureDatagridBody.muiName = 'TableBody';
export default PureDatagridBody;