JSFiddle - React, Tailwind, and code Playground
by T1MOXA
JavaScript
function getUPagination(prefix, start_page, end_page, current_page, settings = {}) {
const items_per_row = settings.items_per_row || 5;
const rows_per_page = settings.rows_per_page || 2;
const last_row_items_w_buttons = settings.last_row_items_w_buttons || 2;
let paginator = [];
let page = start_page;
let brk = false;
let last_row;
for (let row = 0; row < rows_per_page; row++) {
let row_array = [];
for (let item = 0; item < items_per_row; item++) {
let row_obj = {};
row_obj.text = (page === current_page) ? `[${page}]` : `${page}`;
row_obj.callback_data = `${prefix}_${page}`;
row_array.push(row_obj);
if (++page > end_page) {
brk = !brk;
break;
}
}
paginator.push(row_array);
last_row = row;
if (brk) break;
}
if (paginator[last_row].length > last_row_items_w_buttons) {
paginator.push([]);
var row_array = paginator[last_row + 1];
} else {
var row_array = paginator[last_row];
}
if (current_page > 1) row_array.unshift({ text: `◀️ Страница ${current_page - 1}`, callback_data: `${prefix}_${current_page - 1}` });
if (current_page < end_page) row_array.push({ text: `Страница ${current_page + 1} ▶️`, callback_data: `${prefix}_${page}` });
return paginator;
}
console.log(getUPagination('px', 1, 7, 3));