diff --git a/mobile/src/screens/client/OrderHistoryScreen.tsx b/mobile/src/screens/client/OrderHistoryScreen.tsx
index a06e6c36..d1444a38 100644
--- a/mobile/src/screens/client/OrderHistoryScreen.tsx
+++ b/mobile/src/screens/client/OrderHistoryScreen.tsx
@@ -67,6 +67,11 @@ export default function OrderHistoryScreen() {
telegram_notifications_enabled: false,
two_fa_enabled: false,
contact_telegram: "",
+ client_color_primary: "",
+ client_color_secondary: "",
+ client_color_success: "",
+ client_color_danger: "",
+ client_color_warning: "",
});
const [referralBalance, setReferralBalance] = useState(0);
const [pointsRewards, setPointsRewards] = useState<{
diff --git a/mobile/src/screens/client/OrderTrackingScreen.tsx b/mobile/src/screens/client/OrderTrackingScreen.tsx
index 1a5eaec5..568493a1 100644
--- a/mobile/src/screens/client/OrderTrackingScreen.tsx
+++ b/mobile/src/screens/client/OrderTrackingScreen.tsx
@@ -274,6 +274,21 @@ export default function OrderTrackingScreen() {
gap: spacing.s,
marginTop: spacing.l,
},
+ confirmBanner: {
+ flexDirection: "row",
+ alignItems: "center",
+ justifyContent: "center",
+ gap: spacing.s,
+ backgroundColor: colors.success,
+ borderRadius: borderRadius.md,
+ paddingVertical: spacing.m,
+ marginTop: spacing.m,
+ },
+ confirmBannerText: {
+ color: "#fff",
+ fontWeight: "700",
+ fontSize: fontSize.sm,
+ },
proposalBox: {
backgroundColor: colors.warning + "18",
borderWidth: 1,
@@ -466,6 +481,16 @@ export default function OrderTrackingScreen() {
color={colors.textMuted}
/>
+ {canConfirm && (
+ setConfirmingId(order.id)}
+ style={styles.confirmBanner}
+ >
+
+ Valider la réception
+
+ )}
{order.address_proposal_status === "pending" &&
order.proposed_address && (
@@ -602,18 +627,6 @@ export default function OrderTrackingScreen() {
variant="outline"
size="sm"
/>
- {canConfirm && (
-
+
+ {/* Modal stock insuffisant */}
+ setStockWarning(null)}
+ >
+ setStockWarning(null)}
+ >
+ {}}
+ >
+ ⚠️
+
+ Stock insuffisant
+
+
+ Vous avez sélectionné{" "}
+ {stockWarning?.wanted}g
+ {" "}mais il ne reste que{" "}
+ {stockWarning?.available}g
+ {" "}disponible pour ce produit.
+
+ setStockWarning(null)}
+ style={{ backgroundColor: "#ef4444", borderRadius: 10, paddingVertical: 12, paddingHorizontal: 32 }}
+ >
+ OK
+
+
+
+
);
}
diff --git a/mobile/src/screens/client/ProductsScreen.tsx b/mobile/src/screens/client/ProductsScreen.tsx
index e45efa9f..813f4450 100644
--- a/mobile/src/screens/client/ProductsScreen.tsx
+++ b/mobile/src/screens/client/ProductsScreen.tsx
@@ -51,7 +51,13 @@ export default function ProductsScreen() {
const scaleAnim = useRef(new Animated.Value(1)).current;
useEffect(() => {
- getCategories().then(setCategories);
+ getCategories().then((cats) => {
+ const sorted = [...cats].sort((a, b) => {
+ if (a.is_coming_soon === b.is_coming_soon) return 0;
+ return a.is_coming_soon ? 1 : -1;
+ });
+ setCategories(sorted);
+ });
}, []);
useEffect(() => {