chore: add new address

This commit is contained in:
2026-03-06 19:30:45 +01:00
parent 81907b04aa
commit 0fd7465690
3 changed files with 87 additions and 3 deletions
+18
View File
@@ -362,6 +362,24 @@ export const confirmReception = async (
}
};
export const respondToAddressProposal = async (
commandId: number,
accepted: boolean,
): Promise<{ success: boolean; message: string }> => {
try {
const { data } = await apiClient.post(
`${V1}/commands/${commandId}/address/respond`,
{ accepted },
);
return { success: true, message: data.message || "Réponse enregistrée" };
} catch (error: any) {
return {
success: false,
message: error.response?.data?.error || "Erreur lors de la réponse",
};
}
};
// ============================================
// TRACKING
// ============================================
+4
View File
@@ -256,6 +256,10 @@ export interface OrderDetail {
// Métadonnées
payment_method?: string;
notes?: string;
// Proposition de modification d'adresse
proposed_address?: string | null;
address_proposal_status?: "none" | "pending" | "accepted" | "rejected";
[key: string]: any;
}
@@ -16,6 +16,7 @@ import {
getOrderETA,
confirmReception,
cancelCommand,
respondToAddressProposal,
formatOrderDate,
formatPrice,
calculateOrderTotal,
@@ -267,6 +268,29 @@ export default function OrderTrackingScreen() {
gap: spacing.s,
marginTop: spacing.l,
},
proposalBox: {
backgroundColor: colors.warning + "18",
borderWidth: 1,
borderColor: colors.warning,
borderRadius: borderRadius.md,
padding: spacing.m,
marginTop: spacing.m,
},
proposalTitle: {
color: colors.warning,
fontSize: fontSize.sm,
fontWeight: fontWeight.semibold,
marginBottom: spacing.xs,
},
proposalAddress: {
color: colors.textWhite,
fontSize: fontSize.md,
marginBottom: spacing.m,
},
proposalActions: {
flexDirection: "row",
gap: spacing.s,
},
modalBody: { gap: spacing.m },
modalText: {
color: colors.textPrimary,
@@ -360,9 +384,7 @@ export default function OrderTrackingScreen() {
const progress = STATUS_PROGRESS[order.status] || 0;
const track = tracking[order.id];
const eta = etas[order.id];
const canConfirm = ["livre", "arrived"].includes(
order.status,
);
const canConfirm = order.status === "livre";
const canCancel = [
"pending",
"assigned",
@@ -431,6 +453,46 @@ export default function OrderTrackingScreen() {
color={colors.textMuted}
/>
</View>
{order.address_proposal_status === "pending" && order.proposed_address && (
<View style={styles.proposalBox}>
<Text style={styles.proposalTitle}>
📍 Nouvelle adresse proposée
</Text>
<Text style={styles.proposalAddress}>
{order.proposed_address}
</Text>
<View style={styles.proposalActions}>
<Button
title="Accepter"
variant="success"
size="sm"
onPress={async () => {
const res = await respondToAddressProposal(order.id, true);
if (res.success) {
showToast("Adresse acceptée", "success");
fetchOrders();
} else {
showToast(res.message, "error");
}
}}
/>
<Button
title="Refuser"
variant="danger"
size="sm"
onPress={async () => {
const res = await respondToAddressProposal(order.id, false);
if (res.success) {
showToast("Adresse refusée", "info");
fetchOrders();
} else {
showToast(res.message, "error");
}
}}
/>
</View>
</View>
)}
{expanded && (
<View style={styles.expandedSection}>
{track?.livreur_username && (