zent
Version:
一套前端设计语言和基于React的实现
119 lines (118 loc) • 3.41 kB
JavaScript
import { __assign } from "tslib";
import { getPageRange } from './getPageRange';
var MAX_PAGES_TO_EXPAND = 5;
export default function normalLayout(options) {
var pageSize = options.pageSize, total = options.total, current = options.current;
var totalPages = Math.ceil(total / pageSize);
if (totalPages <= MAX_PAGES_TO_EXPAND) {
var buttonCount = 2 + totalPages;
var layout_1 = new Array(buttonCount);
layout_1[0] = {
type: 'left-arrow',
disabled: current <= 1 || total <= 0,
};
layout_1[buttonCount - 1] = {
type: 'right-arrow',
disabled: current >= totalPages || total <= 0,
};
for (var i = 1; i <= totalPages; i++) {
layout_1[i] = {
type: 'number',
page: i,
selected: current === i,
};
}
return layout_1;
}
var layout = [
{
type: 'left-arrow',
disabled: current <= 1 || total <= 0,
},
{
type: 'number',
page: 1,
selected: current === 1 || total <= 0,
},
];
if (current > 4) {
layout.push({
type: 'double-left-arrow',
});
}
var _a = getPageRange(__assign(__assign({}, options), { startDelta: 1, endDelta: -1 })), min = _a.min, max = _a.max;
for (var i = min; i <= max; i++) {
layout.push({
type: 'number',
page: i,
selected: current === i,
});
}
if (current < totalPages - 3) {
layout.push({
type: 'double-right-arrow',
});
}
layout.push({
type: 'number',
page: totalPages,
selected: current === totalPages,
}, {
type: 'right-arrow',
disabled: current >= totalPages || total <= 0,
});
fixLeftEdgeCase(layout, current);
fixRightEdgeCase(layout, current);
return layout;
}
function fixLeftEdgeCase(layout, current) {
if (layout.length < 4) {
return layout;
}
var left = layout[1];
var leftDoubleArrow = layout[2];
var right = layout[3];
if (leftDoubleArrow.type === 'double-left-arrow' &&
left.type === 'number' &&
right.type === 'number') {
var delta = right.page - left.page;
if (delta === 2) {
var page = left.page + 1;
layout[2] = {
type: 'number',
page: page,
selected: current === page,
};
}
else if (delta === 1) {
layout.splice(2, 1);
}
}
return layout;
}
function fixRightEdgeCase(layout, current) {
if (layout.length < 5) {
return layout;
}
var len = layout.length;
var right = layout[len - 2];
var rightDoubleArrow = layout[len - 3];
var left = layout[len - 4];
if (rightDoubleArrow.type === 'double-right-arrow' &&
left.type === 'number' &&
right.type === 'number') {
var delta = right.page - left.page;
if (delta === 2) {
var page = left.page + 1;
layout[len - 3] = {
type: 'number',
page: page,
selected: page === current,
};
}
else if (delta === 1) {
layout.splice(len - 3, 1);
}
}
return layout;
}