From 242e09d59b9d42ae632ba407ca25a49ff8142e09 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 19 Aug 2026 00:20:30 +0000 Subject: [PATCH] fix(recept): bakverk ur mellanmal + sub-kategorier, bladdra pa forstasidan, relevantare forslag Kategorisering (din notis - bakverk hor till Baka, inte mellanmal): - Sub-typer bread/bun/pie/cake/cookie i RECIPE_TAGS. - Bullar/kakor/pajer/chokladbollar -> dessert (inte snack) + sub-tagg; brod -> breakfast. Befintliga lussekatter/saffransbullar taggas 'bun'. - Browse: sub-chips under Baka (Brod/Bullar/Paj/Tartor & kakor/Smakakor). Bladdra pa forstasidan (din onskan): - Kategori-genvagar pa 'Vad ska vi ata' -> oppnar bladdraren forvald (/recipes?cat=). recipes.tsx laser ?cat=. Relevantare 'Vad ska vi ata' (snurrar samma triviala): - view=pantry -> view=default (tackning vager tungt men inte allenaradande, ger variation), limit 15 -> 30 (storre pool sa 'Visa fler' upprepar senare). Felsokning inkopslista: - Tydligare felmeddelande (HTTP-status vs natverksfel) sa root cause syns. Full typecheck 20/20, invariant-test gront. --- apps/mobile/src/app/(tabs)/index.tsx | 51 +++++++++++++++++-- apps/mobile/src/app/recipe/[id].tsx | 19 +++++-- apps/mobile/src/app/recipes.tsx | 47 +++++++++++++++-- .../database/src/seed/data/extra-recipes.ts | 30 +++++------ .../src/seed/data/verified-recipes.ts | 4 +- packages/shared-types/src/enums.ts | 7 +++ 6 files changed, 129 insertions(+), 29 deletions(-) diff --git a/apps/mobile/src/app/(tabs)/index.tsx b/apps/mobile/src/app/(tabs)/index.tsx index 9f6446f..99b0849 100644 --- a/apps/mobile/src/app/(tabs)/index.tsx +++ b/apps/mobile/src/app/(tabs)/index.tsx @@ -50,6 +50,22 @@ interface WhatToEatResponse { context: { activeHolidays: string[]; remainingKcal: number; remainingProteinG: number }; } +// Bläddra-genvägar direkt på förstasidan (öppnar recept-bläddraren förvald på +// kategorin). Etiketter återanvänder myday.mealType.* där de finns. +const BROWSE_CATS: ReadonlyArray<{ + key: string; + labelKey: string | null; + label?: string; + glyph: string; +}> = [ + { key: "breakfast", labelKey: "myday.mealType.breakfast", glyph: "🥣" }, + { key: "lunch", labelKey: "myday.mealType.lunch", glyph: "🥗" }, + { key: "dinner", labelKey: "myday.mealType.dinner", glyph: "🍽️" }, + { key: "snack", labelKey: "myday.mealType.snack", glyph: "🍎" }, + { key: "dessert", labelKey: "myday.mealType.dessert", glyph: "🍰" }, + { key: "baking", labelKey: null, label: "Baka", glyph: "🥐" }, +]; + export default function WhatToEatScreen() { const [craving, setCraving] = useState(""); const [submittedCraving, setSubmittedCraving] = useState(""); @@ -59,17 +75,24 @@ export default function WhatToEatScreen() { const hour = new Date().getHours(); const currentMeal = hour < 10 ? "breakfast" : hour < 14 ? "lunch" : "dinner"; + // view=default ger en balanserad rankning (täckning väger tungt men inte + // allenarådande som i pantry-vyn) → mer varierade, relevanta förslag i stället + // för samma triviala högtäckningsrätter. Större pool (30) så "Visa fler" + // bläddrar längre innan den upprepar. const query = useQuery({ queryKey: ["what-to-eat", submittedCraving, currentMeal], queryFn: () => api( - `/v1/recommendations/what-to-eat?limit=15&view=pantry&mealType=${currentMeal}${submittedCraving ? `&craving=${encodeURIComponent(submittedCraving)}` : ""}`, + `/v1/recommendations/what-to-eat?limit=30&view=default&mealType=${currentMeal}${submittedCraving ? `&craving=${encodeURIComponent(submittedCraving)}` : ""}`, ), }); const allRecs = query.data?.recommendations ?? []; const shownRecs: Recommendation[] = allRecs.length - ? Array.from({ length: Math.min(5, allRecs.length) }, (_, i) => allRecs[(page * 5 + i) % allRecs.length]).filter((r): r is Recommendation => r != null) + ? Array.from( + { length: Math.min(5, allRecs.length) }, + (_, i) => allRecs[(page * 5 + i) % allRecs.length], + ).filter((r): r is Recommendation => r != null) : []; useEffect(() => { @@ -98,13 +121,30 @@ export default function WhatToEatScreen() { placeholder={t("wte.cravingPlaceholder")} value={craving} onChangeText={setCraving} - onSubmitEditing={() => { setSubmittedCraving(craving); setPage(0); }} + onSubmitEditing={() => { + setSubmittedCraving(craving); + setPage(0); + }} returnKeyType="search" /> + {/* Bläddra bland recept per kategori direkt från förstasidan. */} + + {BROWSE_CATS.map((c) => ( +