--- import Layout from "../../layouts/Layout.astro"; import PageHero from "../../components/PageHero.astro"; import StatePanel from "../../components/StatePanel.astro"; import Pagination from "../../components/Pagination.astro"; import TackleGlyph from "../../components/TackleGlyph.astro"; import { api, type PaginatedTackleItems } from "../../lib/api"; const params = Astro.url.searchParams; const category = params.get("category") ?? ""; const brand = params.get("brand") ?? ""; const family = params.get("family") ?? ""; const requestedOffset = Number(params.get("offset") ?? 0); const limit = 48; const offset = Number.isInteger(requestedOffset) && requestedOffset >= 0 ? requestedOffset : 0; const query = new URLSearchParams({ limit: String(limit), offset: String(offset) }); if (category) query.set("category", category); if (brand) query.set("brand", brand); if (family) query.set("family", family); let result: PaginatedTackleItems = { items: [], total: 0, limit, offset }, unavailable = false; try { result = await api(`/api/v1/tackle/items?${query}`); } catch { unavailable = true; } if (unavailable) { Astro.response.status = 503; Astro.response.headers.set("Retry-After", "60"); Astro.response.headers.set("Cache-Control", "no-store"); } const categoryLabels: Record = { bait: "Наживка", lure: "Приманка", rod: "Удилище", reel: "Катушка", line: "Леска", hook: "Крючок", rig: "Монтаж", float: "Поплавок", sinker: "Груз", other: "Другое" }; const filterParams = new URLSearchParams(); if (category) filterParams.set("category", category); if (brand) filterParams.set("brand", brand); if (family) filterParams.set("family", family); ---
{(category || brand || family) && Сбросить}
{unavailable ? : result.items.length ?
{result.items.map(item => {categoryLabels[item.category] ?? item.category}{item.name}{[item.brand, item.family].filter(Boolean).join(" · ") || "Характеристики уточняются"})}
: } {!unavailable && }