feat(ui) : MalioDate/DateTime — event update:rawValue pour validation back-autoritative (#MUI-44) #74

Merged
tristan merged 1 commits from feature/MUI-44-date-rawvalue into develop 2026-06-12 07:38:23 +00:00
Owner

MUI-44 — Exposer la saisie brute invalide (@update:rawValue)

Suite de MUI-43. Une app consommatrice (Starseed/ERP) fait de la validation back-autoritative : plutôt que bloquer le submit côté front, elle transmet la saisie invalide au serveur qui renvoie un 422 mappé inline. Or MalioDate/MalioDateTime avalent la saisie invalide (ni modelValue, ni texte brut) → le parent ne peut rien envoyer.

Changements

  • Nouvel emit (e: 'update:rawValue', value: string) sur Date.vue et DateTime.vue, émis à chaque commit :
    • saisie invalide (non parsable ou hors min/max) → chaîne brute trimmée telle que tapée (ex. "32/13/2026"), sans emit update:modelValue ;
    • saisie valide ou vide, clear, sélection au calendrier (+ réglage d'heure pour DateTime) → ''.
  • Canal séparé : modelValue reste string ISO | null (affichage + round-trip). Le parent construit son payload via valid ? modelValue : rawValue.

Tests (TDD)

6 cas ajoutés par composant : malformé, hors bornes, valide, vidé, clear, sélection calendrier. Suite complète 987 ✓, ESLint 0 erreur.

Doc

COMPONENTS.md (paragraphe + Events + exemples) et CHANGELOG.md (entrée MUI-44) à jour.

Hors périmètre

DateRange/DateWeek (pas de saisie texte libre). Branchement Starseed (collectDenormalizationErrors, useFormErrors) traité côté ERP.

🤖 Generated with Claude Code

## MUI-44 — Exposer la saisie brute invalide (`@update:rawValue`) Suite de MUI-43. Une app consommatrice (Starseed/ERP) fait de la **validation back-autoritative** : plutôt que bloquer le submit côté front, elle transmet la saisie invalide au serveur qui renvoie un `422` mappé inline. Or `MalioDate`/`MalioDateTime` **avalent** la saisie invalide (ni `modelValue`, ni texte brut) → le parent ne peut rien envoyer. ### Changements - Nouvel emit `(e: 'update:rawValue', value: string)` sur `Date.vue` et `DateTime.vue`, émis à chaque commit : - saisie **invalide** (non parsable ou hors `min`/`max`) → chaîne brute trimmée telle que tapée (ex. `"32/13/2026"`), **sans** emit `update:modelValue` ; - saisie **valide ou vide**, **clear**, **sélection au calendrier** (+ réglage d'heure pour DateTime) → `''`. - Canal **séparé** : `modelValue` reste `string` ISO `| null` (affichage + round-trip). Le parent construit son payload via `valid ? modelValue : rawValue`. ### Tests (TDD) 6 cas ajoutés par composant : malformé, hors bornes, valide, vidé, clear, sélection calendrier. Suite complète **987 ✓**, ESLint 0 erreur. ### Doc `COMPONENTS.md` (paragraphe + Events + exemples) et `CHANGELOG.md` (entrée MUI-44) à jour. ### Hors périmètre `DateRange`/`DateWeek` (pas de saisie texte libre). Branchement Starseed (`collectDenormalizationErrors`, `useFormErrors`) traité côté ERP. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
tristan added 1 commit 2026-06-12 07:31:59 +00:00
Expose la saisie brute invalide sur un canal séparé (`@update:rawValue`),
sans la faire transiter par `modelValue` (qui reste ISO|null). Émis à chaque
commit : saisie invalide (non parsable ou hors min/max) → texte trimmé tel que
tapé ; saisie valide/vide, clear, sélection au calendrier → ''. Le parent
construit son payload via `valid ? modelValue : rawValue`.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
tristan merged commit bc31d94719 into develop 2026-06-12 07:38:23 +00:00
tristan deleted branch feature/MUI-44-date-rawvalue 2026-06-12 07:38:23 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MALIO-DEV/malio-layer-ui#74