--- import ActivityCard from "../../components/ActivityCard.astro"; import EntityMedia from "../../components/EntityMedia.astro"; import AtlasBreadcrumbs from "../../components/AtlasBreadcrumbs.astro"; 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 { api, plural, type Activity, type DictionaryItem, type MediaAsset, type PaginatedActivity } from "../../lib/api"; import { findMediaByLabel } from "../../lib/media"; const { slug } = Astro.params; let water: DictionaryItem | undefined, items: Activity[] = [], media: MediaAsset[] = [], unavailable = false; try { const [waters, waterMedia] = await Promise.all([api("/api/v1/waterbodies?limit=500"), api("/api/v1/media/catalog?entity_type=waterbody")]); media = waterMedia; water = waters.find(item => item.slug === slug); if (water) { const paginated = await api(`/api/v1/activity?hours=72&waterbody=${encodeURIComponent(water.slug)}&limit=100`); items = paginated.items; } } catch { unavailable = true; } if (unavailable) { Astro.response.status = 503; Astro.response.headers.set("Retry-After", "60"); Astro.response.headers.set("Cache-Control", "no-store"); } if (!water && !unavailable) Astro.response.status = 404; const fishes = [...new Map(items.map(item => [item.fish_slug, item.fish])).entries()]; const image = water ? findMediaByLabel(media, water.name_ru) : undefined; const schema = water ? { "@context":"https://schema.org", "@type":"CollectionPage", name:`Что ловить на ${water.name_ru} в RF4`, url:`https://rf4spotter.ru/waterbodies/${water.slug}` } : null; --- {image &&
Карта и образ водоёма

{water!.name_ru}

Материал показан с прямой атрибуцией. Координаты активных точек ниже относятся к данным наблюдений, а не к геометрии изображения.

} {unavailable ? : !water ? :
{items.length ? items.map(item => ) : }
}