diff --git a/apps/web/src/pages/waterbodies/index.astro b/apps/web/src/pages/waterbodies/index.astro index a832023..3d23cd2 100644 --- a/apps/web/src/pages/waterbodies/index.astro +++ b/apps/web/src/pages/waterbodies/index.astro @@ -6,14 +6,17 @@ import WaterbodyMark from "../../components/WaterbodyMark.astro"; import Pagination from "../../components/Pagination.astro"; import { api, type DictionaryItem } from "../../lib/api"; const params = Astro.url.searchParams; +const search = params.get("q")?.trim() ?? ""; const pageLimit = 48; const requestedOffset = Number(params.get("offset") ?? 0); let offset = Number.isInteger(requestedOffset) && requestedOffset >= 0 ? requestedOffset : 0; let waters: DictionaryItem[] = [], allWaters: DictionaryItem[] = [], unavailable = false; try { allWaters = await api("/api/v1/waterbodies?limit=500"); - if (allWaters.length > 0 && offset >= allWaters.length) offset = Math.floor((allWaters.length - 1) / pageLimit) * pageLimit; - waters = allWaters.slice(offset, offset + pageLimit); + const matchingWaters = search ? allWaters.filter(item => item.name_ru.toLocaleLowerCase("ru-RU").includes(search.toLocaleLowerCase("ru-RU"))) : allWaters; + if (matchingWaters.length > 0 && offset >= matchingWaters.length) offset = Math.floor((matchingWaters.length - 1) / pageLimit) * pageLimit; + waters = matchingWaters.slice(offset, offset + pageLimit); + allWaters = matchingWaters; } catch { unavailable = true; } if (unavailable) { Astro.response.status = 503; @@ -23,6 +26,7 @@ if (unavailable) { --- - {unavailable ? : } +
{search && Сбросить}
+ {unavailable ? : waters.length ? : } {!unavailable && }