import React, { useState } from 'react'; import { Button, Wrapper } from './style'; import { buildPagination, calNewPage, getButtonContent } from './math'; import { Left, Right, PageSizeOptions, Jumper } from './style'; import Input, { PositiveIntegerWithLimit } from '../input'; import { IPagination } from './types'; const Pagination = function(props: IPagination) { const { type, pageSize, total, page, pageSizeOptions, showPageSizeOptions, onChange, showJumper, ...rest } = props; const controlledPage = 'page' in props; const controlledPageSize = 'pageSize' in props; const [pageState, setPageState] = useState(1); const [pageSizeState, setPageSizeState] = useState(10); const pages = Math.ceil(total / pageSizeState); if (controlledPage && pageState !== page) { setPageState(page as number); } if (controlledPageSize && pageSizeState !== pageSize) { setPageSizeState(pageSize as number); } return ( {buildPagination(pages, pageState as number).map((i, index) => ( ))} {showPageSizeOptions && ( ({ label: `${p}条/页`, value: p }))} value={pageSizeState} onChange={(newPageSize: number) => { const newPage = Math.ceil((pageState * pageSizeState) / newPageSize); const max = Math.ceil(total / newPageSize); const needChangePage = max < pageState; if (!controlledPage && needChangePage) { setPageState(newPage); } if (!controlledPageSize) { setPageSizeState(newPageSize); } onChange && onChange({ page: needChangePage ? newPage : pageState, pageSize: newPageSize }); }} /> )} {showJumper && ( 跳至 { setPageState(+value); onChange && onChange({ page: +value, pageSize: pageSizeState }); }} /> )} ); }; Pagination.defaultProps = { type: 'normal', pageSizeOptions: [10, 20, 50], showPageSizeOptions: true, showJumper: false, }; export default Pagination;