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 type { OffersSectionProps } from '@packages/shared'; import ProductCard from "@/components/ProductCard"; import { useAllProducts } from "@/src/hooks/prominent-api-hooks"; 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; // 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 } = useAllProducts(); const allProducts = data?.products || []; const combos = allProducts.filter((p) => p.productType === 'combo'); const offers = allProducts.filter((p) => p.isOffer); 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} /> ); }