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
)}
);
}