UNPKG

zent

Version:

一套前端设计语言和基于React的实现

119 lines (118 loc) 3.41 kB
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; }