Tabla.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import React from 'react';
  2. import { Table } from 'antd';
  3. import { useModels, useSortColumns, usePagination } from '../hooks';
  4. import PropTypes from "prop-types";
  5. const Tabla = ({
  6. nameURL,
  7. expand = '',
  8. extraParams = {},
  9. columns,
  10. order,
  11. innerRef,
  12. scrollX = '80vw',
  13. summary = null,
  14. paginacion = null,
  15. ...props
  16. }) => {
  17. const [columnsData, setColumnsData] = React.useState([]);
  18. const [request, setRequest] = React.useState({});
  19. const {
  20. limit,
  21. page,
  22. configPagination,
  23. setTotal,
  24. setLimit,
  25. } = usePagination();
  26. const { sortValue, columnsContent } = useSortColumns({ columnsData, order: order || 'id-desc' });
  27. const requestParams = React.useMemo(() => {
  28. return ({
  29. name: nameURL,
  30. ordenar: sortValue,
  31. expand: expand || '',
  32. extraParams: extraParams,
  33. limite: paginacion === false ? -1 : limit,
  34. pagina: page
  35. })
  36. }, [expand, extraParams, limit, nameURL, page, sortValue]);
  37. const [
  38. models,
  39. modelsLoading, ,
  40. modelsPage,
  41. refresh
  42. ] = useModels(request);
  43. React.useEffect(() => {
  44. setRequest(requestParams);
  45. return () => setRequest({});
  46. }, [requestParams]);
  47. React.useEffect(() => {
  48. setColumnsData(columns);
  49. }, [columns]);
  50. React.useEffect(() => {
  51. if (modelsPage) {
  52. setTotal(modelsPage?.total);
  53. }
  54. }, [modelsPage, setTotal]);
  55. if (innerRef) {
  56. innerRef.current = {
  57. refresh
  58. }
  59. }
  60. return (
  61. <Table
  62. {...props}
  63. dataSource={models}
  64. columns={columnsContent}
  65. rowKey={'id'}
  66. loading={modelsLoading}
  67. pagination={paginacion === false ? paginacion : configPagination}
  68. style={{ whiteSpace: 'pre' }}
  69. scroll={{ x: scrollX }}
  70. size="small"
  71. summary={(pageData) => summary && summary(pageData)}
  72. />
  73. )
  74. }
  75. Tabla.propTypes = {
  76. nameURL: PropTypes.string.isRequired,
  77. columns: PropTypes.array.isRequired,
  78. expand: PropTypes.string,
  79. extraParams: PropTypes.object,
  80. order: PropTypes.string,
  81. scrollX: PropTypes.string,
  82. }
  83. export default Tabla