import * as React from 'react';
import { Divider, Select, Pagination } from 'antd';
type PaginationType = {
totalElements: number;
totalPages?: number;
pageSize?: number;
};
type PaginationSelectType = {
pagination: PaginationType;
request: (page: number, size: number) => void;
width?: number | string;
value?: string;
onChange?: (value: any) => void;
fieldProps: { options: any[]; [key: string]: any };
};
const Index = ({
value,
onChange,
pagination,
request,
width = '100%',
fieldProps = { options: [] },
}: PaginationSelectType) => {
const [selectVal, setSelectVal] = React.useState<string | string[]>();
const [current, setCurrent] = React.useState<number>(1);
const [totalPages] = React.useState<number>(Math.ceil(pagination.totalElements / 8));
const [options, setOptions] = React.useState(
fieldProps?.options.slice(0, pagination?.pageSize || 8),
);
return (
<Select
value={value || selectVal}
style={{ width: width }}
onChange={(newVal) => {
setSelectVal(newVal);
onChange?.(newVal);
}}
dropdownRender={(menu) => (
<>
{menu}
{totalPages > 1 && <Divider style={{ margin: '8px 0' }} />}
<div style={{ padding: '0 8px 4px 4px', display: 'flex', justifyContent: 'flex-end' }}>
{(width >= 240 || width === '100%') && totalPages > 1 && (
<span>总共 {pagination?.totalElements} 条</span>
)}
<Pagination
simple
size="small"
current={current}
pageSize={pagination?.pageSize || 8}
hideOnSinglePage={true}
showSizeChanger={false}
total={pagination?.totalElements || 0}
onChange={(page, size) => {
setCurrent(page);
if (fieldProps.options.length > (pagination?.pageSize || 8)) {
setOptions(
fieldProps?.options.slice(
page * (pagination?.pageSize || 8) - (pagination?.pageSize || 8),
page * (pagination?.pageSize || 8),
),
);
} else {
request(page - 1, size);
}
}}
/>
</div>
</>
)}
{...{ ...fieldProps, options: options }}
></Select>
);
};
export default Index;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2021-09-09 hbuilder检测不到夜神模拟器
2020-09-09 JavaScript——for循环
2020-09-09 迭代器
2020-09-09 DOM外联样式相关操作