import React, { useState, useEffect } from "react";
import {
View,
Text,
TextInput,
TouchableOpacity,
ScrollView,
Modal,
StyleSheet,
Platform,
Image,
} from "react-native";
import { Picker } from "@react-native-picker/picker";
import AddressIcon from "../../components/AddressIcon";
import BackIcon from "../../components/BackIcon";
import widthUtils from "../../utils/widthUtils";
import FileEditIcon from "../../components/FileEditIcon";
import PlusIcon from "../../components/PlusIconIcon";
import {
addressApi,
addressData,
AddressItem,
} from "../../services/api/addressApi";
import { useNavigation } from "@react-navigation/native";
import { NativeStackNavigationProp } from "@react-navigation/native-stack";
import { eventBus } from "../../utils/eventBus";
import LocationPinIcon from "../../components/LocationPinIcon";
import fontSize from "../../utils/fontsizeUtils";
import {
ordersApi,
OrderData,
AddressDataItem,
DomesticShippingFeeData,
} from "../../services/api/orders";
import AsyncStorage from "@react-native-async-storage/async-storage";
import { payApi, PaymentMethodsResponse } from "../../services/api/payApi";
import useOrderStore from '../../store/order';
interface PaymentOption {
id: string;
label: string;
icon: string;
value?: string | string[];
}
interface PaymentTab {
id: string;
label: string;
options: PaymentOption[];
}
const PaymentMethodItem = ({ option, isSelected, onSelect }: {
option: PaymentOption;
isSelected: boolean;
onSelect: () => void;
}) => (
{option.icon}
{option.label}
{Array.isArray(option.value) && option.value.length > 0 && (
{option.value.map((op: string) => (
{op}
))}
)}
);
export function Recipient({
route,
}: {
route: { params: { items: { cart_item_id: number }[] } };
}) {
const navigation = useNavigation>();
const [showModal, setShowModal] = useState(false);
const [orderData, setOrderData] = useState();
const [formData, setFormData] = useState({
firstName: "",
lastName: "",
phone: "",
whatsapp: "",
sameAsPhone: false,
setDefault: false,
});
const setOrder = useOrderStore(state => state.setOrder);
const [shippingMethod, setShippingMethod] = useState("sea");
const [warehouse, setWarehouse] = useState();
const [arrival, setArrival] = useState("-");
const [addressList, setAddressList] = useState();
const [defaultAddress, setDefaultAddress] = useState();
const [addressId, setAddressId] = useState();
const [freightForwarderAddress, setFreightForwarderAddress] =
useState();
const [domesticShippingFee, setDomesticShippingFee] =
useState();
const [tabs, setTabs] = useState([
{
id: "online",
label: "Online Payment",
options: []
},
{
id: "offline",
label: "Offline Payment",
options: []
}
]);
const [currentTab, setCurrentTab] = useState("online");
const [selectedPayment, setSelectedPayment] = useState(null);
const [paymentMethods, setPaymentMethods] = useState();
const getAddress = async () => {
const response = await addressApi.addressesDefault();
setAddressId(response.address_id);
setDefaultAddress(response);
};
const getAddressList = async () => {
const response = await addressApi.getAddress();
setAddressList(response.items);
};
const getOrders = async () => {
const country = (await AsyncStorage.getItem("@selected_country")) as string;
setWarehouse(JSON.parse(country).name);
const params = route.params;
const data = {
items: params.items,
};
const response = await ordersApi.getOrders(data);
setOrderData(response);
};
const getFreightForwarderAddress = async () => {
const response = await ordersApi.freightForwarderAddress(1);
setWarehouse(response.current_country_address.country as number);
setFreightForwarderAddress(response);
};
const getDomesticShippingFee = async () => {
const data = {
items: route.params.items,
};
const response = await ordersApi.calcDomesticShippingFee(data);
// 转换响应数据以匹配 DomesticShippingFeeData 类型
const domesticShippingFeeData: DomesticShippingFeeData = {
total_shipping_fee: response.total_shipping_fee_air || 0,
currency: response.currency || '',
// 添加其他必要的属性
};
setDomesticShippingFee(domesticShippingFeeData);
};
const getPaymentMethods = async () => {
try {
const response = await payApi.getCountryPaymentMethods();
setPaymentMethods(response);
// 设置默认支付方式选项
setTabs([
{
id: "online",
label: "Online Payment",
options: response.current_country_methods.map(method => ({
id: method.key,
label: method.key,
icon: getPaymentIcon(method.key),
value: method.value
}))
},
{
id: "offline",
label: "Offline Payment",
options: []
}
]);
} catch (error) {
console.error('获取支付方式失败:', error);
}
};
const getPaymentIcon = (key: string): string => {
switch (key) {
case 'Brainnel Pay(Mobile Money)':
return '💳';
case 'Wave':
return '💸';
case 'Paypal':
return '🅿️';
case 'Bank Card Payment':
return '💳';
default:
return '💰';
}
};
useEffect(() => {
getAddress();
getAddressList();
getOrders();
getFreightForwarderAddress();
getDomesticShippingFee();
getPaymentMethods();
const listener = (data: any) => {
if (data.type === "add") {
data.address_id = new Date().getTime();
setAddressList((prevList) => [data, ...(prevList || [])]);
} else {
console.log(data);
}
};
eventBus.on("address-added", listener);
return () => {
eventBus.off("address-added", listener);
};
}, []);
const [paymentMethod, setPaymentMethod] = useState(null);
const [currency, setCurrency] = useState("usd");
const [actualPayment, setActualPayment] = useState(null);
const [mobileNumber, setMobileNumber] = useState("");
const [countryCode, setCountryCode] = useState("225");
const [couponModalVisible, setCouponModalVisible] = useState(false);
const [appliedCoupons, setAppliedCoupons] = useState<{
code: string;
name: string;
discount: number;
type: 'percent' | 'fixed';
}[]>([]);
const [orderTotal, setOrderTotal] = useState(121.97);
const [originalTotal] = useState(121.97);
const [subtotal] = useState(96.47);
const [domesticShipping] = useState(25.5);
const [internationalShipping] = useState(45.0);
const validCoupons: {
[key: string]: {
discount: number;
type: 'percent' | 'fixed';
name: string;
};
} = {
WELCOME10: { discount: 10, type: "percent", name: "Welcome 10% Off" },
SAVE20: { discount: 20, type: "fixed", name: "$20 Off" },
FREESHIP: { discount: 25.5, type: "fixed", name: "Free Domestic Shipping" },
};
const addCoupon = (code: string) => {
if (appliedCoupons.find((c) => c.code === code)) {
alert("This coupon is already applied.");
return;
}
const couponInfo = validCoupons[code];
const newCoupons = [
...appliedCoupons,
{
code: code,
name: couponInfo.name,
discount: couponInfo.discount,
type: couponInfo.type,
},
];
setAppliedCoupons(newCoupons);
updateTotalWithDiscounts(newCoupons);
};
const removeCoupon = (code: string) => {
const newCoupons = appliedCoupons.filter((c) => c.code !== code);
setAppliedCoupons(newCoupons);
updateTotalWithDiscounts(newCoupons);
};
const updateTotalWithDiscounts = (coupons: typeof appliedCoupons) => {
let totalDiscount = 0;
coupons.forEach((coupon) => {
if (coupon.type === "percent") {
totalDiscount += (subtotal * coupon.discount) / 100;
} else {
totalDiscount += coupon.discount;
}
});
totalDiscount = Math.min(totalDiscount, subtotal + domesticShipping);
const newTotal = originalTotal - totalDiscount;
setOrderTotal(newTotal);
};
const isCouponApplied = (code: string) => {
return appliedCoupons.some((c) => c.code === code);
};
// 判断有没有地址
const addRessHandel = () => {
if (defaultAddress) {
setShowModal(true);
} else {
navigation.navigate("AddRess");
}
};
const [expanded, setExpanded] = useState(false);
const toggleExpanded = () => {
setExpanded(!expanded);
};
const deleteAddress = async (address_id: number) => {
setAddressList(
addressList?.filter((item) => item.address_id !== address_id)
);
addressApi.deleteAddress(address_id);
};
const changeCountryHandel = async (value: number) => {
const data = {
items: route.params.items,
country_code: value,
};
const response = await ordersApi.calcShippingFee(data);
if (orderData) {
setOrderData({
...orderData,
shipping_fee_sea: response?.total_shipping_fee_sea,
shipping_fee_air: response?.total_shipping_fee_air,
});
}
};
// 创建订单
const createOrder = async () => {
if (!defaultAddress) {
alert('请添加收件人信息');
return;
}
if (!selectedPayment) {
alert('请选择支付方式');
return;
}
console.log(orderData)
// 构建订单数据
const submitOrderData = {
address_id: defaultAddress.address_id,
transport_type: shippingMethod === "sea" ? 1 : 2,
items: orderData?.items.map(item => ({
offer_id: item.offer_id,
cart_item_id: item.cart_item_id,
sku_id: item.sku_id,
product_name: item.product_name,
product_name_en: item.product_name_en,
product_name_ar: item.product_name_ar,
product_name_fr: item.product_name_fr,
product_image: item.sku_image_url,
sku_attributes: item.attributes.map(attr => ({
attribute_name: attr.attribute_name,
attribute_value: attr.value
})),
quantity: item.quantity,
unit_price: item.unit_price,
total_price: item.total_price
})) || [],
buyer_message: "",
payment_method: selectedPayment,
create_payment: true,
total_amount: orderData?.total_amount || 0,
actual_amount: (
(orderData?.total_amount ?? 0) +
(shippingMethod === 'sea'
? orderData?.shipping_fee_sea ?? 0
: orderData?.shipping_fee_air ?? 0) +
(domesticShippingFee?.total_shipping_fee ?? 0)
),
discount_amount: 0,
shipping_fee: shippingMethod === 'sea'
? orderData?.shipping_fee_sea ?? 0
: orderData?.shipping_fee_air ?? 0,
domestic_shipping_fee: domesticShippingFee?.total_shipping_fee || 0,
currency: domesticShippingFee?.currency || 'USD',
receiver_address: `${defaultAddress.country} ${defaultAddress.province || ''} ${defaultAddress.city || ''} ${defaultAddress.detail_address || ''}`
};
setOrder(submitOrderData);
navigation.navigate('ConfirmOrder');
};
return (
{/* Header */}
navigation.goBack()}>
Checkout
{/* Recipient Info */}
👤
Recipient Information
{defaultAddress && (
{defaultAddress?.receiver_first_name} .{" "}
{defaultAddress?.receiver_last_name}
{defaultAddress?.country}
{defaultAddress?.receiver_phone}
)}
+
Add Recipient Information
{/* Shipping Method */}
🚢
Shipping Method
{[
{
id: "sea",
label: "Sea Shipping",
icon: "🚢",
detail: "Economical",
},
{
id: "air",
label: "Air Shipping",
icon: "✈️",
detail: "Express",
},
].map((option, index) => (
{
setShippingMethod(option.id);
}}
>
{index === 0 && (
)}
{option.icon}
{option.label}
{option.detail}
))}
{/* Warehouse Selection */}
🏭
Delivery Warehouse
Select a warehouse:
{
setWarehouse(value);
changeCountryHandel(value);
}}
>
{freightForwarderAddress?.other_addresses.map(
(item, index) => (
)
)}
{warehouse && (
Estimated Arrival:{" "}
{shippingMethod === "sea"
? orderData?.shipping_fee_sea_time
: orderData?.shipping_fee_air_time}
International Fee:{" "}
{shippingMethod === "sea"
? orderData?.shipping_fee_sea
: orderData?.shipping_fee_air}
(Cash on Delivery)
)}
💳
Payment Method
{/* 选项卡 */}
{tabs.map((tab) => (
setCurrentTab(tab.id)}
>
{tab.label}
))}
{/* 支付选项 */}
{tabs.find(tab => tab.id === currentTab)?.options.map((option) => (
setSelectedPayment(option.id)}
/>
))}
📦
Order Summary
Products({orderData?.items.length} items)
{expanded ? "Hide Details" : "View Details"}
{orderData?.items.map((item) => (
{item.sku_image_url ? (
) : (
)}
{item.product_name}
{item.attributes.map((attribute) => (
{attribute?.attribute_name}: {attribute?.value}
))}
Qty: {item.quantity}
${item?.total_price}
{/* +${item?.shipping.toFixed(2)} domestic */}
Supplier to warehouse shipping
))}
🎟️
Coupons
setCouponModalVisible(true)}>
Select
{appliedCoupons.length === 0 ? (
No coupons applied. Click "Select" to browse available
coupons.
) : null}
{appliedCoupons.map((coupon) => (
{coupon.name}
{coupon.type === "percent"
? `${coupon.discount}% Off`
: `$${coupon.discount.toFixed(2)} Off`}
removeCoupon(coupon.code)}>
×
))}
Subtotal
{orderData?.total_amount}
Domestic Shipping
{domesticShippingFee?.currency ? (
{domesticShippingFee?.total_shipping_fee}
) : (
报价中...
)}
Estimated International Shipping
{shippingMethod === "sea"
? orderData?.shipping_fee_sea
: orderData?.shipping_fee_air}
{/* 实际支付金额 */}
Total
{(
(orderData?.total_amount ?? 0) +
(shippingMethod === "sea"
? orderData?.shipping_fee_sea ?? 0
: orderData?.shipping_fee_air ?? 0) +
(domesticShippingFee?.total_shipping_fee ?? 0)
).toFixed(2)}
+ $
{shippingMethod === "sea"
? orderData?.shipping_fee_sea
: orderData?.shipping_fee_air}{" "}
Estimated International Shipping
{/* Coupon Modal */}
setCouponModalVisible(false)}
>
Available Coupons
setCouponModalVisible(false)}
>
×
Welcome 10% Off
10% off your total order
Valid until: 31/12/2023
addCoupon("WELCOME10")}
disabled={isCouponApplied("WELCOME10")}
>
{isCouponApplied("WELCOME10") ? "Used" : "Use"}
$20 Off
$20 off your order over $100
Valid until: 30/11/2023
addCoupon("SAVE20")}
disabled={isCouponApplied("SAVE20")}
>
{isCouponApplied("SAVE20") ? "Used" : "Use"}
Free Domestic Shipping
Free domestic shipping on your order
Valid until: 15/12/2023
addCoupon("FREESHIP")}
disabled={isCouponApplied("FREESHIP")}
>
{isCouponApplied("FREESHIP") ? "Used" : "Use"}
{/* Modal 表单 */}
选择收件人
{addressList?.map((item) => (
{
setAddressId(item.address_id);
}}
>
{item.country}{" "}
{item.receiver_first_name} .{" "}
{item.receiver_last_name}
{item.receiver_phone}
设置默认地址
deleteAddress(item.address_id)
}
>
删除
{item.is_default === 1 && (
默认
)}
{
setShowModal(false),
navigation.navigate("AddRess", {
address: item,
});
}}
>
))}
{
setShowModal(false), navigation.navigate("AddRess");
}}
>
新增收件人
{/* Placeholder for additional button component */}
{/* Cancel Button */}
setShowModal(false)}
>
取消
{/* Confirm Button */}
{
setShowModal(false),
setDefaultAddress(
addressList?.find(
(item) => item.address_id === addressId
)
);
}}
>
确认
{domesticShippingFee?.currency ? "确认订单" : "报价中..."}
);
}
const styles = StyleSheet.create({
mainContainer: {
flex: 1,
backgroundColor: "#fff",
},
container: { flex: 1, backgroundColor: "#fff" },
header: {
flexDirection: "row",
alignItems: "center",
padding: 16,
backgroundColor: "#fff",
elevation: 3,
},
back: { fontSize: fontSize(20), marginRight: 16 },
title: {
fontSize: fontSize(18),
fontWeight: "500",
flex: 1,
textAlign: "center",
},
section: {
backgroundColor: "#fff",
borderRadius: 8,
paddingLeft: 16,
paddingRight: 16,
},
sectionHeader: {
flexDirection: "row",
alignItems: "center",
paddingTop: 12,
paddingBottom: 12,
},
sectionIcon: { marginRight: 8, fontSize: fontSize(18) },
sectionTitle: { flex: 1, fontSize: fontSize(15), fontWeight: "500" },
sectionAction: {
color: "#ff6000",
fontSize: fontSize(13),
fontWeight: "500",
},
paymentOptions: {
marginTop: 12,
flexDirection: 'column',
},
recipientInfo: {
backgroundColor: "#fff",
borderRadius: 8,
paddingHorizontal: 12,
paddingVertical: 12,
borderWidth: 1,
borderColor: "#ccc",
width: "100%",
marginBottom: 12,
flexDirection: "row",
alignItems: "center",
},
recipientInfoIcon: {
marginRight: 12,
},
recipientInfoText: {
flex: 1,
fontSize: fontSize(18),
},
addRecipient: {
borderWidth: 1,
borderColor: "#ccc",
padding: 12,
borderRadius: 6,
flexDirection: "row",
justifyContent: "center",
alignItems: "center",
backgroundColor: "#fafafa",
},
addRecipientIcon: {
fontSize: fontSize(20),
color: "#ff6000",
marginRight: 6,
},
addRecipientText: { fontSize: fontSize(14), color: "#666" },
shippingOptions: {
flexDirection: "row",
gap: 10,
justifyContent: "space-between",
marginTop: 12,
},
shippingCard: {
flex: 1,
alignItems: "center",
padding: 12,
borderRadius: 6,
borderWidth: 1,
borderColor: "#e0e0e0",
backgroundColor: "#fff",
},
shippingCardSelected: { borderColor: "#ff6000", backgroundColor: "#fff8f3" },
shippingIcon: { fontSize: fontSize(22), marginBottom: 6 },
shippingLabel: { fontSize: fontSize(14), fontWeight: "500" },
shippingDetail: { fontSize: fontSize(12), color: "#888", marginTop: 3 },
selectBox: { marginBottom: 12 },
selectLabel: { fontSize: fontSize(14), marginBottom: 6, color: "#666" },
selectWrapper: {
borderWidth: 1,
borderColor: "#ddd",
borderRadius: 6,
overflow: "hidden",
backgroundColor: "#fff",
},
shippingInfo: {
marginTop: 12,
padding: 12,
backgroundColor: "#f9f9f9",
borderRadius: 6,
},
shippingInfoRow: {
fontSize: fontSize(13),
marginBottom: 6,
color: "#333",
flexDirection: "row",
justifyContent: "space-between",
},
shippingInfoLabel: {
color: "#777",
fontWeight: "500",
fontSize: fontSize(13),
},
modalOverlay: {
flex: 1,
justifyContent: "center",
alignItems: "center",
backgroundColor: "rgba(0,0,0,0.5)",
},
formContainer: {
width: "90%",
maxHeight: "90%",
backgroundColor: "#fff",
borderRadius: 12,
overflow: "hidden",
},
formHeader: {
flexDirection: "row",
alignItems: "center",
padding: 16,
},
closeButton: { fontSize: fontSize(20), color: "#555" },
formTitle: {
flex: 1,
fontSize: fontSize(16),
fontWeight: "500",
textAlign: "center",
},
formBody: { padding: 16 },
formGroup: { marginBottom: 16 },
formLabel: { marginBottom: 6, fontSize: fontSize(14), color: "#666" },
input: {
borderWidth: 1,
borderColor: "#ddd",
borderRadius: 6,
padding: 12,
fontSize: fontSize(14),
backgroundColor: "#fff",
},
checkboxRow: { flexDirection: "row", alignItems: "center", marginTop: 8 },
checkboxLabel: { marginLeft: 8, fontSize: fontSize(13), color: "#666" },
switchRow: {
flexDirection: "row",
justifyContent: "space-between",
alignItems: "center",
marginTop: 10,
},
formFooter: { padding: 16 },
confirmButton: { backgroundColor: "#0945b5", borderRadius: 6, padding: 14 },
confirmText: {
color: "#fff",
textAlign: "center",
fontSize: fontSize(15),
fontWeight: "500",
},
paymentOption: {
flexDirection: 'row',
alignItems: 'center',
padding: 16,
marginBottom: 12,
borderWidth: 1,
borderColor: '#eee',
borderRadius: 8,
backgroundColor: '#fff',
width: '100%',
},
paymentSelected: {
backgroundColor: '#fff8f3',
borderColor: '#ff8c47',
},
paymentIcon: { fontSize: fontSize(24), marginRight: 8 },
paymentLabel: { fontSize: fontSize(16), fontWeight: '500' },
tabContainer: {
flexDirection: 'row',
marginBottom: 16,
backgroundColor: '#f5f5f5',
borderRadius: 8,
padding: 4,
},
tabButton: {
flex: 1,
paddingVertical: 12,
alignItems: 'center',
borderRadius: 6,
marginRight: 4,
},
tabButtonActive: {
backgroundColor: '#fff',
},
tabText: {
fontSize: fontSize(14),
color: '#666',
},
tabTextActive: {
color: '#000',
fontWeight: '500',
},
mobileForm: { marginTop: 12 },
countryCode: {
paddingVertical: 12,
paddingHorizontal: 14,
backgroundColor: "#f0f0f0",
borderRadius: 6,
borderWidth: 1,
borderColor: "#ccc",
},
currencyButton: {
flex: 1,
paddingVertical: 10,
alignItems: "center",
borderWidth: 1,
borderColor: "#ccc",
borderRadius: 6,
marginRight: 10,
backgroundColor: "#fff",
},
currencyButtonSelected: {
borderColor: "#ff6000",
backgroundColor: "#fff8f3",
},
actualPaymentBox: {
padding: 12,
borderRadius: 6,
backgroundColor: "#fff8f4",
},
actualPaymentBox1: {
flexDirection: "row",
justifyContent: "space-between",
alignItems: "center",
},
remarks: {
marginTop: 6,
},
remarksText: {
color: "#666",
fontSize: fontSize(16),
fontWeight: "500",
},
section1: {
backgroundColor: "#fff",
borderRadius: 8,
overflow: "hidden",
marginTop: 12,
...Platform.select({
ios: {
shadowColor: "#000",
shadowOffset: { width: 0, height: 1 },
shadowOpacity: 0.03,
shadowRadius: 3,
},
android: {
elevation: 1,
},
}),
},
sectionHeader1: {
flexDirection: "row",
alignItems: "center",
paddingTop: 12,
paddingBottom: 12,
borderBottomWidth: 1,
borderBottomColor: "#f5f5f5",
},
sectionIcon1: {
fontSize: fontSize(18),
marginRight: 10,
color: "#666",
},
setOrderContent: {
flexDirection: "row",
justifyContent: "space-between",
alignItems: "center",
paddingTop: 12,
paddingBottom: 12,
paddingHorizontal: 12,
},
sectionTitle1: {
fontSize: fontSize(15),
fontWeight: "500",
flex: 1,
},
sectionAction1: {
color: "#ff6000",
fontSize: fontSize(13),
fontWeight: "500",
},
sectionContent: {
paddingTop: 16,
paddingBottom: 16,
},
noCouponsMessage: {
color: "#888",
fontSize: fontSize(13),
marginBottom: 10,
},
// Applied coupons styles
appliedCoupons: {
flexDirection: "row",
flexWrap: "wrap",
},
couponTag: {
flexDirection: "row",
alignItems: "center",
backgroundColor: "#fff8f3",
borderWidth: 1,
borderStyle: "dashed",
borderColor: "#ff6000",
borderRadius: 4,
padding: 8,
marginRight: 10,
marginBottom: 10,
},
couponTagName: {
color: "#ff6000",
fontWeight: "500",
marginRight: 8,
fontSize: fontSize(13),
},
couponTagDiscount: {
color: "#ff6000",
fontSize: fontSize(13),
},
couponDelete: {
color: "#777",
fontSize: fontSize(16),
marginLeft: 8,
},
// Coupon modal styles
couponModal: {
flex: 1,
backgroundColor: "rgba(0, 0, 0, 0.5)",
justifyContent: "center",
alignItems: "center",
},
couponModalContainer: {
backgroundColor: "#fff",
width: "90%",
maxHeight: "80%",
borderRadius: 12,
overflow: "hidden",
},
couponModalHeader: {
padding: 15,
flexDirection: "row",
alignItems: "center",
justifyContent: "space-between",
borderBottomWidth: 1,
borderBottomColor: "#f0f0f0",
},
couponModalTitle: {
fontSize: fontSize(16),
fontWeight: "500",
},
couponModalClose: {
fontSize: fontSize(20),
color: "#777",
},
couponModalBody: {
padding: 15,
},
// Available coupons styles
availableCoupons: {
gap: 12,
},
couponCard: {
flexDirection: "row",
alignItems: "center",
justifyContent: "space-between",
padding: 12,
backgroundColor: "#fff8f3",
borderWidth: 1,
borderStyle: "dashed",
borderColor: "#ff6000",
borderRadius: 8,
},
couponInfo: {
flex: 1,
},
couponName: {
fontWeight: "500",
color: "#ff6000",
fontSize: fontSize(15),
marginBottom: 3,
},
couponDiscount: {
fontSize: fontSize(13),
color: "#666",
},
couponExpiry: {
fontSize: fontSize(11),
color: "#999",
marginTop: 4,
},
couponUseBtn: {
backgroundColor: "#ff6000",
paddingVertical: 6,
paddingHorizontal: 16,
borderRadius: 4,
fontWeight: "500",
marginLeft: 10,
},
couponUsedBtn: {
backgroundColor: "#ccc",
},
couponUseBtnText: {
color: "white",
fontSize: fontSize(13),
fontWeight: "500",
},
orderItems: {
maxHeight: 0,
overflow: "hidden",
},
orderItemsExpanded: {
maxHeight: 1000, // Arbitrary large number to accommodate all items
},
orderItem: {
flexDirection: "row",
padding: 16,
borderBottomWidth: 1,
borderBottomColor: "#f5f5f5",
},
itemImage: {
width: widthUtils(70, 70).width,
height: widthUtils(70, 70).height,
borderRadius: 6,
marginRight: 12,
borderWidth: 1,
borderColor: "#eee",
},
itemImagePlaceholder: {
width: widthUtils(70, 70).width,
height: widthUtils(70, 70).height,
borderRadius: 6,
marginRight: 12,
borderWidth: 1,
borderColor: "#eee",
backgroundColor: "#f1f1f1",
},
itemDetails: {
flex: 1,
},
itemName: {
fontSize: fontSize(14),
lineHeight: 18,
},
itemVariant: {
fontSize: fontSize(12),
color: "#666",
backgroundColor: "#f7f7f7",
paddingVertical: 3,
paddingHorizontal: 6,
borderRadius: 4,
marginTop: 6,
alignSelf: "flex-start",
},
itemQuantity: {
fontSize: fontSize(12),
color: "#666",
marginTop: 4,
},
itemPrices: {
alignItems: "flex-end",
fontSize: fontSize(13),
color: "#555",
},
itemPrice: {
fontWeight: "600",
color: "#ff6000",
fontSize: fontSize(15),
marginBottom: 5,
},
itemShipping: {
fontSize: fontSize(12),
color: "#777",
},
shippingNote: {
fontSize: fontSize(11),
color: "#888",
marginTop: 2,
fontStyle: "italic",
},
priceBox: {
borderRadius: 10,
},
priceBox1: {
justifyContent: "space-between",
flexDirection: "row",
alignItems: "center",
padding: 12,
borderBottomWidth: 1,
borderBottomColor: "#f5f5f5",
},
container1: {
width: "100%",
},
recipientSelectionContainer: {
flexDirection: "column",
alignItems: "stretch",
justifyContent: "flex-start",
},
recipientSelectorContainer: {
flexDirection: "column",
alignItems: "stretch",
justifyContent: "flex-start",
},
recipientSelectionTitle: {
alignSelf: "center",
fontSize: fontSize(20),
lineHeight: fontSize(22),
fontFamily: "PingFang SC",
fontWeight: "600",
color: "black",
},
userCardContainer1: {
marginTop: 20,
},
addressItemSelected: {
borderColor: "#002fa7",
borderWidth: 2,
},
addressItemNoSelected: {
borderColor: "#d0d0d0",
borderWidth: 2,
},
userCardContainer: {
flexDirection: "row",
gap: 8,
alignItems: "flex-start",
justifyContent: "space-between",
width: "100%",
paddingTop: 15,
paddingRight: 10,
paddingBottom: 10,
paddingLeft: 11,
backgroundColor: "white",
borderRadius: 5,
marginBottom: 10,
},
userInfoCard: {
flexDirection: "row",
alignItems: "flex-start",
justifyContent: "flex-start",
flex: 1,
marginRight: 8,
},
userCardInfo2: {
flex: 1,
marginRight: 8,
},
userCardInfo: {
fontSize: fontSize(18),
lineHeight: fontSize(22),
fontFamily: "PingFang SC",
fontWeight: "500",
color: "black",
flex: 1,
},
userCardInfo1: {
fontSize: fontSize(18),
lineHeight: fontSize(22),
fontFamily: "PingFang SC",
fontWeight: "500",
color: "#6b7280",
marginTop: 10,
flex: 1,
width: "100%",
},
centeredBoxWithText: {
flexDirection: "column",
alignItems: "stretch",
justifyContent: "center",
height: 26,
paddingRight: 11,
paddingLeft: 11,
marginLeft: 8,
backgroundColor: "#edf3ff",
borderRadius: 5,
},
blueHeadingTextStyle: {
fontSize: fontSize(13),
fontFamily: "PingFang SC",
fontWeight: "500",
color: "#002fa7",
},
svgContainer: {
width: widthUtils(24, 24).width,
height: widthUtils(24, 24).height,
color: "#0051ff",
marginLeft: "auto",
},
addressEmit: {
paddingTop: 10,
flexDirection: "row",
gap: 10,
},
cardContainerWithTextAndIcon: {
flexDirection: "row",
gap: 8,
alignItems: "flex-start",
justifyContent: "space-between",
width: "100%",
paddingTop: 16,
paddingRight: 10,
paddingBottom: 19,
paddingLeft: 11,
marginTop: 12,
backgroundColor: "white",
borderWidth: 1,
borderColor: "#d0d0d0",
borderRadius: 5,
},
cardContainerWithTextAndIcon1: {
gap: 8,
justifyContent: "space-between",
width: "100%",
paddingTop: 16,
paddingRight: 10,
paddingBottom: 19,
paddingLeft: 11,
marginTop: 12,
backgroundColor: "white",
borderWidth: 1,
borderColor: "#d0d0d0",
borderStyle: "dashed",
borderRadius: 5,
alignItems: "center",
flexDirection: "row",
},
addCardRecipientText: {
width: "100%",
textAlign: "center",
fontSize: fontSize(16),
lineHeight: fontSize(22),
fontFamily: "PingFang SC",
fontWeight: "500",
alignItems: "center",
flexDirection: "row",
justifyContent: "center",
},
addCard: {
alignItems: "center",
color: "#002fa7",
},
actionButtonsContainer: {
flexDirection: "row",
alignItems: "center",
marginTop: 20,
width: "100%",
justifyContent: "center",
gap: 20,
},
cancelButtonStyle: {
width: "40%",
height: widthUtils(50, 160).height,
justifyContent: "center",
alignItems: "center",
fontFamily: "Source Han Sans CN",
fontSize: fontSize(16),
lineHeight: fontSize(22),
fontWeight: "500",
color: "#333333",
backgroundColor: "#f2f3f5",
borderRadius: 25,
},
confirmButtonStyle: {
width: "40%",
height: widthUtils(50, 160).height,
justifyContent: "center",
alignItems: "center",
fontFamily: "Source Han Sans CN",
fontSize: fontSize(16),
lineHeight: fontSize(22),
fontWeight: "500",
color: "white",
backgroundColor: "#002fa7",
borderRadius: 25,
},
cancelButtonText: {
fontFamily: "Source Han Sans CN",
fontSize: fontSize(16),
lineHeight: fontSize(22),
fontWeight: "500",
color: "#333333",
},
confirmButtonText: {
fontFamily: "Source Han Sans CN",
fontSize: fontSize(16),
lineHeight: fontSize(22),
fontWeight: "500",
color: "white",
},
locationPin: {
position: "absolute",
top: 8,
right: 8,
zIndex: 1,
},
border: {
height: 6,
backgroundColor: "#f5f5f5",
marginTop: 12,
},
bottomButton: {
width: "100%",
justifyContent: "center",
alignItems: "center",
marginTop: 12,
paddingHorizontal: 16,
marginBottom: 12,
backgroundColor: "#fff",
},
bottomButtonContent: {
backgroundColor: "#ff611a",
width: "100%",
justifyContent: "center",
alignItems: "center",
paddingVertical: 16,
borderRadius: 25,
},
bottomButtonText: {
color: "#fff",
fontSize: fontSize(16),
fontWeight: "500",
},
paymentContent: {
flex: 1,
},
brainnelHeader: {
flexDirection: 'row',
alignItems: 'center',
marginBottom: 8,
},
paymentLogo: {
height: 30,
width: 100,
resizeMode: 'contain',
},
paymentDescription: {
fontSize: fontSize(12),
color: '#666',
marginLeft: 8,
},
operatorContainer: {
flexDirection: 'row',
flexWrap: 'wrap',
gap: 8,
marginTop: 8,
},
operatorBox: {
padding: 8,
backgroundColor: '#f5f5f5',
borderRadius: 4,
},
soldesContainer: {
flexDirection: 'row',
alignItems: 'center',
},
balanceText: {
marginLeft: 8,
fontSize: fontSize(14),
color: '#666',
},
cardTypesContainer: {
flexDirection: 'row',
gap: 8,
},
cardTypeIcon: {
height: 24,
width: 36,
resizeMode: 'contain',
},
radioButton: {
width: 20,
height: 20,
borderRadius: 10,
borderWidth: 2,
borderColor: '#ddd',
justifyContent: 'center',
alignItems: 'center',
},
radioInner: {
width: 10,
height: 10,
borderRadius: 5,
backgroundColor: 'transparent',
},
radioInnerSelected: {
backgroundColor: '#ff8c47',
},
cardHeader: {
flexDirection: 'row',
alignItems: 'center',
marginBottom: 8,
},
cardTypeBox: {
padding: 6,
backgroundColor: '#f5f5f5',
borderRadius: 4,
},
cardTypeText: {
fontSize: fontSize(12),
color: '#666',
},
defaultPaymentContainer: {
flexDirection: 'row',
alignItems: 'center',
},
operatorText: {
fontSize: fontSize(12),
color: '#666',
},
});