import React, { useState } from "react";
import {
View,
Dimensions,
Image,
Platform,
Alert,
ScrollView,
} from "react-native";
import { LinearGradient } from "expo-linear-gradient";
import { useRouter } from "expo-router";
import {
theme,
tw,
useManualRefresh,
useMarkDataFetchers,
LoadingDialog,
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 { useGetCart, useAddToCart } from '@/hooks/cart-query-hooks';
import { useProductSlotIdentifier } from '@/hooks/useProductSlotIdentifier';
import FloatingCartBar from "@/components/floating-cart-bar";
import TabLayoutWrapper from "@/components/TabLayoutWrapper";
const { width: screenWidth } = Dimensions.get("window");
const itemWidth = (screenWidth - 48) / 2; // 2 items per row with padding
export default function OrderAgain() {
const router = useRouter();
const [isLoadingDialogOpen, setIsLoadingDialogOpen] = useState(false);
const {
data: recentProductsData,
isLoading,
error,
refetch,
} = trpc.user.order.getRecentlyOrderedProducts.useQuery({
limit: 20,
});
const { data: cartData, refetch: refetchCart } = useGetCart();
const { addToCart = () => {} } = useAddToCart({ showSuccessAlert: false, showErrorAlert: false, refetchCart: true }) || {};
const { getQuickestSlot } = useProductSlotIdentifier();
const recentProducts = recentProductsData?.products || [];
useManualRefresh(() => {
refetch();
});
useMarkDataFetchers(() => {
refetch();
});
const handleAddToCart = (productId: number) => {
const slotId = getQuickestSlot(productId);
if (!slotId) {
Alert.alert("Error", "No available delivery slot for this product");
return;
}
setIsLoadingDialogOpen(true);
addToCart(productId, 1, slotId, () => setIsLoadingDialogOpen(false));
};
const handleBuyNow = (productId: number) => {
const slotId = getQuickestSlot(productId);
if (!slotId) {
Alert.alert("Error", "No available delivery slot for this product");
return;
}
setIsLoadingDialogOpen(true);
addToCart(productId, 1, slotId, () => {
setIsLoadingDialogOpen(false);
router.push(`/(drawer)/(tabs)/home/cart?select=${productId}`);
});
};
if (isLoading) {
return (
Loading your recent orders...
);
}
if (error) {
return (
Oops!
Failed to load recent orders
);
}
return (
Order Again
Reorder your favorite items quickly
{/* White Section */}
{/* Section Title */}
Recently Ordered
{recentProducts.length === 0 ? (
No recent orders
Items you've ordered recently will appear here
) : (
{recentProducts.map((item, index) => (
router.push(`/(drawer)/(tabs)/order-again/product-detail/${item.id}`)}
showDeliveryInfo={false}
// iconType="flash"
/>
))}
)}
);
}