24 lines
1.9 KiB
Plaintext
24 lines
1.9 KiB
Plaintext
---
|
|
import type { Activity } from "../lib/api";
|
|
import { activityLevel, ago, kg, plural, spotPath } from "../lib/api";
|
|
import FishingIcon from "./FishingIcon.astro";
|
|
import DataPassport from "./DataPassport.astro";
|
|
import FishSilhouette from "./FishSilhouette.astro";
|
|
const { item } = Astro.props as { item: Activity };
|
|
const level = activityLevel(item.activity_score);
|
|
const limited = item.catches < 3;
|
|
---
|
|
<a class="spot-card" data-testid={`spot-${item.x}-${item.y}`} href={spotPath(item)}>
|
|
<span class="spot-rank">{String(item.activity_score).padStart(2,"0")}</span>
|
|
<div class="spot-main">
|
|
<div class="spot-topline"><span>{item.waterbody}</span><span class="activity-pill" data-activity-level={level.short}><i></i>{level.short}</span>{limited && <span class="data-quality">Данных мало</span>}</div>
|
|
<h3>{item.fish}</h3>
|
|
<FishSilhouette name={item.fish}/>
|
|
<div class="spot-meta"><span><FishingIcon name="pin" size={14}/> {item.x}:{item.y}</span><span><FishingIcon name="clock" size={14}/> {ago(item.last_confirmed_at)}</span></div>
|
|
<p class="data-note">{item.explanation}</p>
|
|
<DataPassport sources={item.sources} observedAt={item.last_confirmed_at} confidence={item.confidence_score}/>
|
|
<div class="bait-line"><FishingIcon name="lure" size={25}/><div><span>Работает сейчас</span><strong>{item.best_bait ?? "не указана"}</strong></div></div>
|
|
</div>
|
|
<div class="spot-stats"><div><strong>{item.catches}</strong><span>{plural(item.catches, ["улов", "улова", "уловов"])}</span></div><div><strong>{item.unique_players}</strong><span>{plural(item.unique_players, ["игрок", "игрока", "игроков"])}</span></div><div><strong>{kg(item.average_weight_g)}</strong><span>средний вес</span></div><div><strong>{item.confidence_score}%</strong><span>уверенность</span></div></div><span class="card-arrow"><FishingIcon name="arrow" size={22}/></span>
|
|
</a>
|