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) => ( +