@@ -293,6 +293,8 @@ function displayOffers(page) {
293293 container . innerHTML = '' ;
294294 container . appendChild ( table ) ;
295295 renderPageOptions ( ) ;
296+ renderShowingText ( ) ;
297+ updatePrevNextDisabledState ( ) ;
296298
297299}
298300
@@ -333,14 +335,18 @@ function sortOffers(column) {
333335
334336function computeTotalPages ( ) {
335337 const pageSizeSelect = document . getElementById ( 'pageSizeSelect' ) ;
336- const selected = pageSizeSelect ? pageSizeSelect . value : String ( pageSize ) ;
338+ let selected = pageSizeSelect ? pageSizeSelect . value : String ( pageSize ) ;
339+ if ( ! selected ) {
340+ selected = String ( pageSize || 10 ) ;
341+ }
337342 if ( selected === 'all' ) {
338343 pageSize = 'all' ;
339344 offersPerPage = filteredOffers . length || 1 ;
340345 totalPages = 1 ;
341346 currentPage = 1 ;
342347 } else {
343- pageSize = parseInt ( selected ) ;
348+ const parsed = parseInt ( selected , 10 ) ;
349+ pageSize = Number . isNaN ( parsed ) || parsed <= 0 ? 10 : parsed ;
344350 offersPerPage = pageSize ;
345351 totalPages = Math . ceil ( filteredOffers . length / offersPerPage ) || 1 ;
346352 if ( currentPage > totalPages ) currentPage = totalPages ;
@@ -349,18 +355,46 @@ function computeTotalPages() {
349355}
350356
351357function renderPageOptions ( ) {
352- const pageSelect = document . getElementById ( 'pageSelect' ) ;
353- pageSelect . innerHTML = '' ;
354-
355- for ( let i = 1 ; i <= totalPages ; i ++ ) {
356- const option = document . createElement ( 'option' ) ;
357- option . value = i ;
358- option . textContent = i ;
359- if ( i === currentPage ) {
360- option . selected = true ;
361- }
362- pageSelect . appendChild ( option ) ;
358+ // Ensure rows-per-page options exist and reflect current selection
359+ const pageSizeSelect = document . getElementById ( 'pageSizeSelect' ) ;
360+ if ( ! pageSizeSelect ) return ;
361+ if ( pageSizeSelect . options . length === 0 ) {
362+ [ 10 , 20 , 50 , 100 ] . forEach ( size => {
363+ const opt = document . createElement ( 'option' ) ;
364+ opt . value = String ( size ) ;
365+ opt . textContent = String ( size ) ;
366+ pageSizeSelect . appendChild ( opt ) ;
367+ } ) ;
368+ const allOpt = document . createElement ( 'option' ) ;
369+ allOpt . value = 'all' ;
370+ allOpt . textContent = 'All' ;
371+ pageSizeSelect . appendChild ( allOpt ) ;
372+ }
373+ // Set selected
374+ Array . from ( pageSizeSelect . options ) . forEach ( opt => {
375+ opt . selected = ( opt . value === String ( pageSize ) ) ;
376+ } ) ;
377+ }
378+
379+ function renderShowingText ( ) {
380+ const showingTextEl = document . getElementById ( 'showingText' ) ;
381+ if ( ! showingTextEl ) return ;
382+ const total = filteredOffers . length ;
383+ if ( total === 0 ) {
384+ showingTextEl . textContent = 'Showing 0–0 of 0' ;
385+ return ;
363386 }
387+ const start = ( currentPage - 1 ) * offersPerPage + 1 ;
388+ const end = Math . min ( currentPage * offersPerPage , total ) ;
389+ showingTextEl . textContent = `Showing ${ start } –${ end } of ${ total } ` ;
390+ }
391+
392+ function updatePrevNextDisabledState ( ) {
393+ const prevBtn = document . getElementById ( 'prevPage' ) ;
394+ const nextBtn = document . getElementById ( 'nextPage' ) ;
395+ if ( ! prevBtn || ! nextBtn ) return ;
396+ prevBtn . disabled = currentPage <= 1 ;
397+ nextBtn . disabled = currentPage >= totalPages || ( currentPage * offersPerPage ) >= filteredOffers . length ;
364398}
365399
366400function mostOfferCompanies ( jsonData ) {
@@ -395,6 +429,7 @@ document.addEventListener('DOMContentLoaded', async function () {
395429 const data = await response . json ( ) ;
396430 offers = data ;
397431 filteredOffers = [ ...offers ] ;
432+ renderPageOptions ( ) ;
398433 computeTotalPages ( ) ;
399434 displayOffers ( currentPage ) ;
400435 }
@@ -423,11 +458,7 @@ document.addEventListener('DOMContentLoaded', async function () {
423458 }
424459 } ) ;
425460
426- // Page selection dropdown event listener
427- document . getElementById ( 'pageSelect' ) . addEventListener ( 'change' , ( event ) => {
428- currentPage = parseInt ( event . target . value ) ;
429- displayOffers ( currentPage ) ;
430- } ) ;
461+ // no page number dropdown in the UI
431462
432463 // Page size dropdown event listener
433464 document . getElementById ( 'pageSizeSelect' ) . addEventListener ( 'change' , ( ) => {
0 commit comments