import { Text } from '@/aesthetics/Text'; import { font, spacing, useColors } from '@/aesthetics/styles'; import { useStrings } from '@/common/hooks/useStrings'; import { usePreferences } from '@/profile/preferences'; import { useProfile } from '@/profile/ProfileProvider'; import { useFoodRecommendations } from '@/see-log/recommendation/useFoodRecommendations'; import { useRouter } from 'expo-router'; import { ScrollView, StyleSheet, View } from 'react-native'; import { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context'; import { EmptyState, PendingBanner, Section } from './DashboardUI'; import { DayBarScroll } from './DayBarScroll'; import { FoodLogCard } from './FoodLogCard'; import { FoodRecoCard } from './FoodRecoCard'; import { NutrientBreakdownCard } from './NutrientBreakdownCard'; import { NutritionScoreCard } from './NutritionScoreCard'; import { AddLogCard } from '@/add-log/memo-log-editor/AddLogCard'; import { useFoodLogs } from './useFoodLogs'; import { useFoodReview } from './useFoodReview'; export function DashboardScreen() { const c = useColors(); const strings = useStrings(); const insets = useSafeAreaInsets(); const router = useRouter(); const { profile } = useProfile(); const { enabledCastleFeatures } = usePreferences(); const { logs: allLogs } = useFoodLogs(); const { selectedDate, setSelectedDate, displayMode, setDisplayMode, sortMode, setSortMode, dayScores, loadMoreFutureDays, consumed, targets, logs, nutritionScore, pendingCount, } = useFoodReview(allLogs); const { ingredients: recommendedIngredients, foods: recommendedFoods, loading: recommendationsLoading, hasGenerated, isEligibleForReport, canGenerate, generate, } = useFoodRecommendations(allLogs, selectedDate, profile); return ( {strings.common.appName} {strings.common.tagline}
{pendingCount > 0 && } {logs.length > 0 ? ( {logs.map(log => ( router.push(`/see-log/${log.id}`)} /> ))} ) : ( )}
{isEligibleForReport && (
)} {enabledCastleFeatures.includes('logAnything') && (
)}
); } const styles = StyleSheet.create({ container: { flex: 1, }, scroll: { flex: 1, }, scrollContent: { paddingBottom: 120, }, header: { paddingHorizontal: spacing.xl, paddingTop: spacing.xxl, paddingBottom: spacing.lg, }, headerTitle: { fontSize: font.display, letterSpacing: -0.5, }, headerTagline: { fontSize: font.xs, letterSpacing: 2, textTransform: 'uppercase', marginTop: spacing.xs, }, content: { paddingHorizontal: spacing.xl, paddingTop: spacing.xl, gap: spacing.section, }, logsList: { gap: spacing.lg, }, });