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', }, });