From 2e4cb9733c69e937481e2f6be15d125653df6ae1 Mon Sep 17 00:00:00 2001 From: Erol Haagenrud Date: Thu, 20 Aug 2026 06:51:19 +0200 Subject: [PATCH] Score-fanen: fjern Deg-badge, begrens historikk til eget kort, fiks kompakt hindrings-ikoner, fjern duplikat manage-knapp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fire brukerpåpekte oppfølgingsfunn rett etter forrige runde (#133): Deg-badgen på spillerkort er unødvendig, historikk-panelet viste seg feilaktig på medspilleres kort, kompakt avstandsmåler falt tilbake til en generisk varseltrekant i stedet for ekte hindrings-ikoner, og den nye Spillere-og-runde-vekslen duplikerte RoundHeader sin Administrer- knapp. Se CHANGELOG.md #134 for full detalj og verifisering. Co-Authored-By: Claude Sonnet 5 --- CHANGELOG.md | 62 +++++++++++++++++ frontend/components/hole-diagram-view.tsx | 19 +++--- frontend/components/round-detail.tsx | 83 ++++++++++------------- 3 files changed, 106 insertions(+), 58 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b6dccb..6919774 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13292,3 +13292,65 @@ Neste steg: **Rullet ut 2026-08-20** -- bruker bekreftet. Ren frontend. `docker compose build teecup_frontend && up -d`, rene logger, 200 OK. + +134. **Score-fanen: fire oppfølgingsfunn på spillerkortene rett etter + #133, 2026-08-20.** Bruker så det ferdige resultatet av #133 og + meldte fire konkrete ting samme runde: + + - **"Deg"-badgen ved siden av eget navn i spillerkortet** oppfattet + som unødvendig ("knappen med 'deg' må bort") -- fjernet fra + `PlayerHoleCards` sin kortheader (`round-detail.tsx`). Ikke rørt + andre steder den samme badgen brukes (`PlayerList`, + `ScorecardGrid`) -- kun spilt-kortet på Score-fanen var i scope. + - **Historikk-panelet ("Din historikk på dette hullet...") vist på + ALLE spilleres kort**, ikke bare egen -- reelt feil siden teksten + allerede eksplisitt sier "DIN", uansett hvilken spillers data som + faktisk vises. Rettet: `HoleHistoryPanel` rendres nå kun når + `player.isSelf`. + - **Hindrings-ikonene i kompakt avstandsmåler-visning (fra #133) + viste generisk `TriangleAlert` for alle hindringstyper** i stedet + for de egentlige type-ikonene (bunker/vann/kratt/tre osv.) som + alltid har fungert i full-visningen -- ren regresjon, siden + compact-modusen (introdusert i #133) aldri hadde fått samme + ikon-logikk som full-modusen, og ingen tidligere kalte + `size="compact"` for at det skulle synes. `hole-diagram-view.tsx`: + kompakt-listen bruker nå samme `HazardRow`-komponent (ikon, + bane, forkant/bakkant) som full-visningen, i stedet for en egen, + forenklet rad -- bruker sammenlignet de to skjermbildene direkte + og påpekte at de tar omtrent like mye plass, så den forenklede + raden ga ingen reell besparelse for tapt informasjon. + - **Den nye "Spillere og runde"/"Tilbake til score"-veksleknappen + fra #133 er selv et duplikat** av RoundHeader sin egen + "Administrer"-knapp (øverst til høyre, lenker til samme + `?tab=manage`-visning) -- bruker pekte dette ut selv + ("Den ligger jo i toppmenyen oppe til høyre?"), presiserte at kun + selve RADEN skulle bort, ikke funksjonen. Løst ved å fjerne + knapperaden helt og heller gjøre `pageTab`-synkroniseringen mot + `?tab=manage`-parameteren TOVEIS (`round-detail.tsx`) i stedet for + den opprinnelige ensrettede varianten fra #133 -- den ensrettede + varianten eksisterte kun for å skåne knappens EGEN lokale + tilstand fra å bli overstyrt av URL-en; siden knappen nå er + borte, er den beskyttelsen unødvendig, og toveis-synkronisering + gir samtidig RoundHeader sin "Score"-fane en reell funksjon som + "tilbake fra manage" (fungerte ikke før -- fanen linket til bare + URL-en, men ingenting nullstilte `pageTab` når parameteret + forsvant). + + **Verifisert i scratch:** `tsc --noEmit` rent etter alle fire. + Badge-fjerning, historikk-restriksjon og fjerning av veksle-raden + bekreftet visuelt i en mocket `RoundDetail`-forhåndsvisning + (samme mock-fetch-teknikk som #133). Hindrings-ikon-fiksen verifisert + isolert ved å rendre `HoleDiagram` direkte med `size="compact"` og + alle hindringstyper -- sammenlignet før/etter-skjermbilde, alle + typer viser nå riktig ikon. Toveis-URL-synkroniseringen ble + bekreftet REAKTIVT for inn-veien (Administrer -> manage, samme + side, ingen remount) via faktisk klikk-gjennomgang; selve + tilbake-retningen (manage -> bar URL) kunne ikke skjermbilde- + bekreftes -- forhåndsvisnings-nettleseren hang gjentatte ganger på + akkurat den navigasjonen uavhengig av trigger (både `router.push` + og ekte `` testet), mens serveren i alle tilfeller svarte + riktig og raskt (bekreftet i dev-server-loggen) -- vurdert som et + miljø-/verktøyproblem i forhåndsvisnings-nettleseren, ikke en reell + kodefeil, siden logikken er en direkte, symmetrisk speiling av den + allerede beviste `initialTab`-beregningen ved førstegangslasting. + Flagget eksplisitt til bruker som ikke fullt skjermbilde-verifisert. diff --git a/frontend/components/hole-diagram-view.tsx b/frontend/components/hole-diagram-view.tsx index 481a9d9..abc6112 100644 --- a/frontend/components/hole-diagram-view.tsx +++ b/frontend/components/hole-diagram-view.tsx @@ -212,17 +212,14 @@ export function HoleDiagram({ distances, playerPosition, hazards, size = "full", {hazards.length > 0 && ( -
    - {hazards.map((h) => ( -
  • -
  • - ))} -
+
+

Hindringer

+
    + {hazards.map((h) => ( + + ))} +
+
)} ) diff --git a/frontend/components/round-detail.tsx b/frontend/components/round-detail.tsx index b4106f4..906f852 100644 --- a/frontend/components/round-detail.tsx +++ b/frontend/components/round-detail.tsx @@ -452,8 +452,17 @@ export function RoundDetail({ roundId }: { roundId: string }) { // (rapportert av bruker via video 2026-08-03, bekreftet: URL-en endret // seg riktig til ?tab=manage, men selve fanen forble "Score"). Fikset // med en effekt som reagerer på selve søkeparameter-ENDRINGEN, ikke - // bare mount -- ensrettet (kun til "manage"), rører aldri brukerens - // egen lokale "Score"-valg via pillen etterpå. + // bare mount. + // 2026-08-20: effekten var opprinnelig ensrettet (kun TIL "manage") for + // å skåne en egen, lokal "Spillere og runde"-veksleknapp på selve + // Score-siden fra å bli overstyrt av URL-en. Den knappen er nå fjernet + // (brukerkorrigering -- reelt duplikat av "Administrer"-knappen i + // RoundHeader, som allerede lenker hit) -- eneste vei INN i "manage" er + // nå denne URL-parameteren, så effekten kan trygt speile den begge + // veier. Det gir samtidig "Score"-fanen i RoundHeader (lenker til bare + // `/my-rounds/{id}`, uten parameteret) en reell funksjon som "tilbake" + // fra manage-panelet -- fungerte ikke før, siden ingenting nullstilte + // `pageTab` når parameteret forsvant. const pathname = usePathname() const searchParams = useSearchParams() const initialTab = searchParams.get("tab") === "manage" ? "manage" : "score" @@ -535,12 +544,11 @@ export function RoundDetail({ roundId }: { roundId: string }) { const [pageTab, setPageTab] = useState<"score" | "manage">(initialTab) // Fikser "Administrer"-snarveien fra selve Score-siden (se begrunnelse // ved searchParams over) -- reagerer på selve parameter-ENDRINGEN i - // stedet for kun mount-tidspunktet. Ensrettet med vilje: hopper TIL - // "manage" når URL-en ber om det, men tvinger aldri tilbake til "score" - // om parameteren mangler/fjernes (det ville kunnet rive brukeren vekk - // fra et bevisst lokalt "Score"-valg de allerede har gjort). + // stedet for kun mount-tidspunktet. Toveis siden 2026-08-20 (se + // begrunnelse ved searchParams over) -- speiler URL-en nøyaktig samme + // vei som `initialTab` allerede gjorde ved mount. useEffect(() => { - if (searchParams.get("tab") === "manage") setPageTab("manage") + setPageTab(searchParams.get("tab") === "manage" ? "manage" : "score") }, [searchParams]) // Fanger opp nettleserens frem/tilbake-navigasjon (URL-en endrer seg uten // at `setHoleAndUrl` kalte den) -- speiler `?hole=`-parameteren inn i @@ -1503,34 +1511,15 @@ export function RoundDetail({ roundId }: { roundId: string }) { )} - {/* Ett enkelt, sekundært veksle-valg -- IKKE en fanerad (2026-08-20, - reelt brukerfunn: en andre pille-fanerad her, rett under - RoundHeader sin egen Score/Scorekort/Leaderboard-rad, leste som - to duplikate "Score"-kontroller rett oppå hverandre). "Score" - (hull-navigasjon + registrering, default) og "Spillere og runde" - (alt administrativt) er fortsatt to distinkte visninger på denne - siden -- kun selve KONTROLLEN er nå en enkelt, tydelig ANNERLEDES - knapp (ramme + ikon, ikke en pille) i stedet for en segmentert - fanerad som konkurrerer visuelt med hovedfanene over. */} -
- -
+ {/* 2026-08-20: den forrige egne veksleknappen ("Spillere og + runde"/"Tilbake til score") her er FJERNET (brukerkorrigering -- + reelt duplikat av "Administrer"-knappen i RoundHeader øverst, + som allerede lenker til nøyaktig samme "manage"-visning via + ?tab=manage). Selve TO-FANE-FUNKSJONEN (pageTab under) + beholdes uendret -- kun den ekstra, synlige raden er borte. Se + searchParams-effekten over: RoundHeader sin egen "Score"-fane + (lenker til bare-URL-en, uten parameteret) er nå den fungerende + veien tilbake fra manage-panelet. */} {/* Offline scoreregistrering (ADR-028-utvidelse) -- synlig uansett fane, siden offline-tilstanden er global for hele siden. */} @@ -6833,11 +6822,6 @@ function PlayerHoleCards({ /> )} {player.name} - {player.isSelf && ( - - Deg - - )}
HCP {player.hcp !== null ? player.hcp.toFixed(1).replace(".", ",") : "–"} @@ -6923,13 +6907,18 @@ function PlayerHoleCards({ slagvinduet ADR-079, 2026-08-16) -- skjermen FØR registrering/"Avslutt for {navn}", ikke inni selve slagvinduet. Skjuler seg selv når banen er custom eller - spilleren ikke har historikk ennå. */} -
- setHistoryPlayerId(player.id)} - /> -
+ spilleren ikke har historikk ennå. KUN scorekortførers + (isSelf) eget kort (2026-08-20, brukerkorrigering -- + panelets tekst sier "Din historikk", som var feil for + andre spilleres kort). */} + {player.isSelf && ( +
+ setHistoryPlayerId(player.id)} + /> +
+ )} h.played).length ?? 0}