--- import Layout from "../../layouts/Layout.astro"; import PageHero from "../../components/PageHero.astro"; import StatePanel from "../../components/StatePanel.astro"; 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"); 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; Astro.response.headers.set("Retry-After", "60"); Astro.response.headers.set("Cache-Control", "no-store"); } ---
{search && Сбросить}
{unavailable ? : waters.length ? : } {!unavailable && }