batchCooking/apps/web/src/features/recipes
Nicolas 991f91bc0e feat(planning): ajouter au planning déclenche l'import si besoin (étape 4/4)
Dernière étape du plan « onglet Sources » : le sélecteur de recette du
planning (`RecipePickerDialog`) gagne l'onglet « Sources », jusqu'ici
volontairement exclu faute d'écran de revue à qui transmettre un item
choisi (voir étape 3, #47).

- Sélectionner un item déjà importé se comporte exactement comme
  choisir cette même recette depuis un onglet normal (résolue via
  `GET /recipes/:id`, direction vers l'étape « combien de portions ? »
  du dialogue, sans navigation).
- Sélectionner un item pas encore importé bascule vers l'écran de
  revue existant (`ImportRecipePage`), avec le créneau du planning
  porté par la query string (`?planningDate=&planningWeekDay=&planningMeal=`).
  Un import réussi y ajoute alors automatiquement la recette
  fraîchement créée à ce créneau (`POST /planning/items`, avec les
  portions du formulaire) avant de revenir sur le planning — plutôt que
  d'atterrir sur la page de la recette comme le fait un import « classique ».
- `RecipeSourcesPanel`/`SourceItemPreviewPanel` généralisés en
  conséquence : la première ne navigue plus elle-même vers la recette
  déjà importée (`onSelectImportedRecipe` renvoie l'id, chaque appelant
  décide), la seconde propage le créneau optionnel sur son lien
  d'import.

Aucun changement backend : `POST /sources/:sourceKey/import/:externalId`
et `POST /planning/items` existaient déjà et suffisent tels quels — une
fois la recette importée, `GET /sources/:sourceKey/browse` la marque
déjà `alreadyImported` automatiquement (logique déjà couverte par
`sources.test.ts`). 282 tests API toujours au vert, aucune régression.

Tests :
- Cypress : nouveau scénario Gherkin bout-en-bout
  (`cypress/e2e/planning.feature`/`planning.ts`) — ouvrir le
  sélecteur depuis un créneau vide, parcourir Sources, importer un
  item non résolu (ingrédient à compléter compris), vérifier que la
  requête d'ajout au planning porte bien le bon créneau/les bonnes
  portions, que la recette apparaît dans la bonne case de la grille
  après le retour sur "/", puis que rebrowser la source la marque
  désormais comme déjà importée.

Suite : plan « onglet Sources » terminé (étapes 1 à 4).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 17:42:43 +02:00
..
AllergenBadges.tsx chore(web): session de polish global — version, checkbox, danger zone, icônes (#20) 2026-08-18 20:52:12 +02:00
DietBadges.tsx chore(web): session de polish global — version, checkbox, danger zone, icônes (#20) 2026-08-18 20:52:12 +02:00
DietTagSelect.tsx chore(web): session de polish global — version, checkbox, danger zone, icônes (#20) 2026-08-18 20:52:12 +02:00
FavoriteStarButton.tsx chore(web): session de polish global — version, checkbox, danger zone, icônes (#20) 2026-08-18 20:52:12 +02:00
highlight-tech-steps.ts feat(recipes): surligne les tech steps détectés dans les étapes, avec tooltip 2026-08-20 14:46:15 +02:00
ingredient-icons.tsx refactor(catalog): authoring 100% anglais — uid camelCase, plus de français dans le code 2026-08-19 20:40:55 +02:00
IngredientPicker.tsx feat(recipes): flag les ingrédients faisables maison + suggestion de recherche 2026-08-19 19:09:39 +02:00
IngredientRow.tsx feat(recipes): catalogue de référence pour les unités d'ingrédients 2026-08-19 22:34:57 +02:00
RecipeDetailPanel.tsx feat(recipes): surligne les tech steps détectés dans les étapes, avec tooltip 2026-08-20 14:46:15 +02:00
recipes.scss feat(recipes): écran de revue et finalisation de l'import (étape 3/4) 2026-08-20 16:56:06 +02:00
RecipeSourcesPanel.tsx feat(planning): ajouter au planning déclenche l'import si besoin (étape 4/4) 2026-08-20 17:42:43 +02:00
RecipeTable.tsx feat(recipes): catalogue v2 - visibilité, favoris, régimes et catalogue d'ingrédients exhaustif 2026-08-18 09:29:11 +02:00
RecipeTabs.tsx feat(recipes): onglet Sources — parcourir les recettes externes (étape 2/4) 2026-08-20 16:14:20 +02:00
ReproducibleBadge.tsx feat(recipes): flag les ingrédients faisables maison + suggestion de recherche 2026-08-19 19:09:39 +02:00
SourceItemPreviewPanel.tsx feat(planning): ajouter au planning déclenche l'import si besoin (étape 4/4) 2026-08-20 17:42:43 +02:00
SourceItemTable.tsx feat(recipes): onglet Sources — parcourir les recettes externes (étape 2/4) 2026-08-20 16:14:20 +02:00
StepDescription.tsx feat(recipes): surligne les tech steps détectés dans les étapes, avec tooltip 2026-08-20 14:46:15 +02:00
StepListEditor.tsx chore(web): session de polish global — version, checkbox, danger zone, icônes (#20) 2026-08-18 20:52:12 +02:00