2
0

TablePaginationActions.tsx 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { Theme, Typography } from '@mui/material';
  2. import CustomButton from '../customButton/CustomButton';
  3. import icons from '../icons/Icons';
  4. import React from 'react';
  5. import { useTranslation } from 'react-i18next';
  6. import { TablePaginationActionsProps } from './Types';
  7. import { makeStyles } from '@mui/styles';
  8. const useStyles = makeStyles((theme: Theme) => ({
  9. root: {
  10. display: 'flex',
  11. alignItems: 'center',
  12. flexShrink: 0,
  13. },
  14. page: {
  15. display: 'flex',
  16. justifyContent: 'center',
  17. alignItems: 'center',
  18. width: '24px',
  19. height: '24px',
  20. backgroundColor: theme.palette.common.white,
  21. },
  22. btn: {
  23. paddingLeft: 8,
  24. paddingRight: 8,
  25. minWidth: '24px',
  26. },
  27. }));
  28. const TablePaginationActions = (props: TablePaginationActionsProps) => {
  29. const classes = useStyles();
  30. const { count, page, rowsPerPage, onPageChange } = props;
  31. // icons
  32. const NextIcon = icons.next;
  33. const PrevIcon = icons.prev;
  34. // i18n
  35. const { t: commonTrans } = useTranslation();
  36. const gridTrans = commonTrans('grid');
  37. const handleBackButtonClick = (
  38. event: React.MouseEvent<HTMLButtonElement>
  39. ) => {
  40. onPageChange(event, page - 1);
  41. };
  42. const handleNextButtonClick = (
  43. event: React.MouseEvent<HTMLButtonElement>
  44. ) => {
  45. onPageChange(event, page + 1);
  46. };
  47. return (
  48. <div className={classes.root}>
  49. <CustomButton
  50. onClick={handleBackButtonClick}
  51. disabled={page === 0}
  52. aria-label={gridTrans.prevLabel}
  53. className={classes.btn}
  54. >
  55. <PrevIcon />
  56. </CustomButton>
  57. <Typography variant="body2" className={classes.page}>
  58. {page + 1}
  59. </Typography>
  60. <CustomButton
  61. onClick={handleNextButtonClick}
  62. disabled={page >= Math.ceil(count / rowsPerPage) - 1}
  63. aria-label={gridTrans.nextLabel}
  64. className={classes.btn}
  65. >
  66. <NextIcon />
  67. </CustomButton>
  68. </div>
  69. );
  70. };
  71. export default TablePaginationActions;