Categories.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { useEffect, useState } from 'react';
  2. import { Route } from 'react-router-dom';
  3. import { connect } from 'react-redux';
  4. import s from './Categories.module.css';
  5. import { asyncGetCategories } from '../../redux/categories/operation';
  6. import {
  7. ICategoriesProps,
  8. ICategoriesState,
  9. } from '../../typescript/components/Categories/interfaces';
  10. import Category from './Category/Category';
  11. import Pagination from '../PaginationBar/PaginationBar';
  12. const Categories = ({ categoriesArr, getCategories }: ICategoriesProps) => {
  13. useEffect(() => {
  14. getCategories();
  15. }, [getCategories]);
  16. const [page, setPage] = useState(1);
  17. const handlePageChange = (page: number) => setPage(page);
  18. return categoriesArr ? (
  19. <Route>
  20. <ul className={s.categories_list}>
  21. {categoriesArr.length !== 0 &&
  22. categoriesArr
  23. .slice((page - 1) * 5, page * 5)
  24. .map((category, i: number) => (
  25. <Category key={i} category={category} />
  26. ))}
  27. </ul>
  28. <Pagination
  29. page={page}
  30. total={Math.ceil(categoriesArr.length / 5)}
  31. handlePageChange={handlePageChange}
  32. />
  33. </Route>
  34. ) : null;
  35. };
  36. const mapStateToProps = (state: ICategoriesState) => ({
  37. categoriesArr: state.categories.categoriesArr,
  38. });
  39. const mapDispatchToProps = (
  40. dispatch: (dispatchAction: any) => Promise<void>,
  41. ) => ({
  42. getCategories: () => dispatch(asyncGetCategories()),
  43. });
  44. export default connect(mapStateToProps, mapDispatchToProps)(Categories);