Retour fonctionnel : allergies et intolérances doivent être distinguées dans l'UI, et /foyer doit sauvegarder à la volée plutôt que via des boutons "Enregistrer". - AllergySelect prend un `legend` en prop au lieu d'un libellé interne fixe — le même composant est rendu deux fois par chaque page consommatrice (HouseholdPage, OnboardingAllergensPage), une fois par `kind` (ALLERGY / INTOLERANCE), la sélection restant une seule liste d'IDs partagée. - HouseholdPage : suppression des boutons "Enregistrer", autosave déclenché depuis le handler onChange de chaque champ (jamais un useEffect générique sur la valeur — se déclencherait aussi au chargement initial, sans distinction propre "chargé" vs "modifié"). Nom du foyer et allergènes/intolérances debouncés (600ms/500ms), régime sauvegardé immédiatement (sélection discrète). Validation client (nom vide) empêche l'autosave plutôt que de déclencher un aller-retour API voué à l'échec. - i18n : household.form.allergiesLabel devient "Allergies" (au lieu de "Allergies & intolérances"), nouvelle clé intolerancesLabel, save/ saved remplacés par saving/saved (plus de bouton à libeller). - Cypress (household.cy.ts réécrit, onboarding.cy.ts mis à jour) + specs/frontend-architecture.md + README.md. Vérifié dans le navigateur : wizard d'inscription affiche bien les deux groupes (12 allergies / 2 intolérances) ; /foyer sans aucun bouton, chaque section sauvegarde automatiquement (vérifié en base après édition du nom du foyer et du régime) ; compte de test nettoyé. Clôt le retour fonctionnel sur la feature profil/foyer/régime/ allergènes (8 commits au total sur cette PR).
91 lines
2.6 KiB
JSON
91 lines
2.6 KiB
JSON
{
|
|
"errors": {
|
|
"VALIDATION_ERROR": "Erreur de validation",
|
|
"EMAIL_ALREADY_IN_USE": "Cet email est déjà utilisé",
|
|
"INVALID_CREDENTIALS": "Email ou mot de passe incorrect",
|
|
"NOT_AUTHENTICATED": "Vous devez être connecté",
|
|
"NOT_FOUND": "Ressource introuvable",
|
|
"HOUSE_NOT_FOUND": "Votre profil n'a pas de foyer",
|
|
"DIET_NOT_FOUND": "Ce régime alimentaire n'existe pas",
|
|
"ALLERGY_NOT_FOUND": "Un des allergènes sélectionnés n'existe pas",
|
|
"INTERNAL_ERROR": "Une erreur est survenue, réessayez plus tard"
|
|
},
|
|
"auth": {
|
|
"login": {
|
|
"title": "Se connecter",
|
|
"emailLabel": "Email",
|
|
"passwordLabel": "Mot de passe",
|
|
"submit": "Se connecter",
|
|
"submitting": "Connexion…",
|
|
"noAccount": "Pas encore de compte ?",
|
|
"createProfileLink": "Créer un profil"
|
|
},
|
|
"signup": {
|
|
"title": "Créer un profil",
|
|
"firstNameLabel": "Prénom",
|
|
"lastNameLabel": "Nom",
|
|
"emailLabel": "Email",
|
|
"passwordLabel": "Mot de passe",
|
|
"submit": "Créer mon profil",
|
|
"submitting": "Création…",
|
|
"hasAccount": "Déjà un compte ?",
|
|
"loginLink": "Se connecter"
|
|
}
|
|
},
|
|
"onboarding": {
|
|
"step": "Étape {{current}} sur {{total}}",
|
|
"continue": "Continuer",
|
|
"finish": "Terminer",
|
|
"loading": "Chargement…",
|
|
"household": {
|
|
"title": "Comment s'appelle votre foyer ?"
|
|
},
|
|
"diet": {
|
|
"title": "Un régime alimentaire particulier ?"
|
|
},
|
|
"allergens": {
|
|
"title": "Des allergies ou intolérances ?"
|
|
}
|
|
},
|
|
"layout": {
|
|
"nav": {
|
|
"planning": "Planning",
|
|
"recipes": "Recettes",
|
|
"shoppingList": "Liste de courses",
|
|
"household": "Foyer & profil"
|
|
},
|
|
"greeting": "Bonjour {{firstName}} 👋",
|
|
"logout": "Se déconnecter"
|
|
},
|
|
"home": {
|
|
"title": "Planning de la semaine",
|
|
"loading": "Chargement du planning…",
|
|
"error": "Impossible de charger le planning, réessayez plus tard",
|
|
"empty": "Aucun planning pour cette semaine.",
|
|
"table": {
|
|
"day": "Jour",
|
|
"meal": "Repas",
|
|
"recipe": "Recette"
|
|
}
|
|
},
|
|
"recipes": {
|
|
"title": "Recettes",
|
|
"comingSoon": "Cette section arrive bientôt."
|
|
},
|
|
"shoppingList": {
|
|
"title": "Liste de courses",
|
|
"comingSoon": "Cette section arrive bientôt."
|
|
},
|
|
"household": {
|
|
"title": "Foyer & profil",
|
|
"form": {
|
|
"nameLabel": "Nom du foyer",
|
|
"dietLabel": "Régime alimentaire",
|
|
"dietNone": "Aucun régime particulier",
|
|
"allergiesLabel": "Allergies",
|
|
"intolerancesLabel": "Intolérances",
|
|
"saving": "Enregistrement…",
|
|
"saved": "Enregistré ✓"
|
|
}
|
|
}
|
|
}
|