|
1 |
| -import React, { useEffect, useState } from 'react' |
| 1 | +import React from 'react' |
2 | 2 | import PropTypes from 'prop-types'
|
3 |
| -import api from '../_api' |
4 |
| -import Table from '@material-ui/core/Table' |
5 |
| -import TableBody from '@material-ui/core/TableBody' |
6 |
| -import TableCell from '@material-ui/core/TableCell' |
7 |
| -import TableContainer from '@material-ui/core/TableContainer' |
8 |
| -import TableHead from '@material-ui/core/TableHead' |
9 |
| -import TableRow from '@material-ui/core/TableRow' |
10 |
| -import Paper from '@material-ui/core/Paper' |
11 |
| -import Avatar from '@material-ui/core/Avatar' |
12 |
| -import { makeStyles, useTheme } from '@material-ui/core/styles' |
13 |
| -import TableFooter from '@material-ui/core/TableFooter' |
14 |
| -import TablePagination from '@material-ui/core/TablePagination' |
15 |
| -import IconButton from '@material-ui/core/IconButton' |
16 |
| -import FirstPageIcon from '@material-ui/icons/FirstPage' |
17 |
| -import KeyboardArrowLeft from '@material-ui/icons/KeyboardArrowLeft' |
18 |
| -import KeyboardArrowRight from '@material-ui/icons/KeyboardArrowRight' |
19 |
| -import LastPageIcon from '@material-ui/icons/LastPage' |
20 |
| -import EditIcon from '@material-ui/icons/Edit' |
21 |
| -import DeleteIcon from '@material-ui/icons/Delete' |
22 |
| - |
23 |
| -const useStyles1 = makeStyles(theme => ({ |
24 |
| - root: { |
25 |
| - flexShrink: 0, |
26 |
| - marginLeft: theme.spacing(2.5), |
27 |
| - }, |
28 |
| -})) |
29 |
| - |
30 |
| -function TablePaginationActions(props) { |
31 |
| - const classes = useStyles1() |
32 |
| - const theme = useTheme() |
33 |
| - const { count, page, rowsPerPage, onChangePage } = props |
34 |
| - |
35 |
| - const handleFirstPageButtonClick = event => { |
36 |
| - onChangePage(event, 0) |
37 |
| - } |
38 |
| - |
39 |
| - const handleBackButtonClick = event => { |
40 |
| - onChangePage(event, page - 1) |
41 |
| - } |
42 |
| - |
43 |
| - const handleNextButtonClick = event => { |
44 |
| - onChangePage(event, page + 1) |
45 |
| - } |
46 |
| - |
47 |
| - const handleLastPageButtonClick = event => { |
48 |
| - onChangePage(event, Math.max(0, Math.ceil(count / rowsPerPage) - 1)) |
49 |
| - } |
50 |
| - |
51 |
| - return ( |
52 |
| - <div className={classes.root}> |
53 |
| - <IconButton |
54 |
| - onClick={handleFirstPageButtonClick} |
55 |
| - disabled={page === 0} |
56 |
| - aria-label="first page" |
57 |
| - > |
58 |
| - {theme.direction === 'rtl' ? <LastPageIcon /> : <FirstPageIcon />} |
59 |
| - </IconButton> |
60 |
| - <IconButton |
61 |
| - onClick={handleBackButtonClick} |
62 |
| - disabled={page === 0} |
63 |
| - aria-label="previous page" |
64 |
| - > |
65 |
| - {theme.direction === 'rtl' ? <KeyboardArrowRight /> : <KeyboardArrowLeft />} |
66 |
| - </IconButton> |
67 |
| - <IconButton |
68 |
| - onClick={handleNextButtonClick} |
69 |
| - disabled={page >= Math.ceil(count / rowsPerPage) - 1} |
70 |
| - aria-label="next page" |
71 |
| - > |
72 |
| - {theme.direction === 'rtl' ? <KeyboardArrowLeft /> : <KeyboardArrowRight />} |
73 |
| - </IconButton> |
74 |
| - <IconButton |
75 |
| - onClick={handleLastPageButtonClick} |
76 |
| - disabled={page >= Math.ceil(count / rowsPerPage) - 1} |
77 |
| - aria-label="last page" |
78 |
| - > |
79 |
| - {theme.direction === 'rtl' ? <FirstPageIcon /> : <LastPageIcon />} |
80 |
| - </IconButton> |
81 |
| - </div> |
82 |
| - ) |
83 |
| -} |
84 |
| - |
85 |
| -TablePaginationActions.propTypes = { |
86 |
| - count: PropTypes.number.isRequired, |
87 |
| - onChangePage: PropTypes.func.isRequired, |
88 |
| - page: PropTypes.number.isRequired, |
89 |
| - rowsPerPage: PropTypes.number.isRequired, |
90 |
| -} |
91 |
| - |
92 |
| -const useStyles2 = makeStyles({ |
93 |
| - table: { |
94 |
| - minWidth: 500, |
95 |
| - }, |
96 |
| -}) |
| 3 | +import { Route } from 'react-router-dom' |
| 4 | +import UsersList from './Users/UsersList' |
97 | 5 |
|
98 | 6 | const Administration = ({ match }) => {
|
99 |
| - const [usersData, setUsersData] = useState({ users: [], count: 0 }) |
100 |
| - useEffect(() => { |
101 |
| - api.users.getList().then(res => setUsersData(res)) |
102 |
| - }, []) |
103 |
| - const classes = useStyles2() |
104 |
| - const [page, setPage] = React.useState(0) |
105 |
| - const [rowsPerPage, setRowsPerPage] = React.useState(10) |
106 |
| - |
107 |
| - const emptyRows = |
108 |
| - rowsPerPage - Math.min(rowsPerPage, usersData.users.length - page * rowsPerPage) |
109 |
| - |
110 |
| - const handleChangePage = (event, newPage) => { |
111 |
| - setPage(newPage) |
112 |
| - } |
113 |
| - |
114 |
| - const handleChangeRowsPerPage = event => { |
115 |
| - setRowsPerPage(parseInt(event.target.value, 10)) |
116 |
| - setPage(0) |
117 |
| - } |
118 |
| - |
119 | 7 | return (
|
120 |
| - <TableContainer component={Paper}> |
121 |
| - <Table className={classes.table} aria-label="custom pagination table"> |
122 |
| - <TableHead> |
123 |
| - <TableRow> |
124 |
| - <TableCell>Avatar</TableCell> |
125 |
| - <TableCell>First Name</TableCell> |
126 |
| - <TableCell>Last Name</TableCell> |
127 |
| - <TableCell>Username</TableCell> |
128 |
| - <TableCell>Email</TableCell> |
129 |
| - <TableCell>Actions</TableCell> |
130 |
| - </TableRow> |
131 |
| - </TableHead> |
132 |
| - <TableBody> |
133 |
| - {(rowsPerPage > 0 |
134 |
| - ? usersData.users.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage) |
135 |
| - : usersData.users |
136 |
| - ).map(row => ( |
137 |
| - <TableRow key={row.id}> |
138 |
| - <TableCell> |
139 |
| - <Avatar alt={row.firstName} src={row.avatarUrl} /> |
140 |
| - </TableCell> |
141 |
| - <TableCell component="th" scope="row"> |
142 |
| - {row.firstName} |
143 |
| - </TableCell> |
144 |
| - <TableCell>{row.lastName}</TableCell> |
145 |
| - <TableCell>{row.username}</TableCell> |
146 |
| - <TableCell>{row.email}</TableCell> |
147 |
| - <TableCell> |
148 |
| - <EditIcon /> |
149 |
| - <DeleteIcon /> |
150 |
| - </TableCell> |
151 |
| - </TableRow> |
152 |
| - ))} |
153 |
| - {emptyRows > 0 && ( |
154 |
| - <TableRow style={{ height: 53 * emptyRows }}> |
155 |
| - <TableCell colSpan={6} /> |
156 |
| - </TableRow> |
157 |
| - )} |
158 |
| - </TableBody> |
159 |
| - <TableFooter> |
160 |
| - <TableRow> |
161 |
| - <TablePagination |
162 |
| - rowsPerPageOptions={[5, 10, 25, { label: 'All', value: -1 }]} |
163 |
| - colSpan={12} |
164 |
| - count={usersData.users.length} |
165 |
| - rowsPerPage={rowsPerPage} |
166 |
| - page={page} |
167 |
| - SelectProps={{ |
168 |
| - inputProps: { 'aria-label': 'rows per page' }, |
169 |
| - native: true, |
170 |
| - }} |
171 |
| - onChangePage={handleChangePage} |
172 |
| - onChangeRowsPerPage={handleChangeRowsPerPage} |
173 |
| - ActionsComponent={TablePaginationActions} |
174 |
| - /> |
175 |
| - </TableRow> |
176 |
| - </TableFooter> |
177 |
| - </Table> |
178 |
| - </TableContainer> |
| 8 | + <> |
| 9 | + <Route path={`${match.path}/users`} component={UsersList} /> |
| 10 | + </> |
179 | 11 | )
|
180 | 12 | }
|
181 | 13 |
|
|
0 commit comments