- Zone dangereuse (compte) : le bouton "Supprimer mon compte" est rouge.
- Pages préférences/paramétrage : contenu centré et élargi (32rem -> 56rem)
au lieu de coller à gauche sur un écran large.
- Page recettes : l'onglet "Favoris" est sélectionné par défaut.
- Ajout de apps/web/cypress/e2e/recipes.cy.ts (onglets, recherche, sélection
master-detail, favori, suppression, lien nouvelle recette).
- Catalogue de référence (ingrédients/régimes/allergènes) : la colonne
`name` (le libellé français, utilisé comme clé unique) devient `key`, un
slug stable et opaque au sens produit (ex. "vegetarien", "boeuf_hache").
Le libellé lui-même déménage entièrement côté client, dans
apps/web/src/locales/fr/translation.json sous le namespace `catalog.*`,
résolu via `t(\`catalog.ingredients.${key}\`)` etc. — même schéma que
IngredientCategory/IngredientSubcategory. Migration Prisma
(rename + backfill des ~456 lignes déjà seedées), seed/service/tests API
et composants web mis à jour en conséquence.
- apps/api/src/utils/slugify.ts + scripts/generate-catalog-i18n.ts
(regénère le fichier de traduction depuis reference-seed-data.ts).
- 102 tests Mocha + 32 scénarios Cucumber passent contre la base migrée.
Note : cypress run plante dans cet environnement (le processus GPU
Chromium/Electron crash même headless, indépendamment des flags) — les
recipes.cy.ts n'ont pas pu être exécutés ici ; vérifiés par lecture du code
source des composants visés et par un passage manuel dans le navigateur de
prévisualisation.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
27 lines
923 B
TypeScript
27 lines
923 B
TypeScript
import type { DietView } from "@batch-cooking/shared";
|
|
import { useTranslation } from "react-i18next";
|
|
import "./recipes.scss";
|
|
|
|
/**
|
|
* A row of diet-regime pills — the "associated regime" reminder tagged on a
|
|
* recipe (`RecipeSummaryView.diets`/`RecipeView.diets`, manually chosen by
|
|
* the author, see `RecipeFormPage`). Uses `--color-tag` (turmeric,
|
|
* "category/classification tags" per `_theme.scss`) — never
|
|
* `--color-allergen`, to stay visually distinct from a safety warning.
|
|
* Renders nothing for an empty list, same convention as `AllergenBadges`.
|
|
*/
|
|
export function DietBadges({ diets }: { diets: DietView[] }) {
|
|
const { t } = useTranslation();
|
|
if (diets.length === 0) {
|
|
return null;
|
|
}
|
|
return (
|
|
<ul className="diet-badges">
|
|
{diets.map((diet) => (
|
|
<li key={diet.id} className="diet-badge">
|
|
{t(`catalog.diets.${diet.key}`)}
|
|
</li>
|
|
))}
|
|
</ul>
|
|
);
|
|
}
|