import React from "react"; import { View, Dimensions, ScrollView } from "react-native"; import { LinearGradient } from "expo-linear-gradient"; import { useRouter } from "expo-router"; import { tw, useManualRefresh, useMarkDataFetchers, AppContainer, MyFlatList, MyText, } 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"); const itemWidth = screenWidth * 0.45; const rowListContent = { paddingBottom: 16, paddingHorizontal: 16 }; interface OffersRowProps { title: string; subtitle: string; products: any[]; onProductPress: (id: number) => void; } const OffersRow = ({ title, subtitle, products, onProductPress }: OffersRowProps) => { const renderItem = ({ item }: { item: any }) => ( onProductPress(item.id)} showDeliveryInfo={false} useAddToCartDialog={true} miniView={true} /> ); return ( {title} {subtitle} {products.length === 0 ? ( No {title.toLowerCase()} available right now ) : ( item.id.toString()} horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={rowListContent} renderItem={renderItem} removeClippedSubviews={true} /> )} ); }; export default function Offers() { const router = useRouter(); 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 ( ); }