"use client" // Frittstående rundeføring (ADR-033) -- runder eid direkte av en BRUKER // (app_user), ikke en organisasjon. Bevisst adskilt navn fra dashbordets // "Mine runder" (turnering-deltakelse, se MyToursSection i dashboard.tsx) // for å unngå forveksling -- denne funksjonen kalles "Egne runder" overalt // i UI-et. import { useEffect, useState } from "react" import Link from "next/link" import { useRouter } from "next/navigation" import { ArrowLeft, Calendar, ChevronRight, Flag, Plus } from "lucide-react" import { Button } from "@/components/ui/button" import { Wordmark } from "@/components/wordmark" type ApiRoundParticipant = { id: string is_owner: boolean guest_name: string | null } type ApiRound = { id: string course_name_snapshot: string tee_name_snapshot: string played_at: string holes_planned: number completed_at: string | null participants: ApiRoundParticipant[] } export function PersonalRounds() { const router = useRouter() const [rounds, setRounds] = useState(null) const [error, setError] = useState(null) useEffect(() => { let cancelled = false async function load() { try { const res = await fetch("/rounds", { credentials: "include" }) if (res.status === 401) { router.replace("/") return } if (!res.ok) throw new Error(`rounds: ${res.status}`) const data: ApiRound[] = await res.json() if (!cancelled) setRounds(data) } catch { if (!cancelled) setError("Klarte ikke å hente rundene dine. Prøv igjen om litt.") } } void load() return () => { cancelled = true } }, [router]) return (

Egne runder

Registrer en runde på egen hånd, med eller uten turnering, og få detaljert statistikk.

{error && (

{error}

)} {rounds === null ? (
) : rounds.length === 0 ? (

Ingen runder registrert ennå

Trykk på «Ny runde» for å registrere den første.

) : (
    {rounds.map((r) => (
  • {r.course_name_snapshot}

    {r.completed_at ? ( Fullført ) : ( Pågår )}
    {r.tee_name_snapshot} · {r.holes_planned} hull · {formatDate(r.played_at)}
  • ))}
)}
) } function formatDate(iso: string) { const date = new Date(iso) if (Number.isNaN(date.getTime())) return iso return new Intl.DateTimeFormat("no-NO", { day: "numeric", month: "short", year: "numeric" }).format(date) }