import { Signal } from "@preact/signals"; import type { Ingredient, IngredientGroup, Ingredients, } from "../lib/recipes.ts"; import { FunctionalComponent } from "preact"; function numberToString(num: number) { return (Math.floor(num * 4) / 4).toString(); } const Ingredient = ( { ingredient, amount, key = "", portion = 1 }: { ingredient: Ingredient; amount: Signal; key?: string | number; portion?: number; }, ) => { const { type, amount: _amount, unit } = ingredient; const finalAmount = (typeof _amount === "number" && amount) ? (_amount / portion) * (amount?.value || 1) : ""; return ( {numberToString(finalAmount || 0) + (typeof unit === "string" ? unit : "")} {type} ); }; export const IngredientsList: FunctionalComponent< { ingredients: Ingredients; amount: Signal; portion?: number } > = ( { ingredients, amount, portion }, ) => { return ( {ingredients.map((item, index) => { if ("name" in item) { // Render IngredientGroup const { name, ingredients: groupIngredients } = item as IngredientGroup; return ( <> {groupIngredients.map((item, index) => { // Render Ingredient return ( ); })} ); } else { return ( ); } })}
{name}
); };