PaginationBar.jsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import React from "react";
  2. import { createTheme, ThemeProvider } from "@mui/material";
  3. import Pagination from "@mui/material/Pagination";
  4. import { useNavigate, useSearchParams } from "react-router-dom";
  5. import { useEffect } from "react";
  6. import { useDispatch } from "react-redux";
  7. import { LIMIT, ROUTES } from "../../utils/constants";
  8. import {
  9. actionGetPlaylistsCount,
  10. actionPlaylistPageChange,
  11. } from "../../redux/actions/creators/playlists";
  12. const theme = createTheme({
  13. palette: {
  14. mode: "dark",
  15. },
  16. });
  17. const PaginationBar = ({ currentPage, count }) => {
  18. const dispatch = useDispatch();
  19. const navigate = useNavigate();
  20. const [searchParams] = useSearchParams();
  21. useEffect(() => {
  22. dispatch(actionGetPlaylistsCount());
  23. const currPage = +searchParams.get("page") || currentPage;
  24. dispatch(actionPlaylistPageChange(currPage));
  25. }, []);
  26. const changeHandler = (e, page) => {
  27. navigate(`${ROUTES.PLAYLISTS}?page=${page}`);
  28. dispatch(actionPlaylistPageChange(page));
  29. };
  30. return (
  31. <ThemeProvider theme={theme}>
  32. <div style={{ alignSelf: "center" }}>
  33. <Pagination
  34. page={currentPage}
  35. count={Math.ceil(count / LIMIT.PLAYLISTS_ON_PAGE) ?? count}
  36. variant="outlined"
  37. shape="rounded"
  38. onChange={changeHandler}
  39. />
  40. </div>
  41. </ThemeProvider>
  42. );
  43. };
  44. export default PaginationBar;