1. /**
  2. * Paginate task queue results for dry-run scenarios.
  3. *
  4. * @param {Array} tasks - Array of task objects. Each task should have a unique ID.
  5. * @param {number} pageSize - The number of tasks to display per page.
  6. * @param {number} pageNumber - The page number to display (1-indexed).
  7. * @returns {{totalTasks: number, currentPage: number, currentPageTasks: Array, nextPage: boolean, prevPage: boolean}} - An object containing pagination information and the current page's tasks.
  8. */
  9. function paginateTasks(tasks, pageSize, pageNumber) {
  10. if (!Array.isArray(tasks)) {
  11. console.error("Tasks must be an array.");
  12. return { totalTasks: 0, currentPage: 1, currentPageTasks: [], nextPage: false, prevPage: false };
  13. }
  14. if (typeof pageSize !== 'number' || pageSize <= 0) {
  15. console.error("Page size must be a positive number.");
  16. return { totalTasks: tasks.length, currentPage: 1, currentPageTasks: tasks, nextPage: false, prevPage: false };
  17. }
  18. if (typeof pageNumber !== 'number' || pageNumber <= 0) {
  19. console.error("Page number must be a positive number.");
  20. return { totalTasks: tasks.length, currentPage: 1, currentPageTasks: tasks, nextPage: false, prevPage: false };
  21. }
  22. const totalTasks = tasks.length;
  23. const currentPage = pageNumber;
  24. const startIndex = (currentPage - 1) * pageSize;
  25. const endIndex = startIndex + pageSize;
  26. const currentPageTasks = tasks.slice(startIndex, endIndex);
  27. const nextPage = currentPage < totalTasks / pageSize;
  28. const prevPage = currentPage > 1;
  29. return {
  30. totalTasks: totalTasks,
  31. currentPage: currentPage,
  32. currentPageTasks: currentPageTasks,
  33. nextPage: nextPage,
  34. prevPage: prevPage,
  35. };
  36. }

Add your comment