Tone ned Historikk/Avslutt/Send scorekort bak "Mer" på spillerkortene (Score-fanen)

V0-eksport (etter Claude-skrevet prompt) integrert som ny PlayerCardMore-
wrapper -- eier kun vis/skjul, de ekte HoleHistoryPanel/
ParticipantCompletionActions sendes inn uendret. Kun PlayerHoleCards
(Score-fanen) berørt, ikke PlayerList (administrasjonsvisningen). Se
CHANGELOG.md #135 for full detalj og verifisering. Ikke rullet ut ennå.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Erol Haagenrud 2026-08-20 06:57:41 +02:00
parent 2e4cb9733c
commit 49530ffd40
2 changed files with 104 additions and 15 deletions

View file

@ -13354,3 +13354,37 @@ Neste steg:
kodefeil, siden logikken er en direkte, symmetrisk speiling av den kodefeil, siden logikken er en direkte, symmetrisk speiling av den
allerede beviste `initialTab`-beregningen ved førstegangslasting. allerede beviste `initialTab`-beregningen ved førstegangslasting.
Flagget eksplisitt til bruker som ikke fullt skjermbilde-verifisert. Flagget eksplisitt til bruker som ikke fullt skjermbilde-verifisert.
135. **Spillerkort på Score-fanen: "Mer"-knapp toner ned historikk +
Avslutt/Send scorekort, 2026-08-20.** Direkte oppfølging av #134 --
historikk-panelet og Avslutt/Send-radene lå fortsatt alltid synlig
på hvert kort, bare henholdsvis begrenset til eget kort og uendret.
Bruker foreslo selv en "Mer"-knapp som løsning; Claude skrev en
V0-prompt for mønsteret, bruker kjørte den og lastet opp eksporten
(`player-card-more.tsx`).
Ny lokal komponent `PlayerCardMore` i `round-detail.tsx` (rett etter
`ParticipantCompletionActions`) -- eier KUN vis/skjul, tar imot
`history`/`actions` som `ReactNode`-props. Interaksjonsmønsteret
(grid-rows 0fr->1fr myk høyde-animasjon, samme prinsipp som "Vis
banekart og hindringer" fra #133, tekst+chevron på knappen, innhold
tatt ut av a11y-tre/tab-rekkefølge mens skjult) hentet fra
V0-eksporten. De EKTE `HoleHistoryPanel` og `ParticipantCompletionActions`
sendes inn uendret som barn -- V0 sine egne plassholder-rader
(`HistoryRow`/`SecondaryActions`) ble IKKE tatt i bruk, kun designet
for dem. Kun `PlayerHoleCards` (Score-fanen) endret -- `PlayerList`
("Spillere og runde") beholder `ParticipantCompletionActions` synlig
uten veksling, siden den siden allerede er en ren
administrasjonsvisning der handlingene ikke er "i veien".
**Verifisert i scratch:** mocket `RoundDetail`-forhåndsvisning med tre
spillere (eier m/historikk, to medspillere u/historikk). Bekreftet:
alle tre kort viser kompakt "Mer" som standard, klikk utvider korrekt
(knapp blir "Skjul", chevron snur), egen historikk + Avslutt/Send
scorekort vises for eierens kort, KUN Avslutt/Send (ingen tomt/rart
mellomrom) for medspillerne, ingen dobbel padding/kant-artefakt der
de ekte komponentenes egen styling (border-t/px-4) møter wrapperen.
Sjekket lys og mørk modus. `tsc --noEmit` rent.
**Ikke rullet ut ennå** -- verifisert i scratch, venter på
bekreftelse fra bruker før build/deploy til live.

View file

@ -9,7 +9,7 @@
// aldri kun det ene feltet som ble endret. // aldri kun det ene feltet som ble endret.
import type React from "react" import type React from "react"
import { useCallback, useEffect, useMemo, useRef, useState } from "react" import { useCallback, useEffect, useId, useMemo, useRef, useState } from "react"
import Link from "next/link" import Link from "next/link"
import dynamic from "next/dynamic" import dynamic from "next/dynamic"
import { usePathname, useRouter, useSearchParams } from "next/navigation" import { usePathname, useRouter, useSearchParams } from "next/navigation"
@ -5945,6 +5945,54 @@ function ParticipantCompletionActions({
) )
} }
// Tone-ned-mønster for spillerkortets sekundære rader (historikk +
// Avslutt/Send scorekort) på Score-fanen -- V0-eksport (zip, 2026-08-20,
// brukerkorrigering: disse lå tidligere alltid synlig, uansett hvor sjelden
// brukt). Eier KUN vis/skjul -- selve historikk-panelet og handlingsraden
// forblir de ekte, uendrede komponentene (HoleHistoryPanel/
// ParticipantCompletionActions), sendt inn som barn. Brukes KUN i
// PlayerHoleCards (Score-fanen) -- PlayerList ("Spillere og runde") beholder
// ParticipantCompletionActions synlig uten denne vekslen, siden den siden
// allerede er en ren administrasjonsvisning.
function PlayerCardMore({ history, actions }: { history?: React.ReactNode; actions: React.ReactNode }) {
const [open, setOpen] = useState(false)
const regionId = useId()
return (
<div className="flex flex-col border-t border-border">
<button
type="button"
onClick={() => setOpen((v) => !v)}
aria-expanded={open}
aria-controls={regionId}
className="flex min-h-11 items-center justify-center gap-1.5 self-center rounded-xl px-4 py-2 text-sm font-bold text-muted-foreground transition-colors hover:bg-accent/50 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
>
{open ? "Skjul" : "Mer"}
<ChevronDown
aria-hidden="true"
className={cn("size-4 shrink-0 transition-transform duration-200", open && "rotate-180")}
/>
</button>
{/* Myk høyde-animasjon via grid-rows 0fr -> 1fr -- samme prinsipp som
"Vis banekart og hindringer" lenger oppe skjermen. Innholdet
fjernes fra a11y-treet og tab-rekkefølgen mens det er skjult. */}
<div
id={regionId}
className={cn(
"grid transition-all duration-300 ease-out",
open ? "grid-rows-[1fr] opacity-100" : "grid-rows-[0fr] opacity-0",
)}
>
<div className="overflow-hidden">
<div className={cn("flex flex-col gap-2 pb-2", !open && "invisible")} aria-hidden={!open}>
{history && <div className="px-4">{history}</div>}
{actions}
</div>
</div>
</div>
</div>
)
}
// ADR-066-flagg-tillegget (2026-08-14) -- V0-eksport (zip 11), integrert // ADR-066-flagg-tillegget (2026-08-14) -- V0-eksport (zip 11), integrert
// mot samme props-kontrakt som den midlertidige versjonen den erstatter. // mot samme props-kontrakt som den midlertidige versjonen den erstatter.
// Ren UI: komponenten eier kun steg-/geo-/inputtilstand og gjør aldri // Ren UI: komponenten eier kun steg-/geo-/inputtilstand og gjør aldri
@ -6910,15 +6958,20 @@ function PlayerHoleCards({
spilleren ikke har historikk ennå. KUN scorekortførers spilleren ikke har historikk ennå. KUN scorekortførers
(isSelf) eget kort (2026-08-20, brukerkorrigering -- (isSelf) eget kort (2026-08-20, brukerkorrigering --
panelets tekst sier "Din historikk", som var feil for panelets tekst sier "Din historikk", som var feil for
andre spilleres kort). */} andre spilleres kort). Tonet ned bak "Mer" sammen med
{player.isSelf && ( Avslutt/Send scorekort (2026-08-20, V0-eksport
<div className="px-4 pb-2"> `player-card-more.tsx`) -- begge var sjeldent brukte
handlinger som likevel alltid tok plass hvert kort. */}
<PlayerCardMore
history={
player.isSelf ? (
<HoleHistoryPanel <HoleHistoryPanel
url={`/rounds/${roundId}/participants/${player.id}/holes/${currentHole}/history`} url={`/rounds/${roundId}/participants/${player.id}/holes/${currentHole}/history`}
onOpenFull={() => setHistoryPlayerId(player.id)} onOpenFull={() => setHistoryPlayerId(player.id)}
/> />
</div> ) : undefined
)} }
actions={
<ParticipantCompletionActions <ParticipantCompletionActions
player={player} player={player}
holesPlayed={list?.filter((h) => h.played).length ?? 0} holesPlayed={list?.filter((h) => h.played).length ?? 0}
@ -6926,6 +6979,8 @@ function PlayerHoleCards({
onPatch={onPatchParticipant} onPatch={onPatchParticipant}
onSendScorecard={onSendScorecard} onSendScorecard={onSendScorecard}
/> />
}
/>
{playFormat === "flag" && (() => { {playFormat === "flag" && (() => {
const currentPosition = computeFlagCurrentPosition( const currentPosition = computeFlagCurrentPosition(
holeOrder, holesByParticipant[player.id], flagOverflowByParticipant[player.id], holeOrder, holesByParticipant[player.id], flagOverflowByParticipant[player.id],