--- import Layout from "../../layouts/Layout.astro"; import FishSilhouette from "../../components/FishSilhouette.astro"; import EntityMedia from "../../components/EntityMedia.astro"; import PageHero from "../../components/PageHero.astro"; import StatePanel from "../../components/StatePanel.astro"; import Pagination from "../../components/Pagination.astro"; import { api, type DictionaryItem, type MediaAsset } from "../../lib/api"; import { findMediaByLabel } from "../../lib/media"; const params = Astro.url.searchParams; const pageLimit = 48; const requestedOffset = Number(params.get("offset") ?? 0); let offset = Number.isInteger(requestedOffset) && requestedOffset >= 0 ? requestedOffset : 0; let fishes: DictionaryItem[] = [], allFishes: DictionaryItem[] = [], media: MediaAsset[] = [], unavailable = false; try { [allFishes, media] = await Promise.all([api("/api/v1/fishes?limit=500"), api("/api/v1/media/catalog?entity_type=fish")]); if (allFishes.length > 0 && offset >= allFishes.length) offset = Math.floor((allFishes.length - 1) / pageLimit) * pageLimit; fishes = allFishes.slice(offset, offset + pageLimit); } catch { unavailable = true; } if (unavailable) { Astro.response.status = 503; Astro.response.headers.set("Retry-After", "60"); Astro.response.headers.set("Cache-Control", "no-store"); } --- {unavailable ? : } {!unavailable && }