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.

270 lines
7.7 KiB

import { View, Text, StyleSheet, TouchableOpacity } from "react-native";
import { useState } from "react";
import fontSize from "../../utils/fontsizeUtils";
import LocationPinIcon from "../../components/LocationPinIcon";
import { Picker } from "@react-native-picker/picker";
import { AddressDataItem,OrderData } from "../../services/api/orders";
export const ShippingFee = () => {
const [shippingMethod, setShippingMethod] = useState("sea");
const [warehouse, setWarehouse] = useState<number>();
const [freightForwarderAddress, setFreightForwarderAddress] =
useState<AddressDataItem>();
const [orderData, setOrderData] = useState<OrderData>();
const changeCountryHandel = async (value: number) => {
}
return (
<View style={styles.recipientFormContainer3}>
<View style={styles.recipientFormContainer1}>
<View style={styles.section}>
<View style={styles.sectionHeader}>
<Text style={styles.sectionIcon}>🚢</Text>
<Text style={styles.sectionTitle}>Shipping Method</Text>
</View>
<View style={styles.shippingOptions}>
{[
{
id: "sea",
label: "Sea Shipping",
icon: "🚢",
detail: "Economical",
},
{
id: "air",
label: "Air Shipping",
icon: "✈",
detail: "Express",
},
].map((option, index) => (
<TouchableOpacity
key={option.id}
style={[
styles.shippingCard,
shippingMethod === option.id && styles.shippingCardSelected,
]}
onPress={() => {
setShippingMethod(option.id);
}}
>
{index === 0 && (
<View style={styles.locationPin}>
<LocationPinIcon size={20} />
</View>
)}
<Text style={styles.shippingIcon}>{option.icon}</Text>
<Text style={styles.shippingLabel}>{option.label}</Text>
<Text style={styles.shippingDetail}>{option.detail}</Text>
</TouchableOpacity>
))}
</View>
</View>
<View style={styles.border}></View>
{/* Warehouse Selection */}
<View style={styles.section}>
<View style={styles.sectionHeader}>
<Text style={styles.sectionIcon}>🏭</Text>
<Text style={styles.sectionTitle}>Delivery Warehouse</Text>
</View>
<View style={{ marginTop: 12 }}>
<View style={styles.selectBox}>
<Text style={styles.selectLabel}>Select a warehouse:</Text>
<View style={styles.selectWrapper}>
<Picker
selectedValue={warehouse}
onValueChange={(value) => {
setWarehouse(value);
changeCountryHandel(value);
}}
>
{freightForwarderAddress?.other_addresses.map(
(item, index) => (
<Picker.Item
label={item.country}
value={item.country_code}
key={index}
/>
)
)}
</Picker>
</View>
</View>
{warehouse && (
<View style={styles.shippingInfo}>
<Text style={styles.shippingInfoRow}>
<Text style={styles.shippingInfoLabel}>
Estimated Arrival:{" "}
</Text>
<Text style={{ flex: 1, textAlign: "left", marginLeft: 10 }}>
{shippingMethod === "sea"
? orderData?.shipping_fee_sea_time
: orderData?.shipping_fee_air_time}
</Text>
</Text>
<View style={styles.shippingInfoRow}>
<Text style={styles.shippingInfoLabel}>
International Fee:{" "}
</Text>
<Text
style={{
color: "#ff6000",
flex: 1,
textAlign: "left",
marginLeft: 10,
fontWeight: "600",
}}
>
{shippingMethod === "sea"
? orderData?.shipping_fee_sea
: orderData?.shipping_fee_air}
</Text>
<Text style={{ color: "#ff6000" }}>(Cash on Delivery)</Text>
</View>
</View>
)}
</View>
</View>
</View>
</View>
);
};
const styles = StyleSheet.create({
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: "#fff",
},
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: "#fff" },
locationPin: {
position: "absolute",
top: 8,
right: 8,
zIndex: 1,
},
shippingIcon: { fontSize: fontSize(22), marginBottom: 6 },
shippingLabel: { fontSize: fontSize(14), fontWeight: "500" },
shippingDetail: { fontSize: fontSize(12), color: "#888", marginTop: 3 },
recipientFormContainer3: {
flex: 1,
flexDirection: "column",
alignItems: "stretch",
justifyContent: "flex-start",
backgroundColor: "#fff",
},
recipientFormContainer1: {
width: "100%",
padding: 15,
paddingBottom: 32,
},
border: {
height: 6,
backgroundColor: "#f5f5f5",
marginTop: 12,
},
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),
},
});