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));