@onesy/utils
Version:
77 lines (57 loc) • 2.08 kB
JavaScript
const pagination = function () {
let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
let total = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;
let boundary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
let middle = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
const array = [];
const min = boundary * 2 + (1 + middle * 2) + 2;
if (!total || total <= min) return Array.from({
length: total || 1
}).map((i, id) => id + 1); // start
let value_ = 1;
let dots = 'start';
let dotsIndex = 0;
while (value_ < boundary + 1 && value_ < value - middle) array.push(value_++); // start dots
if (value - middle - boundary > 1) {
if (value - middle - boundary === 2) array.push(boundary + 1);else {
array.push('...');
dotsIndex = array.length - 1;
}
} // middle
value_ = value - middle < 1 ? 1 : value - middle;
while (value_ < value + middle + 1 && value_ < total) array.push(value_++); // end dots
if (total - boundary + 1 - (value + middle) > 1) {
if (total - boundary + 1 - (value + middle) === 2) array.push(value + middle + 1);else {
array.push('...');
dots = 'end';
dotsIndex = array.length - 1;
}
;
} // end
value_ = value + middle + 1 > total ? total : value + middle + 1;
while (value_ < total + 1) {
if (value_ >= total - boundary + 1 && value_ < total + 1) array.push(value_);
value_++;
} // Update values up to min value
if (array.length < min) {
let toAdd = min - array.length;
if (dots === 'start') {
let i = dotsIndex + 1;
let valueStart = array[dotsIndex + 1] - toAdd - 1;
while (toAdd > 0) {
array.splice(i++, 0, ++valueStart);
toAdd--;
}
}
if (dots === 'end') {
let i = dotsIndex;
let valueStart = array[dotsIndex - 1];
while (toAdd > 0) {
array.splice(i++, 0, ++valueStart);
toAdd--;
}
}
}
return array;
};
export default pagination;