// ============================================================================== // Author: Simon-Pierre Boucher // File: components/RestoCard.tsx // Desc: Carte de restaurant (grille de résultats) — même patron que la // ListingCard de Lou·Ka : prix en tête, badge de contexte de prix // TOUJOURS affiché (CLAUDE.md §6.2), source en pied de carte. // ============================================================================== import { Link } from "react-router-dom"; import { CONTEXT_SHORT, Restaurant, cuisineLabel, fmtPrice, sourceName, typeLabel, } from "../api"; import { FavButton } from "../favorites"; import { IcoPlate } from "./Icons"; export default function RestoCard({ r }: { r: Restaurant }) { const ms = r.menu_summary; const img = ms?.image || (r.images ?? [])[1] || null; // photo de plat d'abord const logo = (r.images ?? [])[0] || null; return (
{img ? ( {r.name} ) : logo ? (
{r.name}
) : (
)} {r.price_range && {r.price_range}} {r.ka_reco && ( Recommandé pour vous )} {ms && ( {CONTEXT_SHORT[ms.price_context] ?? ms.price_context} )}
{ms?.price_median != null ? ( <> {fmtPrice(ms.price_median)} plat médian ) : ( Menu à venir )}
{r.name}
{typeLabel(r.establishment_type)} {r.cuisines.slice(0, 2).map((c) => ( {cuisineLabel(c)} ))}
{r.city && {r.city}} {r.city && r.region && } {r.region && {r.region}}
{sourceName(r.source)} {ms && {ms.item_count} plats au menu}
); }