"use client" // Velger riktig turnering-skjerm basert på tournament.format_type // (ADR-011 lagformat vs. ADR-037 individuell) -- egen, autoritativ henting // FØR noe rendres, i stedet for å stole på et query-param-hint (ville brutt // for enhver inngang som ikke går via dashbordets akkurat-nå-opprettet-flyt, // f.eks. en bokmerket lenke). Samme "hent org-ens turneringsliste og finn // egen rad"-mønster som tournament-detail.tsx allerede bruker for join_code. import { useEffect, useState } from "react" import { useRouter } from "next/navigation" import { TournamentDetail } from "@/components/tournament-detail" import { IndividualTournamentDetail } from "@/components/individual-tournament-detail" export function TournamentRouter({ organizationId, tournamentId, tournamentName, }: { organizationId: string tournamentId: string tournamentName: string }) { const router = useRouter() const [formatType, setFormatType] = useState<"team" | "individual" | null>(null) const [error, setError] = useState(false) // Ikke-innlogget besøkende på denne organisator-URL-en (f.eks. en delt // /tournaments/{id}?org=...-lenke) -- funnet 2026-08-21: den generiske // feil-fallback-en under viste tidligere ALLTID Cup/lag-format- // administrasjonsskjermen (samme "trygt mot krasj"-begrunnelse som før), // helt uavhengig av turneringens faktiske format og helt uavhengig av // ÅRSAKEN til feilen -- en anonym besøkende på en individuell turnering // fikk et forvirrende, ødelagt Ryder Cup-oppsett-skjermbilde i stedet for // en ren "logg inn"-beskjed. Skiller nå eksplisitt 401 (ikke innlogget) // fra andre feil, og sender i stedet videre til den ekte offentlige siden. const [notAuthenticated, setNotAuthenticated] = useState(false) useEffect(() => { let cancelled = false fetch(`/orgs/${organizationId}/tournaments`, { credentials: "include" }) .then((res) => { if (res.status === 401) { if (!cancelled) setNotAuthenticated(true) return Promise.reject() } return res.ok ? res.json() : Promise.reject() }) .then((list: { id: string; format_type: string }[]) => { if (cancelled) return const mine = list.find((t) => t.id === tournamentId) setFormatType(mine?.format_type === "individual" ? "individual" : "team") }) .catch(() => { if (!cancelled) setError(true) }) return () => { cancelled = true } }, [organizationId, tournamentId]) useEffect(() => { if (notAuthenticated) router.replace(`/t/${tournamentId}`) }, [notAuthenticated, tournamentId, router]) if (notAuthenticated) { return (