JSFiddle - React, Tailwind, and code Playground

by T1MOXA

JavaScript

function getPagination(key, title_id, player_series, current_serie) {
	const start_serie = current_serie - (current_serie - player_series.first) % 20;
  const current_page = ~~((current_serie - player_series.first) / 20) + 1;
  const last_page = Math.ceil(player_series.last / 20);
  
	let paginator = [];
	let serie = start_serie;
  let brk = false;
  let last_row;

	for (let row = 0; row < 4; row++) {
		let row_array = [];

		for (let item = 0; item < 5; item++) {
    	if (item == 0 && row === 3 && current_page > 1) {
        item = 3;
      }
    
			const serie_string = (serie === current_serie) ? `[${serie}]`: `${serie}`;
      row_array.push({ text: serie_string, callback_data: `${key}_${title_id}_${serie}` });
      
      if (++serie >= player_series.last) {
      	brk = !brk;
      	break;
      }
		}
    
    paginator.push(row_array);
    last_row = row;
    
    if (brk) {
    	break;
    }
	}
  
  if (paginator[last_row].length > 2) {
    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: `${key}_${title_id}_${start_serie - 1}` });
  if (current_page < last_page) row_array.push({ text: `Страница ${current_page + 1} ▶️`, callback_data: `${key}_${title_id}_${serie}` });
	
	return paginator;
}

console.log(getPagination('find', 1, {first: 1, last: 24}, 10));