Sélection de recettes : barre de recherche commune à toutes les sources #133
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
Origine : ticket #3, puce 6 — « Dans la sélection de recettes, il faut faire en sorte que la barre de recherche soit commune à toutes les sources ».
Le catalogue (
RecipesPage,/recettes) a un onglet par source activée du foyer, en plus de Favoris/Perso/Foyer/Publique (RecipeTabs, RecipeTabs.tsx). Aujourd'hui :RecipesPagea son propre champ recherche (search/debouncedSearch) affiché uniquement pour les onglets réels (activeSourceKey === null, RecipesPage.tsx:182-190).RecipeSourcesPanelqui rend son propre champ recherche, avec son propresearch/debouncedSearch(RecipeSourcesPanel.tsx:85-86, :298-306).RecipeSourcesPanelest remonté à chaque changement d'onglet source (key={activeSourceKey}, RecipesPage.tsx:202-204) ⇒ la requête tapée est perdue dès qu'on passe d'une source à une autre (ou d'un onglet réel à une source).Comportement souhaité
Une seule barre de recherche, dans l'en-tête de
RecipesPage, dont la valeur persiste quand on change d'onglet source (et idéalement entre onglets réels et sources). Taper « poulet » puis basculer de TheMealDB à Marmiton garde « poulet » et relance la recherche sur la nouvelle source.Conception proposée
Remonter l'état de recherche dans
RecipesPageet le passer en props àRecipeSourcesPanelau lieu qu'il le possède :RecipesPage: rendre le champ recherche toujours (retirer la conditionactiveSourceKey === null, RecipesPage.tsx:182).search/debouncedSearchdéjà présents (RecipesPage.tsx:77-89).RecipeSourcesPanel:search/debouncedSearchdeviennent des props ; supprimer leuseState+ l'<input>+ leuseEffectde debounce internes (RecipeSourcesPanel.tsx:85-86, :155-158) ; l'effet de fetch dépend désormais de la prop (RecipeSourcesPanel.tsx:160-181). Lekey={activeSourceKey}peut rester (remonte la liste/le prefetch, ce qui est voulu) — la recherche vit maintenant au-dessus.listRecipes({ search })). Cohérent avec « commune ». Voir « Points à trancher » si on veut garder réels/sources séparés.?search=deep-link (RecipesPage.tsx:64-66) : inchangé, il seed déjàsearch..recipes-page__header--sources(recipes.scss:367-369) n'a plus de champ à styler ; l'en-tête unique deRecipesPagesert pour tous les onglets.Découpage proposé
Une PR — changement petit et localisé à 2 fichiers.
Tests (obligatoires, cf.
specs/dev-conventions.md)recipe-sources.feature: taper une requête sur un onglet source, basculer vers un autre onglet source ⇒ la requête est conservée et la liste de la nouvelle source est filtrée ; basculer réel ↔ source conserve aussi ; effacer la requête recharge la liste complète. MockGET /sources/:key/browseen vérifiant le paramquery.RecipeSourcesPanel(lekeyde remontée est conservé).Documentation à mettre à jour
specs/frontend-architecture.md— section catalogue recettes / onglets sources : la recherche est au niveau page, pas par panneau.Points restant à trancher en revue
key={activeSourceKey}surRecipeSourcesPanel(remonte liste + prefetch au changement de source, la recherche restant portée au-dessus) — a priori oui, rien à changer là.debouncedSearchportée parRecipesPagesert les deux chemins (300 ms, déjà la même constante des deux côtés).🤖 Filed by Claude Code
Implémenté par la PR #140, mergée dans
main(0c4e8d0). Les 6 jobs CI étaient verts. Barre de recherche remontée dansRecipesPage/RecipePickerDialoget passée en prop àRecipeSourcesPanel; le terme persiste désormais au changement d'onglet source.