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 } from "../../services/api/orders"; 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 [shippingMethod, setShippingMethod] = useState('sea'); const [warehouse, setWarehouse] = useState(""); const [arrival, setArrival] = useState("-"); const [shippingFee, setShippingFee] = useState("-"); const [addressList, setAddressList] = useState(); const [defaultAddress, setDefaultAddress] = useState(); const [addressId, setAddressId] = 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 params = route.params; const data = { "items": params.items, } const response = await ordersApi.getOrders(data); setOrderData(response); }; useEffect(() => { getAddress(); getAddressList(); getOrders(); 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 shippingData = { sea: { abidjan: { days: "20–25 days", fee: "$20.00" }, nairobi: { days: "25–30 days", fee: "$22.00" }, lagos: { days: "30–35 days", fee: "$25.00" }, accra: { days: "28–33 days", fee: "$23.50" }, johannesburg: { days: "35–45 days", fee: "$30.00" }, dakar: { days: "30–40 days", fee: "$27.00" }, }, air: { abidjan: { days: "3–5 days", fee: "$40.00" }, nairobi: { days: "5–7 days", fee: "$45.00" }, lagos: { days: "6–8 days", fee: "$50.00" }, accra: { days: "5–7 days", fee: "$48.00" }, johannesburg: { days: "7–9 days", fee: "$55.00" }, dakar: { days: "6–8 days", fee: "$52.00" }, }, }; 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 balance = 245.0; const exchangeRates = { usd: 1, eur: 0.885 }; const updateShippingInfo = (method, location) => { if (method && location && shippingData[method]?.[location]) { setArrival(shippingData[method][location].days); setShippingFee(shippingData[method][location].fee); } else { setArrival("-"); setShippingFee("-"); } }; const getOrderAmount = () => { // 模拟总金额,可加入实际订单计算逻辑 const baseAmount = parseFloat(shippingFee.replace("$", "")) || 0; return 100 + baseAmount; // 示例:商品 $100 + 运费 }; const updateActualPayment = (method, selectedCurrency = currency) => { const amount = getOrderAmount(); let finalAmount = amount; let display = ""; if (method === "balance") { display = balance >= amount ? "$0.00 (使用余额支付)" : `$${(amount - balance).toFixed(2)} (余额不足)`; } else if (method === "paypal") { const rate = exchangeRates[selectedCurrency]; const converted = (amount * rate).toFixed(2); const symbol = selectedCurrency === "usd" ? "$" : "€"; display = `${symbol}${converted}`; } else if (method === "mobile_money") { display = `$${amount.toFixed(2)} (FCFA ${(amount * 580).toFixed(0)})`; } else { display = `$${amount.toFixed(2)}`; } setActualPayment(display); }; const [couponModalVisible, setCouponModalVisible] = useState(false); const [appliedCoupons, setAppliedCoupons] = useState([]); 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 = { 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) => { 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) => { const newCoupons = appliedCoupons.filter((c) => c.code !== code); setAppliedCoupons(newCoupons); updateTotalWithDiscounts(newCoupons); }; const updateTotalWithDiscounts = (coupons) => { 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) => { 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) } 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); updateShippingInfo(option.id, warehouse); }} > {index === 0 && ( )} {option.icon} {option.label} {option.detail} ))} {/* Warehouse Selection */} 🏭 Delivery Warehouse Select a warehouse: { setWarehouse(value); updateShippingInfo(shippingMethod, value); }} > {arrival !== "-" && ( Estimated Arrival:{" "} {arrival} International Fee:{" "} {shippingFee} (Cash on Delivery) )} 💳 Payment Method {[ { id: "balance", icon: "💰", label: "Account Balance" }, { id: "mobile_money", icon: "📱", label: "Mobile Money" }, { id: "paypal", icon: "🅿️", label: "PayPal" }, { id: "card", icon: "💳", label: "Credit/Debit Card" }, ].map((option) => ( { setPaymentMethod(option.id); updateActualPayment(option.id); }} > {option.icon} {option.label} ))} {/* Mobile Money 表单 */} {paymentMethod === "mobile_money" && ( Mobile Number { const next = countryCode === "225" ? "234" : countryCode === "234" ? "233" : "225"; setCountryCode(next); }} > {countryCode} )} {/* PayPal Currency 切换 */} {paymentMethod === "paypal" && ( Select Currency {["usd", "eur"].map((cur) => ( { setCurrency(cur); updateActualPayment("paypal", cur); }} style={[ styles.currencyButton, currency === cur && styles.currencyButtonSelected, ]} > {cur.toUpperCase()} ))} )} 📦 Coupons 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 $231.00 Estimated International Shipping $231.00 {/* 实际支付金额 */} Total {orderData?.total_amount} 1 {/* 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)); }} > 确认 ); } const styles = StyleSheet.create({ container: { backgroundColor: "#f8f9fa", flex: 1 }, 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, padding: 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" }, 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" }, shippingInfoLabel: { color: "#777", fontWeight: "500" }, 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", borderWidth: 1, borderColor: "#ddd", padding: 12, borderRadius: 6, marginTop: 10, }, paymentSelected: { borderColor: "#ff6000", backgroundColor: "#fff8f3", }, paymentIcon: { fontSize: fontSize(20), marginRight: 10 }, paymentLabel: { fontSize: fontSize(14), 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", ...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, }, 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, }, });