all repos — momix @ main

A CLI tool to manage recipes for Thermomix

web/tsx/components.tsx (view raw)

 1import type { FC } from "hono/jsx";
 2
 3export const Message: FC<{ url: string }> = (props) => {
 4  const url = new URL(props.url);
 5  const msg = url.searchParams.get("msg");
 6  const error = url.searchParams.get("error");
 7  if (error) return <p class="message error">{error}</p>;
 8  else if (msg) return <p class="message">{msg}</p>;
 9  else return null;
10};
11
12export const AddRecipe: FC = () => {
13  return (
14    <form method="post" action="/add-recipe">
15      <h2>Ajouter une recette</h2>
16      <p>
17        Découvrez des recettes sur{" "}
18        <a href="https://cookidoo.fr/search/fr-FR?languages=fr" target="_blank">
19          Cookidoo
20        </a>
21        .
22      </p>
23      <label style="display:flex;width:100%;">
24        <input
25          type="text"
26          name="recipeId"
27          placeholder="URL ou ID de la recette Cookidoo"
28          style="flex-grow:1;"
29        />
30        <button type="submit">Ajouter</button>
31      </label>
32    </form>
33  );
34};
35
36export const RecipesList: FC<{ recipes: Recipe[] }> = (props) => {
37  return (
38    <form method="post" action="/add-grocery-list">
39      <h2>Liste des recettes</h2>
40      <ul>
41        {props.recipes.map((recipe) => (
42          <li>
43            <input type="checkbox" name={`${recipe.id}`} />
44            <a href={recipe.url} target="_blank">
45              {recipe.name}
46            </a>
47          </li>
48        ))}
49      </ul>
50      <button type="submit">Créer une liste de course</button>
51    </form>
52  );
53};
54
55export const GroceryList: FC<{
56  recipes: Recipe[];
57  ingredients: GroceryItem[];
58}> = (props) => {
59  return (
60    <div>
61      <h2>Recettes:</h2>
62      <ul>
63        {props.recipes.map((recipe) => (
64          <li>{recipe.name}</li>
65        ))}
66      </ul>
67      <h2>Liste des ingrédients:</h2>
68      <ul>
69        {props.ingredients.map(({ name, quantity, unit }) => (
70          <li>
71            <input type="checkbox" />
72            <strong>{name}</strong>: {quantity} {unit}
73          </li>
74        ))}
75      </ul>
76    </div>
77  );
78};