tonstons

Phân trang

Sep 19th, 2021 (edited)
4,397
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { useState } from "react";
  2. import { Pagination } from "react-bootstrap";
  3.  
  4. const PaginationBar = (props) => {
  5.     // UI component phân trang
  6.  
  7.     // Số item mà server trả ra một lần
  8.     const defaultGet = props.defaultGet;
  9.  
  10.     // Nút phân trang hiện tại đang được chọn (active)
  11.     const [pagActive, setPagActive] = useState(1);
  12.  
  13.     // Số nút phân trang sẽ render lên
  14.     let pages = 0;
  15.  
  16.     // Một trang render defaultGet bài viết, nếu có lẻ ra thì phân nó qua trang mới
  17.     if (props.count % defaultGet !== 0) {
  18.         // Tổng số trang cần render
  19.         pages = Math.ceil(props.count / defaultGet);
  20.     } else pages = props.count / defaultGet;
  21.  
  22.     // Array chứa các UI nút phân trang
  23.     let pagItems = [];
  24.  
  25.     // Các nút hiển thị nôi dung là số 1 -> pages (tổng số trang)
  26.     for (let number = 1; number <= pages; number++) {
  27.         pagItems.push(
  28.             <Pagination.Item
  29.                 key={number}
  30.                 active={number === pagActive}
  31.                 onClick={() => {
  32.                     props.getPosts(number);
  33.                     setPagActive(number);
  34.                 }}
  35.             >
  36.                 {number}
  37.             </Pagination.Item>
  38.         );
  39.     }
  40.  
  41.     const pagination = (
  42.         <>
  43.             <Pagination>
  44.                 <Pagination.First
  45.                     onClick={() => {
  46.                         props.getPosts(1);
  47.                         setPagActive(1);
  48.                     }}
  49.                 />
  50.                 <Pagination.Prev
  51.                     // Server ko trả ra trang trước thì disable nút
  52.                     disabled={props.previous == null ? true : false}
  53.                     onClick={() => {
  54.                         let num;
  55.                         // Do trang đầu tiên không có params page=số
  56.                         if (pagActive === 2) num = 1;
  57.                         else num = props.previous.substr(props.previous.length - 1);
  58.                         props.getPosts(num);
  59.                         setPagActive(parseInt(num));
  60.                     }}
  61.                 />
  62.                 {pagItems}
  63.                 <Pagination.Next
  64.                     // Server ko trả ra trang sau thì disable nút
  65.                     disabled={props.next == null ? true : false}
  66.                     onClick={() => {
  67.                         let num = props.next.substr(props.next.length - 1);
  68.                         props.getPosts(num);
  69.                         setPagActive(parseInt(num));
  70.                     }}
  71.                 />
  72.                 <Pagination.Last
  73.                     onClick={() => {
  74.                         props.getPosts(pages);
  75.                         setPagActive(pages);
  76.                     }}
  77.                 />
  78.             </Pagination>
  79.         </>
  80.     );
  81.     // Trả về một UI component hoàn chỉnh
  82.     return pagination;
  83. };
  84.  
  85. export default PaginationBar;
  86.  
Add Comment
Please, Sign In to add comment