Obanana_test/app/components/search/ProductCard.jsx

283 lines
7.8 KiB
JavaScript

import {
faHeart,
faLocation,
faLocationArrow,
faLocationPin,
faStar,
} from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-native-fontawesome";
import { useIsFocused, useNavigation } from "@react-navigation/native";
import React, { useEffect, useState } from "react";
import {
Image,
Platform,
StyleSheet,
Text,
TouchableOpacity,
View,
} from "react-native";
import CheckBox from "expo-checkbox";
import nobg from "../../.././assets/bg-no-img-big.jpg";
const ProductCard = ({ product, vendor, index, productAll }) => {
const navigation = useNavigation();
// console.log(product + "ProductCard" + "index: " + index);
const [isChecked, setIsChecked] = useState(false);
const [variablePrice, setvariablePrice] = useState("");
// console.log(product+"hh")
const isFocused = useIsFocused();
// console.log(productAll)
useEffect(() => {
// setactiveProduct(product);
const purch = productAll?.filter((item) => item?.parent_id === product._id);
// setvariations(purch);asus
console.log(product._id);
function getLowestHighestPrice(variation) {
let lowestPrice = Infinity;
let highestPrice = -Infinity;
let hasPrice = false;
variation?.forEach((item) => {
let price = null;
// If sale_price is available and not an empty string, use it; otherwise, use regular_price
if (item?.sale_price && item?.sale_price !== "") {
price = parseFloat(item?.sale_price);
} else if (item?.regular_price && item?.regular_price !== "") {
price = parseFloat(item?.regular_price);
}
// Update lowest and highest prices
if (price !== null) {
hasPrice = true;
lowestPrice = Math.min(lowestPrice, price);
highestPrice = Math.max(highestPrice, price);
}
});
if (!hasPrice) {
return null;
}
// If lowest and highest prices are the same, return that price alone
if (lowestPrice === highestPrice) {
return `${lowestPrice}`;
}
// Return the range of lowest to highest prices
return `${lowestPrice}-${highestPrice}`;
}
const priceRange = getLowestHighestPrice(purch);
setvariablePrice(priceRange);
console.log("-----------------------Price Range:", priceRange);
}, [isFocused]);
return (
<TouchableOpacity
activeOpacity={0.7}
style={styles.container}
onPress={() => navigation.navigate("Product", { product })}
>
<View style={styles.upper}>
<Image
style={{ width: "100%", height: 200, resizeMode: "cover" }}
source={{
uri: `${
product.product_image !== ""
? product.product_image
: "https://wkdonlinedogtraining.com/wp-content/themes/wkd-wp/build/images/bg-no-img-big.jpg"
}`,
}}
/>
{/* <View style={styles.heart}>
<CheckBox
value={liked.includes(index) || all === true}
onValueChange={() => like(index)}
/>
</View> */}
</View>
<View style={{ padding: 10, backgroundColor: "#fff" }}>
<Text style={styles.text} numberOfLines={2}>
{product?.product_name}
</Text>
{product.product_type === "variable" ? (
<View style={styles.priceCon}>
<Text
style={
product.sale_price ? styles.textPricePromo : styles.textPrice
}
>
{variablePrice ? (
" ₱" + parseFloat(variablePrice).toLocaleString('en-US')
) : (
<TouchableOpacity >
<Text style={styles.inquire}>Inquire for price</Text>
</TouchableOpacity>
)}
</Text>
</View>
) : (
<View style={styles.priceCon}>
<Text
style={
product.sale_price ? styles.textPricePromo : styles.textPrice
}
>
{product?.regular_price && product?.regular_price !== null ? (
"₱" + parseFloat(product?.regular_price).toLocaleString('en-US')
) : (
<TouchableOpacity style={styles.inquire}>
<Text style={styles.inquire}>Inquire for price</Text>
</TouchableOpacity>
)}
</Text>
{product.sale_price ? (
<Text style={styles.textPrice}>
{" "}
{/* {(product.regular_price * (1 - product.promo / 100)).toFixed(2) }{" "} */}
{parseFloat(product?.sale_price).toLocaleString('en-US')}
{/* <Text style={{ fontWeight: "400" }}>(-{product.promo}%)</Text> */}
</Text>
) : null}
</View>
)}
<View style={styles.footer}>
{/* <Text style={styles.textMin}>
min. order: {product?.min} {product?.per}
</Text> */}
<Text style={styles.textMin}>stock: {product.stock}</Text>
<Text style={styles.textSold}>{product?.sold} sold</Text>
</View>
<View style={styles.footer1}>
{/* <Text style={styles.textMin}>
min. order: {product?.min} {product?.per}
</Text> */}
<Text style={styles.textMin1}>
<FontAwesomeIcon icon={faLocationPin} color={"#c2c2c2"} size={10} />
{vendor.shipping_city}
</Text>
<Text style={styles.textSold}></Text>
</View>
{product?.rate ? (
<View style={styles.rateCon}>
<FontAwesomeIcon icon={faStar} color={"#eede00"} size={15} />
<Text style={styles.textRate}>
{product.rate} ({product?.raterTotal})
</Text>
</View>
) : null}
</View>
</TouchableOpacity>
);
};
const styles = StyleSheet.create({
container: {
// flex: 1,
// backgroundColor: "#ff3333",
width: "95%",
margin: 5,
borderRadius: 6,
borderColor: "#dddd",
overflow: "hidden",
},
wrapper: {
width: "100%",
// height: 200,
alignItems: "center",
justifyContent: "center",
// backgroundColor: "#ffaa00",
},
header: {
fontSize: 14,
fontWeight: "700",
textTransform: "uppercase",
},
upper: {},
heart: {
position: "absolute",
top: 10,
right: 10,
height: 20,
width: 20,
},
text: {
fontSize: 13,
fontWeight: "600",
textTransform: "capitalize",
color: "#333",
letterSpacing: 0.5,
},
priceCon: {
flexDirection: "row",
paddingVertical: 4,
},
textPrice: {
fontSize: 16,
fontWeight: "600",
textTransform: "capitalize",
color: "#ffaa00",
},
textPricePromo: {
fontSize: 16,
fontWeight: "600",
textTransform: "capitalize",
textDecorationLine: "line-through",
color: "#ffaa00",
},
textMin: {
fontSize: 11,
fontWeight: "600",
// textTransform: "capitalize",
color: "#bdbdbd",
},
textMin1: {
fontSize: 11,
fontWeight: "600",
// textTransform: "capitalize",
color: "#bdbdbd",
},
textSold: {
fontSize: 11,
fontWeight: "600",
// textTransform: "capitalize",
color: "#bdbdbd",
},
rateCon: {
flexDirection: "row",
// justifyContent:'center',
alignItems: "center",
paddingVertical: 3,
},
inquire: {
fontSize: 16,
fontWeight: "600",
// textTransform: "capitalize",
// textDecorationLine: "line-through",
color: "#ffaa00",
},
textRate: {
fontSize: 12,
color: "#838383",
},
img: {
width: 400,
height: 200,
resizeMode: "cover",
margin: "auto",
borderRadius: 10,
// backgroundColor: "#ffaa00",
},
footer: {
flexDirection: "row",
justifyContent: "space-between",
},
footer1: {
marginTop: 10,
flexDirection: "row",
justifyContent: "space-between",
},
});
export default ProductCard;