You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
255 lines
7.3 KiB
255 lines
7.3 KiB
import { View, Text, TouchableOpacity, StyleSheet, TextInput } from "react-native"; |
|
import useCreateOrderStore from "../../store/createOrder"; |
|
import BackIcon from "../../components/BackIcon"; |
|
import { useNavigation } from "@react-navigation/native"; |
|
import { useState, useEffect } from "react"; |
|
|
|
export const PreviewOrder = () => { |
|
const {orderData, setOrderData} = useCreateOrderStore(); |
|
const navigation = useNavigation(); |
|
const [phoneNumber, setPhoneNumber] = useState(""); |
|
const [showPhoneInput, setShowPhoneInput] = useState(false); |
|
|
|
useEffect(() => { |
|
if (orderData?.payment_method === "Brainnel Pay(Mobile Money)") { |
|
setShowPhoneInput(true); |
|
} else { |
|
setShowPhoneInput(false); |
|
} |
|
}, [orderData?.payment_method]); |
|
|
|
const handleSubmit = () => { |
|
if (showPhoneInput && !phoneNumber) { |
|
// Show error or alert if needed |
|
console.log("Phone number is required for Mobile Money"); |
|
return; |
|
} |
|
|
|
if (showPhoneInput) { |
|
setOrderData({ ...orderData, mobile_money_phone: phoneNumber }); |
|
} |
|
|
|
console.log("orderData", orderData); |
|
// Add your submission logic here |
|
} |
|
|
|
return ( |
|
<View style={styles.container}> |
|
<View style={styles.titleContainer}> |
|
<View style={styles.backIconContainer}> |
|
<TouchableOpacity onPress={() => navigation.goBack()}> |
|
<BackIcon size={20} /> |
|
</TouchableOpacity> |
|
</View> |
|
|
|
<Text style={styles.titleHeading}>立即支付</Text> |
|
</View> |
|
|
|
{/* Payment Details */} |
|
<View style={styles.section}> |
|
|
|
{showPhoneInput && ( |
|
<View style={styles.phoneInputContainer}> |
|
<Text style={styles.phoneInputLabel}>请输入手机号码</Text> |
|
<TextInput |
|
style={styles.phoneInput} |
|
value={phoneNumber} |
|
onChangeText={setPhoneNumber} |
|
placeholder="输入手机号码" |
|
keyboardType="phone-pad" |
|
/> |
|
</View> |
|
)} |
|
|
|
{/* Order Details Card */} |
|
<View style={styles.card}> |
|
<Text style={styles.cardTitle}>订单详情</Text> |
|
<View style={styles.detailRow}> |
|
<Text style={styles.detailLabel}>收货地址:</Text> |
|
<Text style={styles.detailValue} numberOfLines={2} ellipsizeMode="tail">{orderData?.address || "请选择地址"}</Text> |
|
</View> |
|
<View style={styles.detailRow}> |
|
<Text style={styles.detailLabel}>订单金额:</Text> |
|
<Text style={styles.detailValue}>{orderData?.amount ? `${orderData.currency || ''} ${orderData.amount}` : "N/A"}</Text> |
|
</View> |
|
<View style={styles.detailRow}> |
|
<Text style={styles.detailLabel}>运费:</Text> |
|
<Text style={styles.detailValue}>{orderData?.shipping_fee ? `${orderData.currency || ''} ${orderData.shipping_fee}` : "N/A"}</Text> |
|
</View> |
|
{orderData?.whatsapp_phone && ( |
|
<View style={styles.detailRow}> |
|
<Text style={styles.detailLabel}>WhatsApp:</Text> |
|
<Text style={styles.detailValue}>{orderData.whatsapp_phone}</Text> |
|
</View> |
|
)} |
|
</View> |
|
</View> |
|
|
|
<View style={styles.submitButtonContainer}> |
|
<TouchableOpacity |
|
style={[ |
|
styles.primaryButtonStyle, |
|
(!showPhoneInput || (showPhoneInput && phoneNumber)) ? {} : styles.disabledButtonStyle |
|
]} |
|
onPress={handleSubmit} |
|
disabled={showPhoneInput && !phoneNumber} |
|
> |
|
<Text style={styles.buttonText}>确认支付</Text> |
|
</TouchableOpacity> |
|
</View> |
|
</View> |
|
); |
|
}; |
|
|
|
const styles = StyleSheet.create({ |
|
container: { |
|
flex: 1, |
|
backgroundColor: "white", |
|
}, |
|
submitButtonContainer: { |
|
paddingRight: 11, |
|
paddingLeft: 11, |
|
marginTop: 20, |
|
marginBottom: 20, |
|
}, |
|
primaryButtonStyle: { |
|
width: "100%", |
|
height: 50, |
|
justifyContent: "center", |
|
alignItems: "center", |
|
fontWeight: "600", |
|
fontSize: 16, |
|
lineHeight: 22, |
|
fontFamily: "PingFang SC", |
|
color: "white", |
|
backgroundColor: "#002fa7", |
|
borderWidth: 0, |
|
borderRadius: 25, |
|
}, |
|
buttonText: { |
|
color: "white", |
|
fontWeight: "600", |
|
fontSize: 16, |
|
lineHeight: 22, |
|
fontFamily: "PingFang SC", |
|
}, |
|
selectedCountryText: { |
|
padding: 0, |
|
margin: 0, |
|
fontWeight: "500", |
|
fontSize: 16, |
|
lineHeight: 22, |
|
fontFamily: "PingFang SC", |
|
color: "#646472", |
|
}, |
|
disabledButtonStyle: { |
|
backgroundColor: "#ccc", |
|
}, |
|
titleContainer: { |
|
width: "100%", |
|
padding: 15, |
|
flexDirection: "row", |
|
alignItems: "center", |
|
justifyContent: "center", |
|
position: "relative", |
|
backgroundColor: "#fff", |
|
|
|
}, |
|
backIconContainer: { |
|
position: "absolute", |
|
left: 15, |
|
backgroundColor: "#fff", |
|
|
|
}, |
|
titleHeading: { |
|
fontWeight: "600", |
|
fontSize: 20, |
|
lineHeight: 22, |
|
fontFamily: "PingFang SC", |
|
color: "black", |
|
|
|
}, |
|
// Order Summary Styles |
|
section: { |
|
backgroundColor: "#fff", |
|
borderRadius: 8, |
|
paddingHorizontal: 15, |
|
marginTop: 15, |
|
paddingVertical: 12, |
|
}, |
|
sectionTitle: { |
|
fontWeight: "600", |
|
fontSize: 16, |
|
marginBottom: 8, |
|
color: "#333", |
|
}, |
|
paymentMethod: { |
|
fontSize: 15, |
|
color: "#666", |
|
marginBottom: 10, |
|
}, |
|
phoneInputContainer: { |
|
marginTop: 10, |
|
marginBottom: 10, |
|
}, |
|
phoneInputLabel: { |
|
fontSize: 14, |
|
color: "#333", |
|
marginBottom: 5, |
|
}, |
|
phoneInput: { |
|
borderWidth: 1, |
|
borderColor: "#ccc", |
|
borderRadius: 8, |
|
padding: 10, |
|
fontSize: 16, |
|
backgroundColor: "#f9f9f9", |
|
}, |
|
// Card styles for order details |
|
card: { |
|
backgroundColor: "#ffffff", // White background for the card |
|
borderRadius: 12, // Rounded corners |
|
// marginHorizontal: 15, // Removed to align with parent section padding |
|
marginTop: 20, // Margin from the top element |
|
padding: 18, // Inner padding |
|
// shadowColor: "#000", // Removed shadow |
|
// shadowOffset: { |
|
// width: 0, |
|
// height: 2, |
|
// }, |
|
// shadowOpacity: 0.1, |
|
// shadowRadius: 3.84, |
|
// elevation: 5, // Removed elevation |
|
borderWidth: 1, // Add a border to define the card area |
|
borderColor: "#e0e0e0", // Light border color |
|
}, |
|
cardTitle: { |
|
fontSize: 18, |
|
fontWeight: "bold", |
|
color: "#333333", |
|
marginBottom: 15, // Space below the title |
|
fontFamily: "PingFang SC", |
|
}, |
|
detailRow: { |
|
flexDirection: "row", |
|
justifyContent: "space-between", |
|
alignItems: "flex-start", // Align items to the start for multi-line values |
|
paddingVertical: 8, // Vertical padding for each row |
|
borderBottomWidth: 1, |
|
borderBottomColor: "#f0f0f0", // Lighter separator line |
|
}, |
|
detailLabel: { |
|
fontSize: 15, |
|
color: "#555555", // Slightly lighter label color |
|
fontFamily: "PingFang SC", |
|
fontWeight: '500', |
|
marginRight: 10, // Space between label and value |
|
}, |
|
detailValue: { |
|
fontSize: 15, |
|
color: "#333333", // Darker value color |
|
fontFamily: "PingFang SC", |
|
textAlign: 'right', |
|
flexShrink: 1, // Allow text to shrink and wrap |
|
}, |
|
});
|
|
|