diff --git a/apps/web/src/pages/fish/[slug].astro b/apps/web/src/pages/fish/[slug].astro index c23f623..c3eaa9a 100644 --- a/apps/web/src/pages/fish/[slug].astro +++ b/apps/web/src/pages/fish/[slug].astro @@ -7,18 +7,22 @@ import AtlasEntityLink from "../../components/AtlasEntityLink.astro"; import PageHero from "../../components/PageHero.astro"; import StatePanel from "../../components/StatePanel.astro"; import Layout from "../../layouts/Layout.astro"; +import Pagination from "../../components/Pagination.astro"; import { api, plural, type Activity, type DictionaryItem, type MediaAsset, type PaginatedActivity } from "../../lib/api"; import { findMediaByLabel } from "../../lib/media"; const { slug } = Astro.params; const requestedHours = Astro.url.searchParams.get("hours") ?? "72"; const hours = ["24", "72", "168"].includes(requestedHours) ? requestedHours : "72"; const periodLabel = { "24": "24 часа", "72": "72 часа", "168": "7 дней" }[hours]; -let fish: DictionaryItem | undefined, items: Activity[] = [], media: MediaAsset[] = [], unavailable = false; +const requestedOffset = Number(Astro.url.searchParams.get("offset") ?? 0); +const offset = Number.isInteger(requestedOffset) && requestedOffset >= 0 ? requestedOffset : 0; +const activityLimit = 24; +let fish: DictionaryItem | undefined, items: Activity[] = [], media: MediaAsset[] = [], totalItems = 0, unavailable = false; try { const [fishes, fishMedia] = await Promise.all([api("/api/v1/fishes?limit=500"), api("/api/v1/media/catalog?entity_type=fish")]); media = fishMedia; fish = fishes.find(item => item.slug === slug); - if (fish) { const paginated = await api(`/api/v1/activity?hours=${hours}&fish=${encodeURIComponent(fish.slug)}&limit=100`); items = paginated.items; } + if (fish) { const paginated = await api(`/api/v1/activity?hours=${hours}&fish=${encodeURIComponent(fish.slug)}&limit=${activityLimit}&offset=${offset}`); items = paginated.items; totalItems = paginated.total; } } catch { unavailable = true; } if (unavailable) { Astro.response.status = 503; @@ -32,8 +36,9 @@ const schema = fish ? { "@context":"https://schema.org", "@type":"CollectionPage --- - + {fish && } {image &&
Визуальный справочник

{fish!.name_ru}

Изображение опубликовано с прямой ссылкой на источник. Оно помогает отличить вид, а актуальные точки ниже остаются отдельными наблюдениями игроков.

} {unavailable ? : !fish ? :
{items.length ? items.map(item => ) : }
} + {fish && }