UNPKG

@wener/console

Version:
112 lines (111 loc) 4.79 kB
import React from "react"; import { HiChevronLeft, HiChevronRight } from "react-icons/hi2"; import classNames from "clsx"; import { Button } from "../Button/Button.js"; export var Pagination = function (param) { var _param_pageIndex = param.pageIndex, pageIndex = _param_pageIndex === void 0 ? 0 : _param_pageIndex, onPageIndexChange = param.onPageIndexChange, pageCount = param.pageCount, href = param.href, _param_pageOptions = param.pageOptions, pageOptions = _param_pageOptions === void 0 ? buildPageOptions(pageIndex, pageCount) : _param_pageOptions; var pageNumber = pageIndex + 1; var canNextPage = pageNumber < pageCount; var canPreviousPage = pageNumber > 1; // const previousPage = () => onPageIndexChange?.(pageIndex - 1); // const nextPage = () => onPageIndexChange?.(pageIndex + 1); // let firstPage = () => onPageIndexChange(0); // let lastPage = () => onPageIndexChange(pageCount - 1); return /*#__PURE__*/ React.createElement("div", { className: "flex items-center gap-1" }, canPreviousPage && /*#__PURE__*/ React.createElement(Button, { href: href === null || href === void 0 ? void 0 : href(pageIndex - 1), onClick: function () { return onPageIndexChange === null || onPageIndexChange === void 0 ? void 0 : onPageIndexChange(pageIndex - 1); }, className: "btn btn-xs p-1" }, /*#__PURE__*/ React.createElement(HiChevronLeft, { className: "h-4 w-4" })), !canPreviousPage && /*#__PURE__*/ React.createElement("button", { disabled: true, className: "btn btn-xs p-1" }, /*#__PURE__*/ React.createElement(HiChevronLeft, { className: "h-4 w-4" })), /*#__PURE__*/ React.createElement("div", { className: "flex items-center gap-1" }, !pageOptions && /*#__PURE__*/ React.createElement("button", { className: "btn btn-xs" }, pageNumber, "/", pageCount), pageOptions === null || pageOptions === void 0 ? void 0 : pageOptions.map(function (v, i) { var n = v; switch (v) { case -1: n = pageIndex - 5; break; case -2: n = pageIndex + 5; break; } return /*#__PURE__*/ React.createElement(Button, { key: v > 0 ? v : -i, className: classNames("btn btn-ghost btn-xs bg-transparent font-mono", v === pageIndex && "btn-active"), href: href === null || href === void 0 ? void 0 : href(n), onClick: function () { return onPageIndexChange === null || onPageIndexChange === void 0 ? void 0 : onPageIndexChange(n); }, // disabled={v === pageIndex || v < 0} title: "\u7B2C".concat(n + 1, "\u9875") }, /*#__PURE__*/ React.createElement("span", { className: "min-w-[2ch]" }, v >= 0 ? v + 1 : "...")); })), canNextPage && /*#__PURE__*/ React.createElement(Button, { href: href === null || href === void 0 ? void 0 : href(pageIndex + 1), onClick: function () { return onPageIndexChange === null || onPageIndexChange === void 0 ? void 0 : onPageIndexChange(pageIndex + 1); }, className: "btn btn-xs p-1" }, /*#__PURE__*/ React.createElement(HiChevronRight, { className: "h-4 w-4" })), !canNextPage && /*#__PURE__*/ React.createElement("button", { type: "button", disabled: true, className: "btn btn-xs p-1" }, /*#__PURE__*/ React.createElement(HiChevronRight, { className: "h-4 w-4" }))); }; var clamp = function (value, min, max) { return Math.min(Math.max(value, min), max); }; export function buildPageOptions(pageIndex, pageCount) { var ops = []; // 默认显示 5 个 - 包含最前最后就是7个 if (pageCount <= 7) { ops = new Array(pageCount).fill(null).map(function (_, i) { return i; }); } else { var min = clamp(pageIndex - 2, 0, pageCount - 1); var max = clamp(pageIndex + 2, 0, pageCount - 1); // 处理不够补齐情况 var maxPad = Math.abs(pageIndex - 2 - min); var minPad = Math.abs(pageIndex + 2 - max); max += maxPad; min -= minPad; if (min !== 0) { ops.push(0); if (min !== 1) { ops.push(-1); } } for (var i = min; i < pageIndex; i++) { ops.push(i); } ops.push(pageIndex); for (var i1 = pageIndex + 1; i1 <= max; i1++) { ops.push(i1); } if (max < pageCount - 1) { if (max !== pageCount - 2) { ops.push(-2); } ops.push(pageCount - 1); } } return ops; }