@wener/console
Version:
Base console UI toolkit
112 lines (111 loc) • 4.79 kB
JavaScript
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;
}