--- import AtlasBreadcrumbs from "../../../components/AtlasBreadcrumbs.astro"; import DataPassport from "../../../components/DataPassport.astro"; import Layout from "../../../layouts/Layout.astro"; import PageHero from "../../../components/PageHero.astro"; import StatePanel from "../../../components/StatePanel.astro"; import TackleGlyph from "../../../components/TackleGlyph.astro"; import { ApiError, api, type TackleItem } from "../../../lib/api"; import { safeHttpUrl } from "../../../lib/urls"; const { id } = Astro.params; let item: TackleItem | undefined; let unavailable = false; try { item = await api(`/api/v1/tackle/items/${encodeURIComponent(id ?? "")}`); } catch (error) { unavailable = !(error instanceof ApiError) || error.status >= 500; } if (!item && !unavailable) Astro.response.status = 404; 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 missingLabels: Record = { subcategory: "подкатегория", brand: "бренд", family: "семейство", unlock_level: "уровень открытия", source_url: "ссылка на источник", source_checked_at: "дата проверки" }; const missing = item?.missing_fields.map((field) => missingLabels[field] ?? field) ?? []; const sourceHref = safeHttpUrl(item?.source_url); --- {unavailable ? : !item ? : <>
{categoryLabels[item.category] ?? item.category}

{item.name}

{[item.brand, item.family].filter(Boolean).join(" · ") || "Бренд и семейство не указаны."}

Подкатегория
{item.subcategory ?? "Не указана"}
Уровень открытия
{item.unlock_level ?? "Не указан"}
Источник
{item.source_system ?? "Не указан"}
{missing.length > 0 &&

Не хватает: {missing.join(", ")}.

}{sourceHref && Открыть первоисточник}
}