Reac front end for psicometric app

Contras.jsx 9.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. import * as React from 'react';
  2. import {
  3. EditSharp,
  4. MailSharp,
  5. } from '@mui/icons-material'
  6. import {
  7. // descendingComparator,
  8. rows,
  9. action_icon,
  10. Comparar,
  11. Cuerpo,
  12. TableHeader as EnhancedTableHead,
  13. TableEncabezadoOperation
  14. } from '../Components/Password/config.js';
  15. import {
  16. Table, TableBody, TableCell, TableContainer,
  17. TableRow, TablePagination,
  18. Paper, Box, Switch, FormControlLabel,
  19. Checkbox,
  20. // TableSortLabel,TableHead,Card
  21. } from '@mui/material';
  22. import { Row, Col, Container } from 'react-bootstrap';
  23. export function Contras() {
  24. const [order, setOrder] = React.useState('asc');
  25. const [orderBy, setOrderBy] = React.useState('calories');
  26. const [selected, setSelected] = React.useState([]);
  27. const [page, setPage] = React.useState(0);
  28. const [dense, setDense] = React.useState(false);
  29. const [rowsPerPage, setRowsPerPage] = React.useState(10);
  30. const handleRequestSort = (_event, property) => {
  31. const isAsc = orderBy === property && order === 'asc';
  32. setOrder(isAsc ? 'desc' : 'asc');
  33. setOrderBy(property);
  34. };
  35. const handleSelectAllClick = (event) => {
  36. if (event.target.checked) {
  37. const newSelecteds = rows.map( (n) => n.name);
  38. setSelected(newSelecteds);
  39. return;
  40. }
  41. setSelected([]);
  42. };
  43. const handleClick = (__event, name) => {
  44. const selectedIndex = selected.indexOf(name);
  45. let newSelected = [];
  46. if (selectedIndex === -1) {
  47. newSelected = newSelected.concat(selected, name);
  48. } else if (selectedIndex === 0) {
  49. newSelected = newSelected.concat(selected.slice(1));
  50. } else if (selectedIndex === selected.length - 1) {
  51. newSelected = newSelected.concat(selected.slice(0, -1));
  52. } else if (selectedIndex > 0) {
  53. newSelected = newSelected.concat(
  54. selected.slice(0, selectedIndex),
  55. selected.slice(selectedIndex + 1),
  56. );
  57. }
  58. setSelected(newSelected);
  59. };
  60. const handleChangePage = (_event, newPage) => {
  61. setPage(newPage);
  62. };
  63. const handleChangeRowsPerPage = (event) => {
  64. setRowsPerPage(parseInt(event.target.value, 10));
  65. setPage(0);
  66. };
  67. const handleChangeDense = (event) => {
  68. setDense(event.target.checked);
  69. };
  70. const isSelected = (name) => selected.indexOf(name) !== -1;
  71. const emptyRows = page > 0 ? Math.max(0, (1 + page) * rowsPerPage - rows.length) : 0;
  72. return (
  73. <div className="content-section">
  74. <div className="main">
  75. <Container>
  76. <Row>
  77. <Col>
  78. <Box sx={{ width: '100%' }}>
  79. <Paper sx={{ width: '100%', mb: 2 }}>
  80. <TableEncabezadoOperation numSelected={selected.length} />
  81. <TableContainer>
  82. <Table
  83. sx={{ minWidth: 750 }}
  84. aria-labelledby="tableTitle"
  85. size={dense ? 'small' : 'medium'}
  86. >
  87. <EnhancedTableHead
  88. numSelected={selected.length}
  89. order={order}
  90. orderBy={orderBy}
  91. onSelectAllClick={handleSelectAllClick}
  92. onRequestSort={handleRequestSort}
  93. rowCount={rows.length}
  94. />
  95. <TableBody>
  96. {Cuerpo(rows, Comparar(order, orderBy))
  97. .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)
  98. .map( (row, index) => {
  99. const isItemSelected = isSelected(row.name);
  100. const labelId = `enhanced-table-checkbox-${index}`;
  101. return (
  102. <TableRow
  103. hover
  104. onClick={(event) => handleClick(event, row.name)}
  105. role="checkbox"
  106. aria-checked={isItemSelected}
  107. tabIndex={-1}
  108. key={row.name}
  109. selected={isItemSelected}
  110. >
  111. <TableCell padding="checkbox">
  112. <Checkbox
  113. color="primary"
  114. checked={isItemSelected}
  115. inputProps={{
  116. 'aria-labelledby': labelId,
  117. }}
  118. />
  119. </TableCell>
  120. <TableCell
  121. component="th"
  122. id={labelId}
  123. scope="row"
  124. padding="none"
  125. >
  126. {row.pass}
  127. </TableCell>
  128. <TableCell align="right">{row.nivel}</TableCell>
  129. <TableCell align="right">{row.puesto}</TableCell>
  130. <TableCell align="right">{row.cui}</TableCell>
  131. <TableCell align="right">{row.uso}</TableCell>
  132. <TableCell align="right">{row.picture}</TableCell>
  133. <TableCell align="right">{row.cv}</TableCell>
  134. <TableCell align="right">{row.replic}</TableCell>
  135. <TableCell align="right">
  136. <EditSharp style={action_icon} />
  137. <MailSharp style={action_icon}/>
  138. </TableCell>
  139. </TableRow>
  140. );
  141. })}
  142. {emptyRows > 0 && (
  143. <TableRow
  144. style={{
  145. height: (dense ? 33 : 53) * emptyRows,
  146. }}
  147. >
  148. <TableCell colSpan={6} />
  149. </TableRow>
  150. )}
  151. </TableBody>
  152. </Table>
  153. </TableContainer>
  154. <TablePagination
  155. rowsPerPageOptions={[5, 10, 25]}
  156. component="div"
  157. count={rows.length}
  158. rowsPerPage={rowsPerPage}
  159. page={page}
  160. onPageChange={handleChangePage}
  161. onRowsPerPageChange={handleChangeRowsPerPage}
  162. />
  163. </Paper>
  164. <FormControlLabel
  165. control={<Switch checked={dense} onChange={handleChangeDense} />}
  166. label="Comprimir"
  167. />
  168. </Box>
  169. </Col>
  170. </Row>
  171. </Container>
  172. </div>
  173. </div>
  174. );
  175. }