import { Ionicons } from "@expo/vector-icons"; import { router } from "expo-router"; import { useMemo, useState } from "react"; import { FlatList, Pressable, ScrollView, View } from "react-native"; import { useTranslation } from "react-i18next"; import { Badge } from "@/components/ui/Badge"; import { ActionTile, CategoryTile } from "@/components/ui/CategoryTile"; import { Card, Section } from "@/components/ui/Card"; import { ProductRow, ProductTile } from "@/components/ui/ProductCard"; import { Screen, TAB_BAR_INSET } from "@/components/ui/Screen"; import { SearchAction, SearchField } from "@/components/ui/SearchField"; import { TabTopBar } from "@/components/ui/TabTopBar"; import { Text } from "@/components/ui/Text"; import { products } from "@/lib/data/products"; import { categories, routes } from "@/lib/routes"; import { usePrescriptionStore } from "@/lib/stores/prescriptionStore"; import { colors, gutter, space } from "@/lib/theme"; export default function HomeScreen() { const { t } = useTranslation(); const [category, setCategory] = useState("medicines"); const prescriptions = usePrescriptionStore((s) => s.prescriptions); const filtered = useMemo( () => products.filter((p) => p.category === category), [category] ); const popular = useMemo( () => [...products] .filter((p) => p.badge === "bestseller" || p.rating >= 4.6) .slice(0, 6), [] ); const refillSoon = prescriptions.find((p) => { if (!p.lastFilledAt || !p.daysSupply) return false; const due = new Date(p.lastFilledAt); due.setDate(due.getDate() + p.daysSupply); const days = (due.getTime() - Date.now()) / (1000 * 60 * 60 * 24); return days <= 5; }); const pendingRx = prescriptions.find( (p) => p.status === "under_review" || p.status === "submitted" ); return ( {t("common.trustedTitle")} {t("common.trustedSubtitle")} router.push(routes.search)} trailing={ router.push(routes.rxScan)} /> } /> {(refillSoon || pendingRx) && ( router.push(routes.rxList)} style={{ marginTop: 14 }} > {refillSoon ? `${t("common.refillDue")}: ${refillSoon.medicineName}` : `Rx under review: ${pendingRx?.medicineName}`} Tap to manage prescriptions )} router.push(routes.rxScan)} /> router.push(routes.rxScan)} />
router.push(routes.shop)}> {categories.map((c) => ( setCategory(c.id)} /> ))}
router.push(routes.shop)}> p.badge === "sale" || p.compareAt).slice(0, 8)} keyExtractor={(item) => item.id} showsHorizontalScrollIndicator={false} ItemSeparatorComponent={() => } renderItem={({ item }) => } ListEmptyComponent={ item.id} showsHorizontalScrollIndicator={false} ItemSeparatorComponent={() => } renderItem={({ item }) => } /> } />
router.push(routes.shop)}> {popular.map((p) => ( ))}
router.push(routes.rxList)}> {prescriptions.slice(0, 2).map((rx) => ( router.push(routes.rxDetail(rx.id))} > {rx.medicineName} {rx.patientName} ยท {rx.daysSupply} day supply ))}
); }