import React from 'react'; import { View, TouchableOpacity, ActivityIndicator } from 'react-native'; import { useRouter } from 'expo-router'; import { tw, MyText } from 'common-ui'; import { MaterialIcons, Ionicons } from '@expo/vector-icons'; import dayjs from 'dayjs'; import { trpc } from '@/src/trpc-client'; import { Image } from 'expo-image'; interface OrderItem { productName: string; quantity: number; price: number; amount: number; image: string | null; } interface Order { id: number; orderId: string; orderDate: string; deliveryStatus: string; deliveryDate?: string; orderStatus: string; cancelReason: string | null; totalAmount: number; deliveryCharge: number; paymentMode: string; paymentStatus: string; refundStatus: string; refundAmount: number | null; userNotes: string | null; items: OrderItem[]; discountAmount?: number; isFlashDelivery: boolean; createdAt: string; } export default function NextOrderGlimpse() { const router = useRouter(); const { data: ordersData, isLoading: ordersLoading } = trpc.user.order.getOrders.useQuery({ page: 1, pageSize: 50, }); const allOrders: Order[] = ordersData?.data || []; const now = dayjs(); const upcomingOrders = allOrders.filter(order => { if (order.orderStatus.toLowerCase() === 'cancelled') return false; if (order.deliveryStatus.toLowerCase() === 'success') return false; if (order.isFlashDelivery) { return true; } if (order.deliveryDate) { return dayjs(order.deliveryDate).isAfter(now); } return false; }); upcomingOrders.sort((a, b) => { if (a.isFlashDelivery && !b.isFlashDelivery) return -1; if (!a.isFlashDelivery && b.isFlashDelivery) return 1; if (a.isFlashDelivery && b.isFlashDelivery) { return dayjs(b.createdAt).diff(dayjs(a.createdAt)); } if (a.deliveryDate && b.deliveryDate) { return dayjs(a.deliveryDate).diff(dayjs(b.deliveryDate)); } return 0; }); const nextOrder = upcomingOrders[0] || null; if (ordersLoading) { return ( ); } if (!nextOrder) { return null; } return ( router.push(`/(drawer)/(tabs)/me/my-orders/${nextOrder.id}`)} > Upcoming Order {nextOrder.isFlashDelivery && ( FLASH )} #{nextOrder.orderId} {nextOrder.items.length} {nextOrder.items.length === 1 ? 'item' : 'items'} • ₹{nextOrder.totalAmount} {nextOrder.deliveryStatus} {nextOrder.isFlashDelivery ? "30-Min Delivery" : dayjs(nextOrder.deliveryDate).format("DD MMM, hh:mm A") } {nextOrder.items.length > 0 && ( {nextOrder.items.slice(0, 3).map((item, idx) => ( 0 ? -8 : 0 } ]} > ))} {nextOrder.items.length > 3 && ( +{nextOrder.items.length - 3} )} Track Order )} ); }