feat: add activity evidence summaries

This commit is contained in:
ik
2026-09-21 20:15:17 +07:00
parent 0fed0f1bad
commit 2f3f6acd78
5 changed files with 33 additions and 1 deletions
+2
View File
@@ -1,5 +1,6 @@
---
import ActivityCard from "../../components/ActivityCard.astro";
import ActivityEvidenceSummary from "../../components/ActivityEvidenceSummary.astro";
import ActivityPeriodFilter from "../../components/ActivityPeriodFilter.astro";
import EntityMedia from "../../components/EntityMedia.astro";
import AtlasBreadcrumbs from "../../components/AtlasBreadcrumbs.astro";
@@ -46,6 +47,7 @@ const schema = fish ? { "@context":"https://schema.org", "@type":"CollectionPage
<PageHero eyebrow={`Свежие данные за ${periodLabel}`} title={fish?.name_ru ?? "Рыба не найдена"} description={fish ? `${totalItems} ${plural(totalItems,["активная точка","активные точки","активных точек"])} на ${waters.length} ${plural(waters.length,["водоёме","водоёмах","водоёмах"])}.` : undefined} variant={fish ? "fish" : undefined} identity={fish?.name_ru} />
{fish && <ActivityPeriodFilter hours={hours} />}
{image && <section class="entity-feature content-grid" aria-label={`Изображение: ${fish!.name_ru}`}><EntityMedia asset={image} sourceLink /><div><span class="overline">Визуальный справочник</span><h2>{fish!.name_ru}</h2><p>Изображение опубликовано с прямой ссылкой на источник. Оно помогает отличить вид, а актуальные точки ниже остаются отдельными наблюдениями игроков.</p></div></section>}
{fish && <ActivityEvidenceSummary items={items} totalPoints={totalItems} periodLabel={periodLabel} />}
{unavailable ? <StatePanel tone="unavailable" title="Данные временно недоступны" description="Каталог сохранён, но свежие наблюдения сейчас не получены." /> : !fish ? <StatePanel tone="error" title="Такой рыбы нет в справочнике" actionHref="/fish" actionLabel="Открыть каталог" /> : <section class="catalog-results content-grid"><aside><span class="overline">Водоёмы</span>{waters.length ? <nav>{waters.map(([waterSlug,name]) => <AtlasEntityLink href={`/waterbodies/${waterSlug}/${fish!.slug}?hours=${hours}`} label={name} kind="water" identity={waterSlug} />)}</nav> : <p>Свежих подтверждённых водоёмов пока нет.</p>}</aside><div>{items.length ? items.map(item => <ActivityCard item={item} periodLabel={periodLabel}/>) : <StatePanel contained={false} title="Свежих точек пока нет" description="Проверьте позже или посмотрите полевые сигналы на главной." />}</div></section>}
{fish && <Pagination path={`/fish/${fish.slug}`} params={new URLSearchParams({ hours })} total={totalItems} limit={activityLimit} offset={offset} itemLabel="точек" />}
</Layout>