Reac front end for psicometric app

Puestos.jsx 7.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. import React, { useState, useCallback} from 'react';
  2. import { Row, Col } from 'react-bootstrap'
  3. import { Toaster } from 'react-hot-toast';
  4. // import toast, { Toaster } from 'react-hot-toast';
  5. import {
  6. ToggleButton, ToggleButtonGroup, Box,
  7. Paper, Pagination,
  8. } from '@mui/material';
  9. import { ViewList as ViewListIcon, ViewModule as ViewModuleIcon, } from '@mui/icons-material';
  10. import { default as useAuth } from '../Auth/useAuth';
  11. import { Service } from '../Utils/HTTP';
  12. import { Divide } from '../Utils/Paginate';
  13. import Express from '../Components/Modal/AgregarExpress';
  14. import Manual from '../Components/Modal/AgregarManual';
  15. import Editar from '../Components/Modal/EditPlaza';
  16. import Eliminar from '../Components/Modal/EliminarPlaza';
  17. import Mostrar from '../Components/Modal/MostrarPlaza';
  18. import { ListMode } from '../Components/Puestos/ListMode'
  19. import { GridMode } from '../Components/Puestos/GridMode'
  20. import { Add as AddIcon, } from '@mui/icons-material/'
  21. import { Loading } from '../Components/Generics/loading'
  22. import { ErrorMessage } from '../Components/Generics/Error'
  23. import { useQuery } from 'react-query';
  24. export function Puestos() {
  25. const auth = useAuth();
  26. const token = auth.getToken();
  27. const [page, setPage] = useState(1);
  28. const getAll = async () => {
  29. let rest = new Service("/plaza/getall")
  30. let response = await rest.getQuery(token);
  31. return response;
  32. }
  33. const { isLoading, error, data : result } = useQuery('puestos', getAll);
  34. const changePage = useCallback((_, value) => setPage(value),[]);
  35. const [alignment, setAlignment] = React.useState('grid');
  36. const handleChange = useCallback((_event, newAlignment) => setAlignment(newAlignment),[])
  37. const children = [
  38. <ToggleButton value="list" key="list">
  39. <ViewListIcon />
  40. </ToggleButton>,
  41. <ToggleButton value="grid" key="grid">
  42. <ViewModuleIcon />
  43. </ToggleButton>,
  44. ];
  45. const control = {
  46. value: alignment,
  47. onChange: handleChange,
  48. exclusive: true,
  49. };
  50. let [manual, setManual] = React.useState(false);
  51. let [expres, setExpress] = React.useState(false);
  52. let [puesto, setPuesto] = React.useState(false);
  53. let [edit, setEdit] = React.useState(false);
  54. let [del, setDelete] = React.useState(false);
  55. let [show, setShow] = React.useState(false);
  56. const toggle = useCallback((type,puesto) => {
  57. setPuesto(puesto)
  58. switch(type){
  59. case "VER": {
  60. setShow(!show);
  61. break;
  62. }
  63. case "EDIT": {
  64. setEdit(!edit)
  65. break;
  66. }
  67. case "DEL": {
  68. setDelete(!del)
  69. break;
  70. }
  71. default: break;
  72. }
  73. },[edit,del,show])
  74. if (isLoading){
  75. return(
  76. <Paper sx={{ mb: 2, padding: 2, height: '100%', minHeight: '95vh' }}>
  77. <main id="loading_or_content">
  78. <Loading />
  79. </main>
  80. </Paper>
  81. )
  82. }
  83. if (error) {
  84. return (
  85. <Paper sx={{ mb: 2, padding: 2, height: '100%', minHeight: '95vh' }}>
  86. <main id="loading_or_content">
  87. <ErrorMessage/>
  88. </main>
  89. </Paper>
  90. )
  91. }
  92. const total_items = Divide(result.data).length
  93. return (
  94. <div className="content-section">
  95. <div className="main">
  96. <Box sx={{}}>
  97. <Paper sx={{ mb: 2, padding: 2, }}>
  98. <Row style={{ paddingBottom: 15 }}>
  99. <Col md="2" sm="2" xs="2">
  100. <div className="breadcrumb-header">
  101. <Box sx={{ float: 'left', display: 'flex', flexDirection: 'column', alignItems: 'center', '& > :not(style) + :not(style)': { mt: 2 }, }} >
  102. <ToggleButtonGroup size="small" {...control}>
  103. {children}
  104. </ToggleButtonGroup>
  105. </Box>
  106. </div>
  107. </Col>
  108. <Col md="10" sm='10' xs="10">
  109. <div className="add_producto">
  110. <div onClick={() => setManual(true)} className="btn_add_producto">
  111. <span className="btn_plaza_common" >Agregar manual <AddIcon fontSize="small" /></span>
  112. </div>
  113. </div>
  114. <div onClick={() => setExpress(true)} className="add_producto">
  115. <div className="btn_add_producto">
  116. <span className="btn_plaza_common">Agregar express <AddIcon fontSize="small" /></span>
  117. </div>
  118. </div>
  119. </Col>
  120. </Row>
  121. <div >
  122. <div className={`main_productos ${alignment === 'grid' ? 'activar_vista' : 'desactivar_vista'}`} id="grid_view">
  123. <Row>
  124. <GridMode
  125. toggle={toggle}
  126. showing={alignment}
  127. data={Divide( result.data )}
  128. index={page - 1}
  129. />
  130. </Row>
  131. </div>
  132. <div className={`main_list_products ${alignment === 'list' ? 'activar_vista' : 'desactivar_vista'}`} id="list_view_products">
  133. <Row>
  134. <ListMode
  135. toggle={toggle}
  136. showing={alignment}
  137. data={Divide( result.data )}
  138. index={page - 1}
  139. />
  140. </Row>
  141. </div>
  142. <Pagination
  143. sx={{
  144. "& ul": {
  145. paddingTop: "20px",
  146. justifyContent: "center"
  147. }
  148. }}
  149. siblingCount={2}
  150. boundaryCount={2}
  151. shape='rounded'
  152. count={total_items}
  153. page={page}
  154. onChange={changePage}
  155. />
  156. </div>
  157. </Paper>
  158. </Box>
  159. </div>
  160. <Express setExpress={setExpress} visible={expres} onClose={() => setExpress(false)} />
  161. <Manual visible={manual} onClose={() => setManual(false)} />
  162. <Mostrar puesto={puesto} visible={show} toggle={toggle} />
  163. <Editar puesto={puesto} visible={edit} toggle={toggle} />
  164. <Eliminar visible={del} onClose={() => setDelete(false)} />
  165. <Toaster position="bottom-right" reverseOrder={false} />
  166. </div>
  167. )
  168. }