1
0

TablePagination.tsx 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /* eslint-disable max-len */
  2. import React, { PureComponent, isValidElement } from 'react';
  3. import PropTypes from 'prop-types';
  4. import { get, isFunction } from 'lodash';
  5. import { cssClasses } from '@douyinfe/semi-foundation/table/constants';
  6. import Pagination from '../pagination';
  7. import { RenderPagination, TablePaginationProps as PaginationProps } from './interface';
  8. export interface TablePaginationProps {
  9. style?: React.CSSProperties;
  10. prefixCls?: string;
  11. pagination?: PaginationProps;
  12. info?: React.ReactNode;
  13. renderPagination?: RenderPagination;
  14. }
  15. export default class TablePagination extends PureComponent<TablePaginationProps> {
  16. static propTypes = {
  17. style: PropTypes.object,
  18. prefixCls: PropTypes.string,
  19. pagination: PropTypes.object,
  20. info: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
  21. renderPagination: PropTypes.func,
  22. };
  23. static defaultProps = {
  24. prefixCls: cssClasses.PREFIX,
  25. };
  26. render() {
  27. const { pagination, prefixCls, info, renderPagination } = this.props;
  28. const total = get(pagination, 'total');
  29. const customPagination = renderPagination && isFunction(renderPagination) ? renderPagination(pagination) : null;
  30. return (
  31. <div className={`${prefixCls}-pagination-outer`}>
  32. {
  33. isValidElement(customPagination) ? customPagination : (
  34. <>
  35. <span className={`${prefixCls}-pagination-info`}>{info}</span>
  36. <span className={`${prefixCls}-pagination-wrapper`}>
  37. {total > 0 ? <Pagination {...pagination} key={get(pagination, 'pageSize', 'pagination')} /> : null}
  38. </span>
  39. </>
  40. )
  41. }
  42. </div>
  43. );
  44. }
  45. }