fix(frontend): auto-completed on finish time, dashboard links, list/calendar UX
Some checks failed
CI / build-and-test (pull_request) Has been cancelled

- Set status to completed when finish time parses (input + submit)
- Dashboard: last personal record by recent date+time; links on top 3 cards
- Hover scale+shadow on all dashboard-card; linked card padding via BEM
- Race list: full row links to race detail; same hover as before
- Calendar year grid: 3 columns, 2 on tablet, 1 on narrow
- Version 0.4.1

Made-with: Cursor
This commit is contained in:
Vaka.pro
2026-04-13 22:34:39 +03:00
parent 74f059593e
commit 4ea8faf16f
6 changed files with 130 additions and 85 deletions

View File

@@ -8,7 +8,6 @@ import {
formatRaceDate,
getRaceStatusClassName,
getRaceStatusLabel,
raceNeedsResultEntry,
splitRacesByDate,
} from "../lib";
@@ -67,38 +66,16 @@ function RaceList(props: { title: string; races: Race[] }): JSX.Element {
<h2 className="race-list__title">{title}</h2>
{races.length > 0 ? (
<ul className="race-list__items">
{races.map((race) => {
const needsResult = raceNeedsResultEntry(race);
if (needsResult) {
return (
<li key={race.id} className="race-card race-card--action">
<Link
className="race-card__link-surface"
to={`/races/${race.id}/edit`}
aria-label={`${race.title}, внести результат`}
>
<div className="race-card__main">
<p className="race-card__title">
<span className="race-card__title-text">{race.title}</span>
</p>
<p className="race-card__meta">
{formatRaceDate(race.date)} · {formatDistance(race.distanceKm)}
</p>
</div>
<span className={getRaceStatusClassName(race.status, race.date)}>
{getRaceStatusLabel(race.status, race.date)}
</span>
</Link>
</li>
);
}
return (
<li key={race.id} className="race-card">
{races.map((race) => (
<li key={race.id} className="race-card race-card--action">
<Link
className="race-card__link-surface"
to={`/races/${race.id}`}
aria-label={`Старт: ${race.title}`}
>
<div className="race-card__main">
<p className="race-card__title">
<Link className="race-card__link" to={`/races/${race.id}`}>
{race.title}
</Link>
<span className="race-card__title-text">{race.title}</span>
</p>
<p className="race-card__meta">
{formatRaceDate(race.date)} · {formatDistance(race.distanceKm)}
@@ -107,9 +84,9 @@ function RaceList(props: { title: string; races: Race[] }): JSX.Element {
<span className={getRaceStatusClassName(race.status, race.date)}>
{getRaceStatusLabel(race.status, race.date)}
</span>
</li>
);
})}
</Link>
</li>
))}
</ul>
) : (
<p className="race-list__empty">Пока нет данных в этом разделе.</p>