Réordonner le wizard d'inscription : compte → préférences → foyer → sources #129

Closed
opened 2026-09-09 13:18:17 +02:00 by kyuno · 0 comments
Owner

Contexte

Origine : ticket #3, puce 2 — « Changer l'ordre du wizard d'inscription : 1 Compte, 2 préférence, 3 foyer, 4 (si création foyer) sources ».

Ordre actuel (vérifié dans App.tsx:133-164 + chaque page) :

Étape Route Composant Enchaîne sur Compteur affiché
Compte /signup SignupPage /onboarding/regime (SignupPage.tsx:55) —
1 /onboarding/regime OnboardingDietPage /onboarding/foyer « Étape 1 sur 3 » (OnboardingDietPage.tsx:68)
2 /onboarding/foyer OnboardingHouseholdPage /onboarding/sources si foyer créé ou rejoint, sinon /onboarding/allergenes (OnboardingHouseholdPage.tsx:58-60) « Étape 2 sur 3 »
3 (cond.) /onboarding/sources OnboardingSourcesPage /onboarding/allergenes « Étape 3 sur 4 » (OnboardingSourcesPage.tsx:78)
Dernière /onboarding/allergenes OnboardingAllergensPage / « 3 sur 3 » ou « 4 sur 4 » via un getCurrentHouse() au montage (OnboardingAllergensPage.tsx:37-55)

Donc aujourd'hui : compte → régime → foyer → [sources] → allergènes, et /onboarding/sources apparaît pour tout foyer (créé ou rejoint).

Comportement souhaité

compte → préférences (régime + allergènes) → foyer → sources (uniquement si le foyer vient d'être créé)

  • « Préférences » = régime et allergènes regroupés comme étape 2 (2 sous-écrans successifs, ou 1 seul écran — à trancher). Les allergènes ne sont plus le dernier écran.
  • /onboarding/sources devient le dernier écran, et seulement si l'utilisateur a créé un foyer (rejoindre un foyer existant ⇒ ses sources sont déjà configurées, on saute).
  • Fin de wizard = après foyer (si passé/rejoint) ou après sources (si créé) → void navigate("/").

Fichiers à toucher

  • apps/web/src/App.tsx — ordre des 4 blocs <Route path="/onboarding/..."> + commentaire de doc du groupe (App.tsx:56-61).
  • SignupPage.tsx — navigate vers la 1re étape (/onboarding/regime conservé, ou renommé).
  • OnboardingDietPage.tsx — enchaîne sur allergènes (plus foyer) ; compteur.
  • OnboardingAllergensPage.tsx — enchaîne sur /onboarding/foyer (plus /) ; supprime le getCurrentHouse() + totalSteps dynamique (OnboardingAllergensPage.tsx:32-59), devenu inutile.
  • OnboardingHouseholdPage.tsx — goToNextStep route vers /onboarding/sources seulement sur le chemin « création » (pas « rejoint »), sinon /. CreateHouseholdForm/JoinHouseholdForm/SkipButton (OnboardingHouseholdPage.tsx:90-177) doivent transmettre « créé vs rejoint » à onDone.
  • OnboardingSourcesPage.tsx — dernier écran : void navigate("/") au submit et sur le court-circuit « aucune source » (OnboardingSourcesPage.tsx:43-53).
  • Compteurs d'étape — codés en dur page par page (t("onboarding.step", { current, total })), aucun état de wizard partagé (voir le commentaire de OnboardingAllergensPage.tsx:20-25). Un réordonnancement les casse tous ⇒ soit les recalculer à la main, soit (recommandé) introduire un petit module partagé onboarding-steps.ts qui définit la séquence et dérive current/total selon le chemin (foyer créé / rejoint / passé).
  • i18n apps/web/src/locales/fr/translation.json onboarding.* — titres regroupés si « Préférences » devient un seul écran.

Découpage proposé

Une PR — surtout du câblage de navigation. Si trop gros : (1) séquence + compteurs partagés, (2) réordonnancement effectif + condition « création only » sur les sources.

Tests (obligatoires, cf. specs/dev-conventions.md)

  • Cypress e2e (onboarding.feature / onboarding.cy.ts) : parcours compte → régime → allergènes → foyer créé → sources → home ; parcours foyer rejoint → home (pas de sources) ; parcours foyer passé → home. Compteurs corrects sur chaque chemin.
  • Retour navigateur (revisiter une étape déjà franchie) — les gardes getCurrentHouse() défensives existantes (OnboardingHouseholdPage.tsx:32-50) restent valides.

Documentation à mettre à jour

  • specs/frontend-architecture.md — description du wizard d'onboarding (ordre, condition sources).
  • Commentaire de doc du groupe /onboarding/* dans App.tsx.

Points restant à trancher en revue

  • « Préférences » = 2 sous-écrans (régime puis allergènes, rapprochés) ou 1 seul écran fusionné ? (2 sous-écrans = moins de refonte, recommandé.)
  • Garder les routes /onboarding/regime + /onboarding/allergenes telles quelles (juste réordonnées) ou renommer en /onboarding/preferences/* ? (garder = zéro casse de lien.)
  • « Créé » vs « rejoint » : confirmer qu'un foyer rejoint n'a jamais besoin d'un passage sources pour ce membre.

🤖 Filed by Claude Code

## Contexte Origine : ticket #3, puce 2 — *« Changer l'ordre du wizard d'inscription : 1 Compte, 2 préférence, 3 foyer, 4 (si création foyer) sources »*. Ordre **actuel** (vérifié dans [App.tsx:133-164](apps/web/src/App.tsx#L133-L164) + chaque page) : | Étape | Route | Composant | Enchaîne sur | Compteur affiché | |---|---|---|---|---| | Compte | `/signup` | `SignupPage` | `/onboarding/regime` ([SignupPage.tsx:55](apps/web/src/pages/auth/SignupPage.tsx#L55)) | — | | 1 | `/onboarding/regime` | `OnboardingDietPage` | `/onboarding/foyer` | « Étape 1 sur 3 » ([OnboardingDietPage.tsx:68](apps/web/src/pages/onboarding/OnboardingDietPage.tsx#L68)) | | 2 | `/onboarding/foyer` | `OnboardingHouseholdPage` | `/onboarding/sources` si foyer **créé _ou_ rejoint**, sinon `/onboarding/allergenes` ([OnboardingHouseholdPage.tsx:58-60](apps/web/src/pages/onboarding/OnboardingHouseholdPage.tsx#L58-L60)) | « Étape 2 sur 3 » | | 3 (cond.) | `/onboarding/sources` | `OnboardingSourcesPage` | `/onboarding/allergenes` | « Étape 3 sur 4 » ([OnboardingSourcesPage.tsx:78](apps/web/src/pages/onboarding/OnboardingSourcesPage.tsx#L78)) | | Dernière | `/onboarding/allergenes` | `OnboardingAllergensPage` | `/` | « 3 sur 3 » ou « 4 sur 4 » via un `getCurrentHouse()` au montage ([OnboardingAllergensPage.tsx:37-55](apps/web/src/pages/onboarding/OnboardingAllergensPage.tsx#L37-L55)) | Donc aujourd'hui : **compte → régime → foyer → [sources] → allergènes**, et `/onboarding/sources` apparaît pour **tout** foyer (créé ou rejoint). ## Comportement souhaité **compte → préférences (régime + allergènes) → foyer → sources (uniquement si le foyer vient d'être _créé_)** - « Préférences » = régime **et** allergènes regroupés comme étape 2 (2 sous-écrans successifs, ou 1 seul écran — à trancher). Les allergènes ne sont plus le dernier écran. - `/onboarding/sources` devient le **dernier** écran, et seulement si l'utilisateur a **créé** un foyer (rejoindre un foyer existant ⇒ ses sources sont déjà configurées, on saute). - Fin de wizard = après foyer (si passé/rejoint) ou après sources (si créé) → `void navigate("/")`. ## Fichiers à toucher - **`apps/web/src/App.tsx`** — ordre des 4 blocs `<Route path="/onboarding/...">` + commentaire de doc du groupe ([App.tsx:56-61](apps/web/src/App.tsx#L56-L61)). - **`SignupPage.tsx`** — `navigate` vers la 1re étape (`/onboarding/regime` conservé, ou renommé). - **`OnboardingDietPage.tsx`** — enchaîne sur allergènes (plus foyer) ; compteur. - **`OnboardingAllergensPage.tsx`** — enchaîne sur `/onboarding/foyer` (plus `/`) ; supprime le `getCurrentHouse()` + `totalSteps` dynamique ([OnboardingAllergensPage.tsx:32-59](apps/web/src/pages/onboarding/OnboardingAllergensPage.tsx#L32-L59)), devenu inutile. - **`OnboardingHouseholdPage.tsx`** — `goToNextStep` route vers `/onboarding/sources` **seulement** sur le chemin « création » (pas « rejoint »), sinon `/`. `CreateHouseholdForm`/`JoinHouseholdForm`/`SkipButton` ([OnboardingHouseholdPage.tsx:90-177](apps/web/src/pages/onboarding/OnboardingHouseholdPage.tsx#L90-L177)) doivent transmettre « créé vs rejoint » à `onDone`. - **`OnboardingSourcesPage.tsx`** — dernier écran : `void navigate("/")` au submit et sur le court-circuit « aucune source » ([OnboardingSourcesPage.tsx:43-53](apps/web/src/pages/onboarding/OnboardingSourcesPage.tsx#L43-L53)). - **Compteurs d'étape** — codés en dur page par page (`t("onboarding.step", { current, total })`), aucun état de wizard partagé (voir le commentaire de [OnboardingAllergensPage.tsx:20-25](apps/web/src/pages/onboarding/OnboardingAllergensPage.tsx#L20-L25)). Un réordonnancement les casse tous ⇒ soit les recalculer à la main, soit (recommandé) introduire un petit module partagé `onboarding-steps.ts` qui définit la séquence et dérive `current`/`total` selon le chemin (foyer créé / rejoint / passé). - i18n `apps/web/src/locales/fr/translation.json` `onboarding.*` — titres regroupés si « Préférences » devient un seul écran. ## Découpage proposé Une PR — surtout du câblage de navigation. Si trop gros : (1) séquence + compteurs partagés, (2) réordonnancement effectif + condition « création only » sur les sources. ## Tests (obligatoires, cf. `specs/dev-conventions.md`) - **Cypress e2e** (`onboarding.feature` / `onboarding.cy.ts`) : parcours **compte → régime → allergènes → foyer créé → sources → home** ; parcours **foyer rejoint → home** (pas de sources) ; parcours **foyer passé → home**. Compteurs corrects sur chaque chemin. - Retour navigateur (revisiter une étape déjà franchie) — les gardes `getCurrentHouse()` défensives existantes ([OnboardingHouseholdPage.tsx:32-50](apps/web/src/pages/onboarding/OnboardingHouseholdPage.tsx#L32-L50)) restent valides. ## Documentation à mettre à jour - `specs/frontend-architecture.md` — description du wizard d'onboarding (ordre, condition sources). - Commentaire de doc du groupe `/onboarding/*` dans `App.tsx`. ## Points restant à trancher en revue - « Préférences » = 2 sous-écrans (régime puis allergènes, rapprochés) ou 1 seul écran fusionné ? (2 sous-écrans = moins de refonte, recommandé.) - Garder les routes `/onboarding/regime` + `/onboarding/allergenes` telles quelles (juste réordonnées) ou renommer en `/onboarding/preferences/*` ? (garder = zéro casse de lien.) - « Créé » vs « rejoint » : confirmer qu'un foyer rejoint n'a jamais besoin d'un passage sources pour ce membre. --- 🤖 Filed by [Claude Code](https://claude.com/claude-code)
kyuno added the
enhancement
planned
labels 2026-09-09 13:18:17 +02:00
kyuno added the
Medium
label 2026-09-09 13:24:30 +02:00
kyuno closed this issue 2026-09-09 16:59:52 +02:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: kyuno/batchCooking#129
No description provided.