Skip to content

Als staleigenaar wil ik een nette validatiemelding op het scherm als ik een nieuw paard aanmaak. #136

Description

@MiniMaxi-user

User Story

Als staleigenaar wil ik bij het aanmaken (of bewerken) van een paard een duidelijke validatiemelding bij het betreffende veld zien wanneer een veld onjuist is ingevuld, zodat ik direct begrijp wat ik moet corrigeren in plaats van een onduidelijke rode foutbalk bovenin het scherm te krijgen.

Context

Bij het opslaan van een paard wordt invoer server-side gevalideerd (o.a. het chipnummer moet exact 15 cijfers bevatten, zie createHorse in src/features/paarden/actions.ts). Faalt de validatie, dan komt de melding nu terug als een generieke rode balk bovenin het formulier (form-feedback--error in src/features/paarden/PaardForm.tsx). De gebruiker ziet daardoor niet bij welk veld de fout zit en moet zelf zoeken. Dit is opgemerkt in de praktijk (de "gekke rode balk bovenin het scherm").

Het design system bevat hier al bouwstenen voor die nu niet gebruikt worden:

  • .input.is-error — rood omkaderd inputveld met lichtrode focus-glow.
  • .form-error — kleine rode helptekst onder een veld.

Beide staan in src/styles/globals.css (regel ~1551 en ~1559) en gebruiken de bestaande danger-tokens. Doel is de generieke foutbalk te vervangen door een nette, consistente foutweergave bij het veld zelf, herbruikbaar voor de verplichte/te-valideren velden van het paardformulier.

Scope

In scope:

  • Het paard-aanmaken- en paard-bewerken-formulier (src/features/paarden/PaardForm.tsx, gedeeld door paarden/nieuw en paarden/[id]/bewerken).
  • Validatiefouten koppelen aan het juiste veld in plaats van (alleen) een algemene balk bovenin: het foutieve veld krijgt .input.is-error en een .form-error-melding eronder.
  • Bij opslaan automatisch naar het eerste foutieve veld scrollen en dit focussen.
  • Een consistente, herbruikbare manier om deze veldfouten te tonen binnen dit formulier, zodat dezelfde aanpak op de andere te-valideren/verplichte velden toegepast kan worden (minimaal het verplichte veld name en het te-valideren chipNumber).
  • De bestaande server-side validatie in src/features/paarden/actions.ts blijft de bron van waarheid; deze mag zo aangepast worden dat de fout per veld teruggegeven kan worden (bv. een veld-identifier meegeven) in plaats van alleen een vrije-tekstmelding.

Buiten scope:

  • Geen nieuwe validatieregels of nieuwe verplichte velden toevoegen; alleen de bestaande regels netter tonen.
  • Geen uitrol naar andere formulieren buiten het paardformulier (gezondheidsregistraties, contracten, lease, enz.). Wel zodanig opbouwen dat de aanpak later herbruikbaar is, maar die uitrol is geen onderdeel van deze story.
  • Geen wijziging aan het design system anders dan eventueel hergebruik/lichte uitbreiding van de al bestaande is-error/form-error-stijlen.

Acceptatiecriteria

  • Als ik een paard opsla met een ongeldig chipnummer (niet exact 15 cijfers na verwijderen van spaties/streepjes), dan blijf ik op het formulier, wordt het chipnummer-veld visueel gemarkeerd als fout (.input.is-error) en verschijnt de bestaande melding ("Chipnummer moet exact 15 cijfers bevatten ...") als .form-error direct onder dat veld.
  • Als ik het verplichte veld Naam leeg laat en opsla, dan word ik op een consistente manier (zelfde mechanisme) op het Naam-veld gewezen.
  • Wanneer er bij opslaan een veldfout is, dan wordt automatisch naar het eerste foutieve veld gescrolld en krijgt dat veld focus.
  • De foutweergave gebruikt de bestaande design-system-stijlen (.input.is-error, .form-error, danger-tokens) en introduceert geen nieuwe ad-hoc kleuren of losse rode balk-styling buiten het design system.
  • De generieke rode foutbalk bovenin verschijnt niet meer voor fouten die aan een specifiek veld te koppelen zijn (een algemene balk mag blijven bestaan als vangnet voor niet-veld-gebonden fouten).
  • Het mechanisme werkt zowel bij aanmaken (paarden/nieuw) als bewerken (paarden/[id]/bewerken), aangezien beide hetzelfde PaardForm gebruiken.
  • Het gedrag is getest (conform de oorspronkelijke acceptatie-eis "Dit mechanisme is getest").

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions