feat(recipes): barre de recherche commune à tous les onglets de sources (#133) #140

Merged
kyuno merged 1 commit from feat/common-source-search into main 2026-09-09 19:18:39 +02:00
Owner

Contexte

Closes #133 (puce 6 de #3). Chaque onglet de source rendait son propre champ recherche (RecipeSourcesPanel, son search/debouncedSearch interne), et le panneau est remonté (key={sourceKey}) à chaque changement de source → la requête tapée était perdue en passant d'une source à une autre.

Changements

RecipesPage — le champ recherche est rendu en permanence (plus de condition activeSourceKey === null). search/debouncedSearch étaient déjà là pour les onglets réels ; debouncedSearch est maintenant passé en prop à RecipeSourcesPanel.

RecipeSourcesPanel — plus de useState de recherche, plus d'<input>, plus d'effet de debounce internes. Nouvelle prop debouncedSearch: string ; l'effet de browse (et le préchargement, et handleLoadMore) en dépendent. Le key={sourceKey} reste (il remonte la liste + le préchargement, ce qui est voulu) — le terme, lui, vit au-dessus. Le panneau ne rend plus que .recipes-page__catalog (liste + preview) ; l'ancien <div class="recipes-page__header--sources"> disparaît.

RecipePickerDialog — même logique : le champ recherche sort du bloc activeSourceKey === null (les filtres ingrédients/régimes/foyer y restent, ils ne s'appliquent qu'aux onglets en base), debouncedSearch est passé au panneau. Le dialogue avait déjà son propre search/debouncedSearch.

Nettoyage — .recipes-page__header--sources supprimé de recipes.scss ; clé i18n morte recipes.sources.searchPlaceholder retirée ; specs/frontend-architecture.md mis à jour (recherche portée par la page).

Tests

recipe-sources.feature — nouveau scénario « Keeps the search term when switching between source tabs » : deux sources activées, on tape « poulet » sur l'onglet TheMealDB, on bascule sur Marmiton → le champ garde « poulet » et le browse de Marmiton part avec query=poulet.

Vérification locale

pnpm lint ✓ · pnpm build ✓ · Cypress : recipe-sources.feature 8/8 (dont le nouveau), régression recipes.feature 5/5, recipes.cy.ts 12/12, planning.feature 3/3.

🤖 Generated with Claude Code

## Contexte `Closes #133` (puce 6 de #3). Chaque onglet de source rendait **son propre** champ recherche (`RecipeSourcesPanel`, son `search`/`debouncedSearch` interne), et le panneau est remonté (`key={sourceKey}`) à chaque changement de source → la requête tapée était perdue en passant d'une source à une autre. ## Changements **`RecipesPage`** — le champ recherche est rendu **en permanence** (plus de condition `activeSourceKey === null`). `search`/`debouncedSearch` étaient déjà là pour les onglets réels ; `debouncedSearch` est maintenant passé en prop à `RecipeSourcesPanel`. **`RecipeSourcesPanel`** — plus de `useState` de recherche, plus d'`<input>`, plus d'effet de debounce internes. Nouvelle prop `debouncedSearch: string` ; l'effet de `browse` (et le préchargement, et `handleLoadMore`) en dépendent. Le `key={sourceKey}` reste (il remonte la liste + le préchargement, ce qui est voulu) — le terme, lui, vit au-dessus. Le panneau ne rend plus que `.recipes-page__catalog` (liste + preview) ; l'ancien `<div class="recipes-page__header--sources">` disparaît. **`RecipePickerDialog`** — même logique : le champ recherche sort du bloc `activeSourceKey === null` (les filtres ingrédients/régimes/foyer y restent, ils ne s'appliquent qu'aux onglets en base), `debouncedSearch` est passé au panneau. Le dialogue avait déjà son propre `search`/`debouncedSearch`. **Nettoyage** — `.recipes-page__header--sources` supprimé de `recipes.scss` ; clé i18n morte `recipes.sources.searchPlaceholder` retirée ; `specs/frontend-architecture.md` mis à jour (recherche portée par la page). ## Tests `recipe-sources.feature` — nouveau scénario **« Keeps the search term when switching between source tabs »** : deux sources activées, on tape « poulet » sur l'onglet TheMealDB, on bascule sur Marmiton → le champ garde « poulet » et le `browse` de Marmiton part avec `query=poulet`. ## Vérification locale `pnpm lint` ✓ · `pnpm build` ✓ · Cypress : `recipe-sources.feature` 8/8 (dont le nouveau), régression `recipes.feature` 5/5, `recipes.cy.ts` 12/12, `planning.feature` 3/3. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
kyuno added 1 commit 2026-09-09 17:10:36 +02:00
feat(recipes): barre de recherche commune à tous les onglets de sources (#133)
All checks were successful
CI / lint (push) Successful in 3m39s
CI / build (push) Successful in 3m32s
CI / intent-service-test (push) Successful in 5m51s
CI / e2e (push) Successful in 8m32s
CI / test (push) Successful in 22m26s
CI / build-android (push) Has been skipped
51b7b8eec3
Avant : chaque onglet de source rendait son propre champ recherche, avec
son propre state, et `RecipeSourcesPanel` est remonté (`key={sourceKey}`)
à chaque changement de source — la requête tapée était donc perdue en
passant d'une source à une autre.

Maintenant : un seul champ, dans l'en-tête de `RecipesPage`. `search` /
`debouncedSearch` (déjà présents pour les onglets réels) sont rendus en
permanence et `debouncedSearch` est passé en prop à `RecipeSourcesPanel`,
qui n'a plus ni `useState` de recherche, ni `<input>`, ni effet de
debounce internes — son effet de `browse` dépend de la prop. La requête
survit donc au changement de source (le `key` remonte toujours la liste +
le préchargement, mais le terme vit au-dessus), et elle est commune aux
onglets réels comme aux sources.

`RecipePickerDialog` : même chose — le champ recherche sort du bloc de
filtres `activeSourceKey === null` (les filtres ingrédients/régimes/foyer
y restent, ils ne concernent que les onglets en base) et `debouncedSearch`
est passé au panneau.

- SCSS : `.recipes-page__header--sources` supprimé (le panneau n'a plus
  d'en-tête). Clé i18n morte `recipes.sources.searchPlaceholder` retirée.
- `specs/frontend-architecture.md` : recherche au niveau page.

Tests : `recipe-sources.feature` — nouveau scénario « la requête est
conservée en changeant d'onglet de source » (tape « poulet » sur TheMealDB,
bascule sur Marmiton, le champ garde « poulet » et Marmiton est interrogé
avec `query=poulet`). `pnpm lint` / `pnpm build` verts ; Cypress local :
recipe-sources 8/8, recipes 5/5, recipes.cy 12/12, planning 3/3.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
kyuno merged commit 0c4e8d089c into main 2026-09-09 19:18:39 +02:00
Sign in to join this conversation.
No reviewers
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#140
No description provided.