This commit is contained in:
shafi54 2026-02-01 10:11:46 +05:30
parent 764806db74
commit 2522e8d58b
5 changed files with 51 additions and 19 deletions

View file

@ -98,6 +98,7 @@ interface OrderItemProps {
onRetryPayment: (orderId: number) => void; onRetryPayment: (orderId: number) => void;
onViewMoreItems: (orderId: number) => void; onViewMoreItems: (orderId: number) => void;
isPaymentPending: boolean; isPaymentPending: boolean;
refetch: () => void;
} }
const OrderItem: React.FC<OrderItemProps> = ({ const OrderItem: React.FC<OrderItemProps> = ({
@ -108,7 +109,8 @@ const OrderItem: React.FC<OrderItemProps> = ({
onPress, onPress,
onRetryPayment, onRetryPayment,
onViewMoreItems, onViewMoreItems,
isPaymentPending isPaymentPending,
refetch
}) => { }) => {
const mainStatus = getStatusColor(item.orderStatus); const mainStatus = getStatusColor(item.orderStatus);
const deliveryStatus = getStatusColor(item.deliveryStatus); const deliveryStatus = getStatusColor(item.deliveryStatus);
@ -168,7 +170,11 @@ const OrderItem: React.FC<OrderItemProps> = ({
<MyText style={[tw`text-sm font-extrabold`, item.isFlashDelivery ? tw`text-amber-900` : tw`text-brand900`]}> <MyText style={[tw`text-sm font-extrabold`, item.isFlashDelivery ? tw`text-amber-900` : tw`text-brand900`]}>
{item.isFlashDelivery {item.isFlashDelivery
? dayjs(item.createdAt || item.orderDate).add(30, 'minutes').format("DD MMM, hh:mm A") ? dayjs(item.createdAt || item.orderDate).add(30, 'minutes').format("DD MMM, hh:mm A")
: dayjs(item.deliveryDate).format("DD MMM, hh:mm A") : (() => {
const startTime = dayjs(item.deliveryDate);
const endTime = startTime.add(1, 'hour');
return `${startTime.format("DD MMM, hh:mm A")} - ${endTime.format("hh:mm A")}`;
})()
} }
</MyText> </MyText>
{item.isFlashDelivery && ( {item.isFlashDelivery && (
@ -194,10 +200,8 @@ const OrderItem: React.FC<OrderItemProps> = ({
</View> </View>
<OrderMenu <OrderMenu
orderId={item.id.toString()} orderId={item.id}
postActionHandler={() => { postActionHandler={refetch}
// refetch will be handled by parent
}}
/> />
</View> </View>
@ -628,6 +632,7 @@ export default function MyOrders() {
onRetryPayment={handleRetryPayment} onRetryPayment={handleRetryPayment}
onViewMoreItems={(orderId) => router.push(`/(drawer)/(tabs)/me/my-orders/${orderId}`)} onViewMoreItems={(orderId) => router.push(`/(drawer)/(tabs)/me/my-orders/${orderId}`)}
isPaymentPending={createRazorpayOrderMutation.isPending} isPaymentPending={createRazorpayOrderMutation.isPending}
refetch={refetch}
/> />
)} )}
keyExtractor={(item) => item.orderId} keyExtractor={(item) => item.orderId}

View file

@ -10,7 +10,7 @@ import axios from '../services/axios-user-ui';
interface ComplaintFormProps { interface ComplaintFormProps {
open: boolean; open: boolean;
onClose: () => void; onClose: () => void;
orderId: string; orderId: number;
} }
export default function ComplaintForm({ open, onClose, orderId }: ComplaintFormProps) { export default function ComplaintForm({ open, onClose, orderId }: ComplaintFormProps) {
@ -21,7 +21,7 @@ export default function ComplaintForm({ open, onClose, orderId }: ComplaintFormP
const raiseComplaintApi = async (payload: { complaintBody: string; images: { uri?: string }[] }) => { const raiseComplaintApi = async (payload: { complaintBody: string; images: { uri?: string }[] }) => {
const formData = new FormData(); const formData = new FormData();
formData.append('orderId', orderId); formData.append('orderId', orderId.toString());
formData.append('complaintBody', payload.complaintBody); formData.append('complaintBody', payload.complaintBody);
// Add images if provided // Add images if provided

View file

@ -140,7 +140,11 @@ export default function NextOrderGlimpse() {
<MyText style={tw`text-xs font-medium text-amber-800`}> <MyText style={tw`text-xs font-medium text-amber-800`}>
{nextOrder.isFlashDelivery {nextOrder.isFlashDelivery
? "30-Min Delivery" ? "30-Min Delivery"
: dayjs(nextOrder.deliveryDate).format("DD MMM, hh:mm A") : (() => {
const startTime = dayjs(nextOrder.deliveryDate);
const endTime = startTime.add(1, 'hour');
return `${startTime.format("DD MMM, hh:mm A")} - ${endTime.format("hh:mm A")}`;
})()
} }
</MyText> </MyText>
</View> </View>

View file

@ -4,13 +4,15 @@ import { MaterialIcons, Ionicons } from '@expo/vector-icons';
import { tw, MyText, MyTouchableOpacity, BottomDialog } from 'common-ui'; import { tw, MyText, MyTouchableOpacity, BottomDialog } from 'common-ui';
import { trpc } from '@/src/trpc-client'; import { trpc } from '@/src/trpc-client';
import ComplaintForm from '@/components/ComplaintForm'; import ComplaintForm from '@/components/ComplaintForm';
import { useRouter } from 'expo-router';
interface OrderMenuProps { interface OrderMenuProps {
orderId: string; orderId: number;
postActionHandler?: () => void; postActionHandler?: () => void;
} }
const OrderMenu: React.FC<OrderMenuProps> = ({ orderId, postActionHandler }) => { const OrderMenu: React.FC<OrderMenuProps> = ({ orderId, postActionHandler }) => {
const router = useRouter();
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
const [editNotesDialogOpen, setEditNotesDialogOpen] = useState(false); const [editNotesDialogOpen, setEditNotesDialogOpen] = useState(false);
const [editNotes, setEditNotes] = useState(''); const [editNotes, setEditNotes] = useState('');
@ -34,7 +36,7 @@ const OrderMenu: React.FC<OrderMenuProps> = ({ orderId, postActionHandler }) =>
const handleEditNotes = async () => { const handleEditNotes = async () => {
try { try {
await updateNotesMutation.mutateAsync({ await updateNotesMutation.mutateAsync({
id: orderId, id: orderId.toString(),
userNotes: editNotes.trim() userNotes: editNotes.trim()
}); });
} catch (error) { } catch (error) {
@ -84,6 +86,23 @@ const OrderMenu: React.FC<OrderMenuProps> = ({ orderId, postActionHandler }) =>
</View> </View>
<View style={tw`space-y-3`}> <View style={tw`space-y-3`}>
<MyTouchableOpacity
style={tw`flex-row items-center p-4 bg-white border border-gray-100 rounded-xl shadow-sm`}
onPress={() => {
setOpen(false);
router.push(`/(drawer)/(tabs)/me/my-orders/${orderId}`);
}}
>
<View style={tw`w-10 h-10 rounded-full bg-gray-50 items-center justify-center mr-4`}>
<MaterialIcons name="visibility" size={20} color="#4B5563" />
</View>
<View style={tw`flex-1`}>
<MyText style={tw`text-gray-900 font-semibold text-base`}>View Details</MyText>
<MyText style={tw`text-gray-500 text-xs`}>View complete order information</MyText>
</View>
<MaterialIcons name="chevron-right" size={24} color="#9CA3AF" />
</MyTouchableOpacity>
<MyTouchableOpacity <MyTouchableOpacity
style={tw`flex-row items-center p-4 bg-white border border-gray-100 rounded-xl shadow-sm`} style={tw`flex-row items-center p-4 bg-white border border-gray-100 rounded-xl shadow-sm`}
onPress={() => { onPress={() => {
@ -117,7 +136,10 @@ const OrderMenu: React.FC<OrderMenuProps> = ({ orderId, postActionHandler }) =>
<MyTouchableOpacity <MyTouchableOpacity
style={tw`flex-row items-center p-4 bg-white border border-gray-100 rounded-xl shadow-sm`} style={tw`flex-row items-center p-4 bg-white border border-gray-100 rounded-xl shadow-sm`}
onPress={() => setCancelDialogOpen(true)} onPress={() => {
setOpen(false);
setTimeout(() => setCancelDialogOpen(true), 300);
}}
> >
<View style={tw`w-10 h-10 rounded-full bg-red-50 items-center justify-center mr-4`}> <View style={tw`w-10 h-10 rounded-full bg-red-50 items-center justify-center mr-4`}>
<MaterialIcons name="cancel" size={20} color="#DC2626" /> <MaterialIcons name="cancel" size={20} color="#DC2626" />

View file

@ -39,11 +39,12 @@ const Quantifier: React.FC<QuantifierProps> = ({
<Text style={tw`text-center text-gray-900 font-bold text-base`}> <Text style={tw`text-center text-gray-900 font-bold text-base`}>
{value} {value}
</Text> </Text>
{unitText && ( {/* {unitText && (
//hide unit text for now
<Text style={tw`text-xs text-gray-400 font-medium ml-0.5 mt-0.5`}> <Text style={tw`text-xs text-gray-400 font-medium ml-0.5 mt-0.5`}>
{unitText} {unitText}
</Text> </Text>
)} )} */}
</View> </View>
<TouchableOpacity <TouchableOpacity