TablePagination.tsx 1.8 KB

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