Story 5.3: persistance localStorage

This commit is contained in:
2026-02-04 21:10:40 +01:00
parent fb95a39792
commit a4e0cb71e9
7 changed files with 222 additions and 42 deletions

View File

@@ -2,7 +2,7 @@
## Status
Ready for Dev
review
## Story
@@ -21,34 +21,34 @@ Ready for Dev
## Tasks / Subtasks
- [] **Task 1 : Créer le gestionnaire de stockage** (AC: 6)
- [] Clé unique `portfolio_contact_form`
- [] Méthodes save, load, clear
- [] Gestion des erreurs (localStorage indisponible)
- [x] **Task 1 : Créer le gestionnaire de stockage** (AC: 6)
- [x] Clé unique `portfolio_contact_form`
- [x] Méthodes save, load, clear
- [x] Gestion des erreurs (localStorage indisponible)
- [] **Task 2 : Sauvegarder automatiquement** (AC: 1)
- [] Écouter l'événement `input` sur chaque champ
- [] Debounce pour éviter trop d'écritures (500ms)
- [] Sauvegarder l'état complet
- [x] **Task 2 : Sauvegarder automatiquement** (AC: 1)
- [x] Écouter l'événement `input` sur chaque champ
- [x] Debounce pour éviter trop d'écritures (500ms)
- [x] Sauvegarder l'état complet
- [] **Task 3 : Restaurer au chargement** (AC: 2)
- [] Charger les données au DOMContentLoaded
- [] Pré-remplir chaque champ
- [] Mettre à jour le compteur de caractères
- [x] **Task 3 : Restaurer au chargement** (AC: 2)
- [x] Charger les données au DOMContentLoaded
- [x] Pré-remplir chaque champ
- [x] Mettre à jour le compteur de caractères
- [] **Task 4 : Vider après envoi réussi** (AC: 3)
- [] Appeler clear() après succès (événement formSuccess)
- [] Réinitialiser le formulaire
- [x] **Task 4 : Vider après envoi réussi** (AC: 3)
- [x] Appeler clear() après succès (événement formSuccess)
- [x] Réinitialiser le formulaire
- [] **Task 5 : Bouton "Effacer"** (AC: 4)
- [] Écouter le clic sur le bouton (id="clear-form-btn")
- [] Vider le localStorage
- [] Réinitialiser le formulaire
- [] Confirmation avec confirm()
- [x] **Task 5 : Bouton "Effacer"** (AC: 4)
- [x] Écouter le clic sur le bouton (id="clear-form-btn")
- [x] Vider le localStorage
- [x] Réinitialiser le formulaire
- [x] Confirmation avec confirm()
- [] **Task 6 : Exclure les données sensibles** (AC: 5)
- [] Ne pas stocker csrf_token, password, recaptcha_token
- [] Documenté dans EXCLUDED_FIELDS
- [x] **Task 6 : Exclure les données sensibles** (AC: 5)
- [x] Ne pas stocker csrf_token, password, recaptcha_token
- [x] Documenté dans EXCLUDED_FIELDS
## Dev Notes
@@ -270,7 +270,11 @@ Exemple de données stockées:
## Dev Agent Record
### Agent Model Used
Claude Opus 4.5 (claude-opus-4-5-20251101)
GPT-5 Codex
### Implementation Plan
- Implémenter les tâches 1 à 6 dans lordre avec tests à chaque étape.
- Intégrer le stockage dans `contact-form.js` et scripts dans la page.
### File List
| File | Action | Description |
@@ -278,16 +282,16 @@ Claude Opus 4.5 (claude-opus-4-5-20251101)
| `assets/js/state.js` | Created | Objet AppState pour gestion localStorage |
| `assets/js/contact-form.js` | Modified | Ajout classe ContactFormPersistence |
| `pages/contact.php` | Modified | Bouton Effacer + script state.js |
| `tests/contact-state.test.php` | Added | Tests persistance localStorage |
| `tests/contact.test.php` | Modified | Vérification clear button + scripts |
| `tests/run.ps1` | Modified | Ajout du test contact-state |
### Completion Notes
- AppState avec clé unique `portfolio_contact_form`
- Vérification disponibilité localStorage (try/catch)
- Filtrage des champs sensibles (csrf_token, password, recaptcha_token)
- Debounce de 500ms sur la sauvegarde
- Restauration automatique au chargement de la page
- Bouton "Effacer" avec confirmation et reset complet
- Événement `formSuccess` pour vider après envoi réussi
- Scripts chargés avec defer pour ne pas bloquer le rendu
- AppState avec clé unique `portfolio_contact_form` et exclusions sensibles
- Sauvegarde avec debounce 500ms + restauration au chargement
- Bouton Effacer avec confirm + reset complet
- Listener `formSuccess` pour purge post-envoi
- Tests : `powershell -ExecutionPolicy Bypass -File tests/run.ps1`
### Debug Log References
Aucun problème rencontré.
@@ -298,3 +302,4 @@ Aucun problème rencontré.
|------|---------|-------------|--------|
| 2026-01-22 | 0.1 | Création initiale | Sarah (PO) |
| 2026-01-24 | 1.0 | Implémentation complète | James (Dev) |
| 2026-02-04 | 1.1 | Persistance localStorage | Amelia (Dev) |