import React, { useCallback } from 'react'; import { View, TouchableOpacity, ActivityIndicator, ScrollView, } from 'react-native'; import { useRouter, useLocalSearchParams } from 'expo-router'; import MaterialIcons from '@expo/vector-icons/MaterialIcons'; import { AppContainer, MyText, tw, } from 'common-ui'; import { trpc } from '@/src/trpc-client'; import { formatDistanceToNow } from 'date-fns'; import dayjs from 'dayjs'; interface Order { id: number; readableId: number; totalAmount: string; createdAt: string; status: string; isFlashDelivery: boolean; itemCount: number; } interface OrderItemProps { order: Order; onPress: () => void; } const getStatusColor = (status: string) => { switch (status) { case 'delivered': return 'text-green-600 bg-green-50 border-green-100'; case 'cancelled': return 'text-red-600 bg-red-50 border-red-100'; default: return 'text-yellow-600 bg-yellow-50 border-yellow-100'; } }; const OrderItem: React.FC = ({ order, onPress }) => { const statusStyle = getStatusColor(order.status); return ( #{order.readableId} {order.isFlashDelivery && ( )} {order.status} {dayjs(order.createdAt).format('MMM DD, YYYY • h:mm A')} {order.itemCount} {order.itemCount === 1 ? 'item' : 'items'} ₹{order.totalAmount} View Order Details ); }; export default function UserDetails() { const router = useRouter(); const { id } = useLocalSearchParams<{ id: string }>(); const userId = id ? parseInt(id) : 0; const { data, isLoading, error, refetch } = trpc.admin.user.getUserDetails.useQuery( { userId }, { enabled: !!userId } ); const handleOrderPress = useCallback((orderId: number) => { router.push(`/(drawer)/order-details/${orderId}`); }, [router]); if (isLoading) { return ( Loading user details... ); } if (error || !data) { return ( Error {error?.message || 'Failed to load user details'} refetch()} style={tw`mt-6 bg-blue-600 px-6 py-3 rounded-full`} > Retry ); } const { user, orders } = data; const displayName = user.name || 'Unnamed User'; return ( {/* Header */} router.back()} style={tw`p-2 -ml-4`} > User Details {/* User Info Card */} {user.mobile || 'No Mobile'} {displayName} Registered {formatDistanceToNow(new Date(user.createdAt), { addSuffix: true })} {/* Orders Section */} Order History {orders.length} {orders.length === 1 ? 'order' : 'orders'} {orders.length === 0 ? ( No orders yet ) : ( orders.map((order) => ( handleOrderPress(order.id)} /> )) )} ); }