import React from 'react'; import PropTypes from 'prop-types'; import { PageList, PaginationAdapter } from '@douyinfe/semi-foundation/lib/es/pagination/foundation'; import '@douyinfe/semi-foundation/lib/es/pagination/pagination.css'; import { ContextValue } from '../configProvider/context'; import { Locale } from '../locale/interface'; import BaseComponent from '../_base/baseComponent'; import { Position } from '../tooltip'; export interface PaginationProps { total?: number; showTotal?: boolean; pageSize?: number; pageSizeOpts?: Array; size?: 'small' | 'default'; currentPage?: number; defaultCurrentPage?: number; onPageChange?: (currentPage: number) => void; onPageSizeChange?: (newPageSize: number) => void; onChange?: (currentPage: number, pageSize: number) => void; prevText?: React.ReactNode; nextText?: React.ReactNode; showSizeChanger?: boolean; showQuickJumper?: boolean; popoverZIndex?: number; popoverPosition?: PopoverPosition; style?: React.CSSProperties; className?: string; hideOnSinglePage?: boolean; hoverShowPageSelect?: boolean; disabled?: boolean; /** * Whether to prevent automatic adjustment of currentPage when pageSize changes. * When true, changing pageSize will not automatically recalculate the currentPage, * allowing users to handle page changes themselves in onPageSizeChange callback. * @default false */ preventPageChangeOnPageSizeChange?: boolean; } export interface PaginationState { total: number; showTotal: boolean; currentPage: number; pageSize: number; pageList: PageList; prevDisabled: boolean; quickJumpPage: string | number; nextDisabled: boolean; restLeftPageList: number[]; restRightPageList: number[]; allPageNumbers: number[]; } export type PaginationLocale = Locale['Pagination']; export type PopoverPosition = Position; export type { PageList }; export default class Pagination extends BaseComponent { static contextType: React.Context; static propTypes: { total: PropTypes.Requireable; showTotal: PropTypes.Requireable; pageSize: PropTypes.Requireable; pageSizeOpts: PropTypes.Requireable; size: PropTypes.Requireable; currentPage: PropTypes.Requireable; defaultCurrentPage: PropTypes.Requireable; onPageChange: PropTypes.Requireable<(...args: any[]) => any>; onPageSizeChange: PropTypes.Requireable<(...args: any[]) => any>; onChange: PropTypes.Requireable<(...args: any[]) => any>; prevText: PropTypes.Requireable; nextText: PropTypes.Requireable; showSizeChanger: PropTypes.Requireable; popoverZIndex: PropTypes.Requireable; popoverPosition: PropTypes.Requireable; style: PropTypes.Requireable; className: PropTypes.Requireable; hideOnSinglePage: PropTypes.Requireable; hoverShowPageSelect: PropTypes.Requireable; showQuickJumper: PropTypes.Requireable; disabled: PropTypes.Requireable; preventPageChangeOnPageSizeChange: PropTypes.Requireable; }; static defaultProps: { total: number; popoverZIndex: number; showTotal: boolean; pageSize: null; pageSizeOpts: readonly [10, 20, 40, 100]; defaultCurrentPage: number; size: string; onPageChange: (...args: any[]) => void; onPageSizeChange: (...args: any[]) => void; onChange: (...args: any[]) => void; showSizeChanger: boolean; className: string; hideOnSinglePage: boolean; showQuickJumper: boolean; disabled: boolean; preventPageChangeOnPageSizeChange: boolean; }; constructor(props: PaginationProps); context: ContextValue; get adapter(): PaginationAdapter; componentDidMount(): void; componentWillUnmount(): void; componentDidUpdate(prevProps: PaginationProps): void; renderPrevBtn(): React.JSX.Element; renderNextBtn(): React.JSX.Element; renderPageSizeSwitch(locale: PaginationLocale): React.JSX.Element; renderQuickJump(locale: PaginationLocale): React.JSX.Element; renderPageList(): React.JSX.Element[]; renderRestPageList(restList: ('...' | number)[]): React.JSX.Element; renderSmallPageSelect(content: React.ReactNode): React.JSX.Element; renderSmallPage(locale: PaginationLocale): React.JSX.Element; renderDefaultPage(locale: PaginationLocale): React.JSX.Element; render(): React.JSX.Element; }