Puestos.jsx 6.2 KB

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