js/state.js — rikiavimas ir filtravimas
Kodo stulpelyje — js/state.js papildymai: getFilteredFavorites() (paieška + rikiavimas) ir setSort / setPage veiksmai.
getFilteredFavorites daro du dalykus: filtruoja per pavadinimą/pastabas/žymas, tada rikiuoja. Ir čia — klastingas spąstas:
return [...rows].sort((a, b) => { ... }); // ← [...rows] = KOPIJA
Array.prototype.sort() rikiuoja vietoje (in place) — jis keičia patį masyvą ir grąžina jį patį. Jei rašytum state.favorites.sort(...), perrikiuotum saugomus duomenis — ir tada persistFavorites() įrašytų perrikiuotą tvarką į localStorage. Vartotojo „mano kolekcija" tyliai persitvarkytų kaskart rikiuojant lentelę.
[...rows] pirma padaro kopiją, ir rikiuojam ją. Saugomas state.favorites lieka nepaliestas.
// ❌ state.favorites.sort(...) — sugadina saugomus duomenis
// ✅ [...state.favorites].sort(...) — rikiuoja kopiją
setSort — mažas, bet gudrus: tas pats stulpelis apverčia kryptį, naujas — nustato numatytą (pavadinimui asc, kitiems desc) ir grąžina į 1 puslapį.
Patikrink.
1. Spaudi „Title" antraštę → rikiuoja A→Z; spaudi dar kartą → Z→A (rodyklė apsiverčia).
2. Puslapių mygtukai keičia rodomą pjūvį.
3. Paieška siaurina eilutes ir grąžina į 1 puslapį.
Spąstai (Array.sort mutuoja). Surikiuok lentelę pagal pavadinimą, tada perkrauk puslapį. Jei rikiavai
state.favoritestiesiogiai, kolekcija liks perrikiuota (nes įrašei į localStorage) — nors vartotojas nieko „netvarkė". Su[...rows]po perkrovimo grįžta pradinė (išsaugojimo) tvarka. Metodaisort,reverse,splicekeičia masyvą; virš saugomų duomenų visada dirbk su kopija.