
* feat(user-list): add pagination * feat: add actual total count in getUsers --------- Co-authored-by: Ali BARIN <ali.barin53@gmail.com>
90 lines
2.4 KiB
TypeScript
90 lines
2.4 KiB
TypeScript
import { useTheme } from '@mui/material';
|
|
import IconButton from '@mui/material/IconButton';
|
|
import FirstPageIcon from '@mui/icons-material/FirstPage';
|
|
import KeyboardArrowLeft from '@mui/icons-material/KeyboardArrowLeft';
|
|
import KeyboardArrowRight from '@mui/icons-material/KeyboardArrowRight';
|
|
import LastPageIcon from '@mui/icons-material/LastPage';
|
|
import Box from '@mui/material/Box';
|
|
|
|
interface TablePaginationActionsProps {
|
|
count: number;
|
|
page: number;
|
|
rowsPerPage: number;
|
|
onPageChange: (
|
|
event: React.MouseEvent<HTMLButtonElement>,
|
|
newPage: number
|
|
) => void;
|
|
}
|
|
|
|
export default function TablePaginationActions(
|
|
props: TablePaginationActionsProps
|
|
) {
|
|
const theme = useTheme();
|
|
const { count, page, rowsPerPage, onPageChange } = props;
|
|
|
|
const handleFirstPageButtonClick = (
|
|
event: React.MouseEvent<HTMLButtonElement>
|
|
) => {
|
|
onPageChange(event, 0);
|
|
};
|
|
|
|
const handleBackButtonClick = (
|
|
event: React.MouseEvent<HTMLButtonElement>
|
|
) => {
|
|
onPageChange(event, page - 1);
|
|
};
|
|
|
|
const handleNextButtonClick = (
|
|
event: React.MouseEvent<HTMLButtonElement>
|
|
) => {
|
|
onPageChange(event, page + 1);
|
|
};
|
|
|
|
const handleLastPageButtonClick = (
|
|
event: React.MouseEvent<HTMLButtonElement>
|
|
) => {
|
|
onPageChange(event, Math.max(0, Math.ceil(count / rowsPerPage) - 1));
|
|
};
|
|
|
|
return (
|
|
<Box sx={{ flexShrink: 0, ml: 2.5 }}>
|
|
<IconButton
|
|
onClick={handleFirstPageButtonClick}
|
|
disabled={page === 0}
|
|
aria-label="first page"
|
|
>
|
|
{theme.direction === 'rtl' ? <LastPageIcon /> : <FirstPageIcon />}
|
|
</IconButton>
|
|
<IconButton
|
|
onClick={handleBackButtonClick}
|
|
disabled={page === 0}
|
|
aria-label="previous page"
|
|
>
|
|
{theme.direction === 'rtl' ? (
|
|
<KeyboardArrowRight />
|
|
) : (
|
|
<KeyboardArrowLeft />
|
|
)}
|
|
</IconButton>
|
|
<IconButton
|
|
onClick={handleNextButtonClick}
|
|
disabled={page >= Math.ceil(count / rowsPerPage) - 1}
|
|
aria-label="next page"
|
|
>
|
|
{theme.direction === 'rtl' ? (
|
|
<KeyboardArrowLeft />
|
|
) : (
|
|
<KeyboardArrowRight />
|
|
)}
|
|
</IconButton>
|
|
<IconButton
|
|
onClick={handleLastPageButtonClick}
|
|
disabled={page >= Math.ceil(count / rowsPerPage) - 1}
|
|
aria-label="last page"
|
|
>
|
|
{theme.direction === 'rtl' ? <FirstPageIcon /> : <LastPageIcon />}
|
|
</IconButton>
|
|
</Box>
|
|
);
|
|
}
|