feat: show rating
This commit is contained in:
		
							
								
								
									
										78
									
								
								islands/IngredientsList.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								islands/IngredientsList.tsx
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | ||||
| import { Signal } from "@preact/signals"; | ||||
| import type { | ||||
|   Ingredient, | ||||
|   IngredientGroup, | ||||
|   Ingredients, | ||||
| } from "../lib/recipes.ts"; | ||||
| import { FunctionalComponent } from "preact"; | ||||
|  | ||||
| type IngredientsProps = { | ||||
|   ingredients: Ingredients; | ||||
| }; | ||||
|  | ||||
| const Ingredient = ( | ||||
|   { ingredient, amount, key = "", portion = 1 }: { | ||||
|     ingredient: Ingredient; | ||||
|     amount: Signal<number>; | ||||
|     key?: string | number; | ||||
|     portion?: number; | ||||
|   }, | ||||
| ) => { | ||||
|   const { type, amount: _amount, unit } = ingredient; | ||||
|  | ||||
|   const finalAmount = (typeof _amount === "number" && amount) | ||||
|     ? (_amount / portion) * (amount?.value || 1) | ||||
|     : ""; | ||||
|  | ||||
|   return ( | ||||
|     <tr key={key}> | ||||
|       <td class="pr-4 py-2"> | ||||
|         {finalAmount + (typeof unit === "string" ? unit : "")} | ||||
|       </td> | ||||
|       <td class="px-4 py-2">{type}</td> | ||||
|     </tr> | ||||
|   ); | ||||
| }; | ||||
|  | ||||
| export const IngredientsList: FunctionalComponent< | ||||
|   { ingredients: Ingredients; amount: Signal<number>; portion?: number } | ||||
| > = ( | ||||
|   { ingredients, amount, portion }, | ||||
| ) => { | ||||
|   return ( | ||||
|     <table class="w-full border-collapse table-auto"> | ||||
|       <tbody> | ||||
|         {ingredients.map((item, index) => { | ||||
|           if ("name" in item) { | ||||
|             // Render IngredientGroup | ||||
|             const { name, ingredients: groupIngredients } = | ||||
|               item as IngredientGroup; | ||||
|  | ||||
|             return ( | ||||
|               <> | ||||
|                 <tr key={index}> | ||||
|                   <td colSpan={3} class="pr-4 py-2 font-italic">{name}</td> | ||||
|                 </tr> | ||||
|                 {groupIngredients.map((item, index) => { | ||||
|                   // Render Ingredient | ||||
|                   return ( | ||||
|                     <Ingredient | ||||
|                       key={index} | ||||
|                       ingredient={item} | ||||
|                       amount={amount} | ||||
|                       portion={portion} | ||||
|                     /> | ||||
|                   ); | ||||
|                 })} | ||||
|               </> | ||||
|             ); | ||||
|           } else { | ||||
|             return ( | ||||
|               <Ingredient ingredient={item} amount={amount} portion={portion} /> | ||||
|             ); | ||||
|           } | ||||
|         })} | ||||
|       </tbody> | ||||
|     </table> | ||||
|   ); | ||||
| }; | ||||
		Reference in New Issue
	
	Block a user