js/views/collection.js — lentelė ir puslapiavimas
Kodo stulpelyje — js/views/collection.js. renderCollection() iš getFilteredFavorites() gauna jau surikiuotą ir nufiltruotą sąrašą, apskaičiuoja puslapius ir atpjauna dabartinį su slice.
Puslapiavimo matematika — trys eilutės:
const totalPages = Math.max(1, Math.ceil(rows.length / pageSize));
const page = Math.min(currentPage, totalPages); // apsauga: puslapis gali „pasenti"
const pageRows = rows.slice(start, start + pageSize);
Math.min(currentPage, totalPages) svarbus: jei buvai 5-ame puslapyje, o paieška paliko tik 2 puslapius, currentPage liktų 5 ir lentelė būtų tuščia. „Prispaudžiam" jį prie realaus maksimumo.
Rikiavimo antraštės ir initCollection — vėl delegavimo modelis (3 pamoka): po vieną klausytoją kiekvienai antraštei, kuris kviečia setSort(stulpelis). Rodyklės (▲/▼) atsinaujina pagal dabartinį sortKey/sortDir.
Atkreipk dėmesį, ko čia NĖRA: nė vieno renderCollection() kvietimo po setSort/setPage. Nereikia — jie kviečia notify(), o main.js prenumerata (9 pamoka) perpiešia. Lentelė tik aprašo, kaip atrodo dabartinė būsena.
Patarimas.
renderPaginationpiešia po mygtuką kiekvienam puslapiui — gerai kelioms dešimtims. Tūkstančiams eilučių rodytum tik „1 … 5 6 7 … 40". Bet principas tas pats: puslapių valdikliai — irgi išvestinis būsenos vaizdas (currentPage,totalPages), o ne atskirai saugoma būsena.