Skip to content

Commit 985300c

Browse files
committed
feat: add rows per page
1 parent 53d3ffc commit 985300c

File tree

2 files changed

+35
-4
lines changed

2 files changed

+35
-4
lines changed

index.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,14 @@
109109

110110
</div>
111111
<div class="col-12 col-md-6 d-flex align-items-center justify-content-md-end justify-content-start mt-2 mt-md-0">
112+
<label for="pageSizeSelect" class="me-2 mb-0 text-secondary" style="font-size: 12px;">Rows:</label>
113+
<select id="pageSizeSelect" class="form-select form-select-sm" style="max-width: 92px;">
114+
<option value="10" selected>10</option>
115+
<option value="20">20</option>
116+
<option value="50">50</option>
117+
<option value="100">100</option>
118+
<option value="all">All</option>
119+
</select>
112120
<select id="pageSelect" class="form-select form-select-sm" style="max-width: 72px;"></select>
113121
<button id="prevPage" class="ms-2 px-2 btn btn-secondary btn-sm">Previous</button>
114122
<button id="nextPage" class="ms-2 px-2 btn btn-primary btn-sm">Next</button>

script.js

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
// Constants and Variables
22
const minDataPointsForBoxPlot = 2;
33
const validYoeBucket = new Set(["Entry (0-1)", "Mid (2-6)", "Senior (7-10)", "Senior + (11+)"]);
4-
const offersPerPage = 10;
4+
let offersPerPage = 10;
5+
let pageSize = 10;
56
let currentPage = 1;
67
let offers = [];
78
let filteredOffers = [];
@@ -330,6 +331,23 @@ function sortOffers(column) {
330331
displayOffers(currentPage);
331332
}
332333

334+
function computeTotalPages() {
335+
const pageSizeSelect = document.getElementById('pageSizeSelect');
336+
const selected = pageSizeSelect ? pageSizeSelect.value : String(pageSize);
337+
if (selected === 'all') {
338+
pageSize = 'all';
339+
offersPerPage = filteredOffers.length || 1;
340+
totalPages = 1;
341+
currentPage = 1;
342+
} else {
343+
pageSize = parseInt(selected);
344+
offersPerPage = pageSize;
345+
totalPages = Math.ceil(filteredOffers.length / offersPerPage) || 1;
346+
if (currentPage > totalPages) currentPage = totalPages;
347+
if (currentPage < 1) currentPage = 1;
348+
}
349+
}
350+
333351
function renderPageOptions() {
334352
const pageSelect = document.getElementById('pageSelect');
335353
pageSelect.innerHTML = '';
@@ -377,7 +395,7 @@ document.addEventListener('DOMContentLoaded', async function () {
377395
const data = await response.json();
378396
offers = data;
379397
filteredOffers = [...offers];
380-
totalPages = Math.ceil(filteredOffers.length / offersPerPage);
398+
computeTotalPages();
381399
displayOffers(currentPage);
382400
}
383401

@@ -410,6 +428,12 @@ document.addEventListener('DOMContentLoaded', async function () {
410428
currentPage = parseInt(event.target.value);
411429
displayOffers(currentPage);
412430
});
431+
432+
// Page size dropdown event listener
433+
document.getElementById('pageSizeSelect').addEventListener('change', () => {
434+
computeTotalPages();
435+
displayOffers(currentPage);
436+
});
413437
function filterOffers() {
414438
currentSort = { column: null, order: 'asc' };
415439

@@ -439,8 +463,7 @@ document.addEventListener('DOMContentLoaded', async function () {
439463
}
440464

441465
filteredOffers = tempFilteredOffers;
442-
totalPages = Math.ceil(filteredOffers.length / offersPerPage);
443-
currentPage = 1;
466+
computeTotalPages();
444467

445468
// Update UI elements
446469
setStatsStr(filteredOffers);

0 commit comments

Comments
 (0)