import React, { useState } from "react"; import { View, Dimensions, ScrollView } from "react-native"; import { useRouter } from "expo-router"; import { tw, useManualRefresh, useMarkDataFetchers, AppContainer, MyText, MyTouchableOpacity, } from "common-ui"; import MaterialIcons from "@expo/vector-icons/MaterialIcons"; import ProductCard from "@/components/ProductCard"; import { trpc } from "@/src/trpc-client"; import FloatingCartBar from "@/components/floating-cart-bar"; import TabLayoutWrapper from "@/components/TabLayoutWrapper"; const { width: screenWidth } = Dimensions.get("window"); // Same 3-column hero card sizing used on the home page. const heroItemWidth = (screenWidth - 72) / 3; const SHOW_MORE_STEP = 6; interface OffersSectionProps { title: string; subtitle: string; products: any[]; expanded: boolean; onExpand: () => void; onProductPress: (id: number) => void; } // Grid section (home page style): shows the first SHOW_MORE_STEP products // with a "Show More" button to reveal the rest. const OffersSection = ({ title, subtitle, products, expanded, onExpand, onProductPress, }: OffersSectionProps) => { const visible = expanded ? products : products.slice(0, SHOW_MORE_STEP); const hasMore = products.length > SHOW_MORE_STEP && !expanded; return ( {title} {subtitle} {products.length === 0 ? ( No {title.toLowerCase()} available right now ) : ( <> {visible.map((item: any) => ( onProductPress(item.id)} showDeliveryInfo={false} useAddToCartDialog={true} miniView={true} variant="hero" /> ))} {hasMore && ( Show More )} )} ); }; export default function Offers() { const router = useRouter(); const [expandedOffers, setExpandedOffers] = useState(false); const [expandedCombos, setExpandedCombos] = useState(false); const { data, isLoading, error, refetch } = trpc.user.product.getOffersPage.useQuery(); const combos = data?.combos || []; const offers = data?.offers || []; useManualRefresh(() => { refetch(); }); useMarkDataFetchers(() => { refetch(); }); if (isLoading) { return ( Loading offers... ); } if (error) { return ( Oops! Failed to load offers ); } const handleProductPress = (id: number) => { router.push(`/(drawer)/(tabs)/order-again/product-detail/${id}`); }; return ( setExpandedOffers(true)} onProductPress={handleProductPress} /> setExpandedCombos(true)} onProductPress={handleProductPress} /> ); }