import { Handlers, PageProps } from "$fresh/server.ts"; import { IngredientsList } from "@islands/IngredientsList.tsx"; import { MainLayout } from "@components/layouts/main.tsx"; import Counter from "@islands/Counter.tsx"; import { Signal, useSignal } from "@preact/signals"; import { getRecipe, Recipe } from "@lib/resource/recipes.ts"; import { RedirectSearchHandler } from "@islands/Search.tsx"; import { KMenu } from "@islands/KMenu.tsx"; import PageHero from "@components/PageHero.tsx"; import { Star } from "@components/Stars.tsx"; import { renderMarkdown } from "@lib/documents.ts"; export const handler: Handlers<{ recipe: Recipe; session: unknown } | null> = { async GET(_, ctx) { try { const recipe = await getRecipe(ctx.params.name); if (!recipe) { return ctx.renderNotFound(); } return ctx.render({ recipe, session: ctx.state.session }); } catch (_e) { return ctx.renderNotFound(); } }, }; function isValidRecipe(recipe: Recipe | null) { return recipe?.ingredients?.length && recipe?.instructions?.length && recipe.name?.length; } function ValidRecipe({ recipe, amount, portion, }: { recipe: Recipe; amount: Signal; portion: number }) { return ( <>

Ingredients

{portion && }

Preparation

    {recipe.instructions && (recipe.instructions.map((instruction) => { return (
  1. ); }))}
); } export default function Greet( props: PageProps<{ recipe: Recipe; session: Record }>, ) { const { recipe, session } = props.data; const portion = recipe.meta?.portion; const amount = useSignal(portion || 1); const subline = [ recipe?.meta?.time && `Duration ${recipe.meta.time}`, ].filter(Boolean) as string[]; return ( ${recipe.name}`} context={recipe} > {session && ( )} {recipe.name} {recipe.meta?.rating && }
{isValidRecipe(recipe) ? ( ) : (
)}
); }