Scenario uitwerken binnen een concept. Drag & drop teamindeling met foto's, korfballeeftijd, validatie en AI-advies.
Een scenario uitwerken binnen een concept: concrete teamindeling met spelers via drag & drop, realtime validatie en AI-ondersteuning.
@dnd-kitNieuwTeamDialoogkorfbalPeildatum(seizoen) uit @oranje-wit/types). Voor het lopende seizoen: HUIDIGE_PEILDATUM.berekenKorfbalLeeftijd(geboortedatum, geboortejaar, peildatum) — 2 decimalen.berekenKorfbalLeeftijdExact(...) — onafgerond.valtBinnenCategorie(exact, "U15") — ≤ op 15.00.grofKorfbalLeeftijd(geboortejaar, peildatum).formatKorfbalLeeftijd(leeftijd) → "14.99".kleurIndicatie(leeftijd) → dot in teamkleur (Blauw/Groen/Geel/Oranje/Rood).KLEUR_DOT (tailwind kleuren).SpelerAvatar component: toont webp foto uit /api/foto/[id]Concrete teamindeling:
selectieGroepId self-relationElk scenario heeft versies (snapshots):
team-indeling/batch-plaatsMaakDefinitiefKnop)VoorstelDialoog): Claude genereert complete teamindelingChatPanel): streaming chat met Claude via /api/ai/chat (SSE). 16 tools beschikbaar:
bekijk_huidige_indeling, bekijk_spelerspool, bekijk_speler_details, bekijk_voorgaande_indeling, bekijk_teamsterktes, bekijk_evaluaties, bekijk_blauwdruk_kaders, bekijk_retentie_overzicht, bekijk_teamgenoten, valideer_teamsverplaats_speler, voeg_speler_toe, verwijder_speler_uit_team, wissel_spelers, maak_team_aanonMutatie callback herlaadt teams in ScenarioEditorWhatIfDialoog): impact doorrekenen bij verplaatsingenuseValidatie hook berekent stoplicht per teamValidatieBadge: groen/oranje/rood dot per teamValidatieMeldingen: popover met detailsValidatieRapport: volledig overzicht in slide-overImpactOverzicht: best/verwacht/worst case analyseScenarioEditor: detailSpeler + detailTeamIdonSpelerClick prop threading: ScenarioEditor → Werkgebied → TeamKaart/SelectieBlok → TeamSpelerRijGET /api/spelers/[id]/evaluaties?teamId=xxxEvaluatieScores component: horizontale balkjes met optionele team-gemiddelde markerTeamData + TeamValidatie propsscenarios/actions.ts)| Functie | Beschrijving |
|---|---|
createScenario(...) | Nieuw scenario met teams uit teamstructuur-berekening |
getScenario(id) | Scenario met versies, teams, spelers, staf |
addSpelerToTeam(teamId, spelerId) | Speler aan team toevoegen |
removeSpelerFromTeam(teamId, spelerId) | Speler uit team verwijderen |
moveSpeler(spelerId, van, naar) | Speler verplaatsen (transactie) |
createTeam(versieId, data) | Nieuw team aanmaken |
deleteTeam(teamId) | Team verwijderen (ontkoppelt selectie eerst) |
koppelSelectie(teamIds) | Teams als selectie koppelen |
ontkoppelSelectie(groepId) | Selectie ontkoppelen |
markeerDefinitief(scenarioId) | Definitief markeren, rest archiveren |
Alle dialogen gebruiken design-systeem classes:
dialog-overlay, dialog-panel, dialog-header, dialog-body, dialog-footerbtn-primary, btn-secondary, btn-danger, btn-ghostinput