Advertisement
Guest User

Untitled

a guest
Sep 19th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.32 KB | None | 0 0
  1. import React from 'react';
  2.  
  3. import PropTypes from 'prop-types';
  4. import {withStyles} from '@material-ui/core/styles';
  5. import Table from '@material-ui/core/Table';
  6. import TableBody from '@material-ui/core/TableBody';
  7. import TableCell from '@material-ui/core/TableCell';
  8. import TablePagination from '@material-ui/core/TablePagination';
  9. import TableRow from '@material-ui/core/TableRow';
  10. import Paper from '@material-ui/core/Paper';
  11. import EnhancedTableToolBar from './EnhancedTableToolBar';
  12. import EnhancedTableHead from './EnhancedTableHead';
  13. import EnhancedTableRow from './EnhancedTableRow';
  14.  
  15. function getSorting(order, orderBy) {
  16. return order === 'desc'
  17. ? (a, b) => (b[orderBy] < a[orderBy] ? -1 : 1)
  18. : (a, b) => (a[orderBy] < b[orderBy] ? -1 : 1);
  19. }
  20.  
  21. const styles = theme => ({
  22. root: {
  23. width: '100%',
  24. marginTop: theme.spacing.unit * 3,
  25. },
  26. table: {
  27. minWidth: 1020,
  28. },
  29. tableWrapper: {
  30. overflowX: 'auto',
  31. },
  32. });
  33.  
  34. class EnhancedTable extends React.Component {
  35.  
  36. constructor(props) {
  37. super(props);
  38. this.state = {
  39. order: 'desc',
  40. orderBy: 'calories',
  41. selected: []
  42. };
  43. }
  44.  
  45. handleRequestSort = (event, property) => {
  46. const orderBy = property;
  47. let order = 'desc';
  48. if (this.state.orderBy === property && this.state.order === 'desc') {
  49. order = 'asc';
  50. }
  51. this.setState({order, orderBy});
  52. };
  53.  
  54. handleSelectAllClick = (event, checked) => {
  55. if (checked) {
  56. console.log(checked)
  57. this.setState(state => ({ selected: state.data.map(n => n._id) }));
  58. return;
  59. }
  60. this.setState({ selected: [] });
  61. };
  62.  
  63.  
  64. isSelected = id => this.state.selected.indexOf(id) !== -1;
  65.  
  66. render() {
  67. const {
  68. classes,
  69. tableConfiguration,
  70. data,
  71. query,
  72. onAddItems,
  73. onDeleteAllItems,
  74. onShowItem,
  75. onDeleteItem,
  76. onPageChange,
  77. onPageSizeChange,
  78. onSelectAllClick
  79. } = this.props;
  80. const {order, orderBy, selected, rowsPerPage, page} = this.state;
  81. const emptyRows = rowsPerPage - Math.min(query.page.size, data.quantity - query.page.number * query.page.size);
  82.  
  83. return (
  84. <Paper className={classes.root}>
  85. <EnhancedTableToolBar
  86. numSelected={selected.length}
  87. onAddItems={onAddItems}
  88. onDeleteAllItems={onDeleteAllItems}/>
  89. <div className={classes.tableWrapper}>
  90. <Table className={classes.table} aria-labelledby="tableTitle">
  91. <EnhancedTableHead
  92. tableConfiguration={tableConfiguration}
  93. numSelected={selected.length}
  94. order={order}
  95. orderBy={orderBy}
  96. onSelectAllClick={this.handleSelectAllClick}
  97. onRequestSort={this.handleRequestSort}
  98. rowCount={data.quantity}
  99. />
  100. <TableBody>
  101. {data.items.map(item => {
  102. return <EnhancedTableRow
  103. tableConfiguration={tableConfiguration}
  104. handleShowItem={onShowItem}
  105. handleDeleteItem={onDeleteItem}
  106. item={item}
  107. isSelected={this.isSelected}
  108. />;
  109. })}
  110. {emptyRows > 0 && (
  111. <TableRow style={{height: 49 * emptyRows}}>
  112. <TableCell colSpan={6}/>
  113. </TableRow>
  114. )}
  115. </TableBody>
  116. </Table>
  117. </div>
  118. <TablePagination
  119. component="div"
  120. count={data.quantity}
  121. rowsPerPage={query.page.size}
  122. page={query.page.number}
  123. backIconButtonProps={{
  124. 'aria-label': 'Previous Page',
  125. }}
  126. nextIconButtonProps={{
  127. 'aria-label': 'Next Page',
  128. }}
  129. onChangePage={onPageChange}
  130. onChangeRowsPerPage={onPageSizeChange}
  131. />
  132. </Paper>
  133. );
  134. }
  135. }
  136.  
  137. EnhancedTable.propTypes = {
  138. classes: PropTypes.object.isRequired,
  139. tableConfiguration: PropTypes.object.isRequired,
  140. data: PropTypes.object.isRequired,
  141. query: PropTypes.object.isRequired,
  142. onAddItems: PropTypes.object.isRequired,
  143. onDeleteAllItems: PropTypes.object.isRequired,
  144. onShowItem: PropTypes.object.isRequired,
  145. onDeleteItem: PropTypes.object.isRequired,
  146. onPageChange: PropTypes.object.isRequired,
  147. onPageSizeChange: PropTypes.object.isRequired,
  148. onSelectAllClick: PropTypes.object.isRequired,
  149. };
  150.  
  151. export default withStyles(styles)(EnhancedTable);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement