import React, { useEffect } from "react"; import { View, Text, Image, StyleSheet, TouchableOpacity, ScrollView, } from "react-native"; import widthUtils from "../utils/widthUtils"; import fontSize from "../utils/fontsizeUtils"; import CloseIcon from "../components/CloseIcon"; import { ProductDetailParams, ProductGroupList, SkuAttribute, } from "../services/api/productApi"; import { useState } from "react"; interface ProductCardProps { onClose: () => void; product: ProductDetailParams; groupList: ProductGroupList[]; } const ProductCard: React.FC = ({ onClose, product: localProduct, groupList: localGroupList, }: { onClose: () => void; product: ProductDetailParams; groupList: ProductGroupList[]; }) => { const [groupList, setGroupList] = useState(localGroupList); const [product, setProduct] = useState(localProduct); const [imgTitle, setImgTitle] = useState(""); useEffect(() => { const item = groupList.filter((item) => item.has_image); item.forEach((item) => { const colorItem = item.attributes.filter( (attribute) => attribute.has_color ); if (colorItem.length > 0) { setImgTitle(colorItem[0].sku_image_url); } }); if (item.length === 0) { setImgTitle(product.product_image_urls[0]); } if(item.length === 1){ console.log(item); } }); const handleColorSelect = (colorId: string, index: number) => { const newGroupList = [...groupList]; const attributeIndex = newGroupList[index]?.attributes.findIndex( (item) => item.value === colorId ); if (attributeIndex !== -1) { newGroupList[index].attributes = newGroupList[index].attributes.map( (item, i) => { if (i === attributeIndex) { return { ...item, has_color: true }; } return { ...item, has_color: false }; } ); setGroupList(newGroupList); } const selectedSku: SkuAttribute[] = []; groupList.forEach((item) => { item.attributes.forEach((attribute) => { if (attribute.has_color) { selectedSku.push(attribute); } }); }); let price = 0; product?.skus.forEach((item) => { const values1 = item.attributes.map((item) => item.value).sort(); const values2 = selectedSku.map((item) => item.value).sort(); if (values1.every((val, index) => val === values2[index])) { if (item.offer_price) { price = item.offer_price; } else { price = product.sale_info.price_range_list[ product.sale_info.price_range_list.length - 1 ].price; } } }); if (product) { setProduct({ ...product, price: price === 0 ? "无货" : price, }); } }; return ( {/* SVG commented out as requested */} {/* */} {product.price} FCFA -5% {/* SVG commented out as requested */} {/* */} VIP 3072 FCFA ≥2 Pièces 2500 FCFA ≥50 Pièces 2099 FCFA ≥100 Pièces {groupList.map((item, index1) => ( {item.has_image && groupList.length > 1 && ( Couleur:Noir {item.attributes.map((attribute, index) => ( handleColorSelect(attribute.value, index1) } > {attribute.value} ))} )} {!item.has_image && ( Taille {item.attributes.map((attribute) => ( {attribute.value} En stock 231 0 + ))} )} {item.has_image && groupList.length === 1 && ( {item.attributes.map((attribute, index) => ( {attribute.value} 0 + ))} )} ))} ); }; const styles = StyleSheet.create({ container: { width: "100%", backgroundColor: "white", }, productCardContainer3: { flexDirection: "column", alignItems: "stretch", justifyContent: "flex-start", width: "100%", paddingTop: 15, paddingRight: 17, paddingLeft: 19, }, pricingCard: { paddingTop: 5, paddingBottom: 5, }, flexRowAlignedEndFullWidth: { flexDirection: "row", alignItems: "flex-end", justifyContent: "flex-start", width: "100%", }, productCardContainer: { flexBasis: widthUtils(80, 80).width, paddingTop: 5, }, cardContainer: { width: "100%", backgroundColor: "#e0e0e0", borderRadius: 5, }, flexColumnEndAlign2: { flexDirection: "column", alignItems: "flex-end", justifyContent: "flex-start", width: "100%", height: widthUtils(80, 80).height, borderRadius: 5, }, flexColumnImg: { width: "100%", height: "100%", borderRadius: 5, }, svgContainer: { width: widthUtils(24, 24).width, height: widthUtils(24, 24).height, }, productCardContainer2: { flexBasis: widthUtils(295, 295).width, marginLeft: 15, }, productCardContainer1: { flexDirection: "row", alignItems: "flex-end", justifyContent: "flex-start", }, priceInfoContainer1: { flexDirection: "row", alignItems: "center", justifyContent: "flex-start", }, highlightedText: { padding: 0, margin: 0, fontWeight: "700", fontSize: fontSize(30), fontFamily: "Segoe UI", color: "#ff5100", }, priceInfoContainer2: { flexDirection: "row", alignItems: "flex-start", justifyContent: "flex-start", marginLeft: 1, }, orangeHeading: { padding: 0, paddingBottom: 14, margin: 0, fontWeight: "700", fontSize: 14, fontFamily: "Segoe UI", color: "#ff5100", }, percentageChangeContainer: { flexDirection: "column", alignItems: "center", justifyContent: "flex-start", marginLeft: 14.5, }, discountPercentageTextStyle: { padding: 0, margin: 0, fontStyle: "italic", fontWeight: "900", fontSize: 11, fontFamily: "Segoe UI", color: "#4e2000", }, svgContainer1: { width: 32, height: 32, marginTop: -26, }, vipButtonContainer: { flexDirection: "row", alignItems: "center", justifyContent: "flex-start", marginLeft: 1.25, }, svgContainer2: { width: 10, height: 10, color: "#3b3b3b", }, vipButton: { width: 55, minWidth: 55, height: 21, marginLeft: -2.5, backgroundColor: "#3b3b3b", borderWidth: 0, borderRadius: 5, borderBottomLeftRadius: 0, }, italicBoldSegoeVip: { fontStyle: "italic", fontWeight: "900", fontSize: 14, fontFamily: "Segoe UI", }, royalBadge: { fontStyle: "italic", fontWeight: "900", fontSize: fontSize(14), fontFamily: "Segoe UI", letterSpacing: -2, }, pricingCardContainer: { flexDirection: "row", gap: widthUtils(29.5, 29.5).width, alignItems: "flex-start", justifyContent: "space-between", width: "100%", paddingRight: 15, paddingBottom: 3, paddingLeft: 11, marginTop: 7, backgroundColor: "#f3f4f8", borderRadius: 5, }, priceInfoContainer: { flexDirection: "row", alignItems: "center", justifyContent: "flex-start", }, priceHighlightedText: { padding: 0, margin: 0, fontWeight: "700", fontSize: fontSize(16), fontFamily: "Segoe UI", color: "#373737", }, priceTagBold: { padding: 0, margin: 0, fontWeight: "700", fontSize: fontSize(11), fontFamily: "Segoe UI", color: "#373737", }, productPriceTier: { padding: 0, margin: 0, marginTop: -4, fontWeight: "400", fontSize: fontSize(12), fontFamily: "PingFang SC", color: "#373737", }, productDetailsContainer: { width: "100%", marginTop: 24, height: "100%", }, primaryTextHeading: { padding: 0, margin: 0, fontWeight: "600", fontSize: 16, lineHeight: 20, fontFamily: "Segoe UI", color: "black", }, colorPaletteContainer1: { marginTop: 12, }, colorPaletteContainer: { flexDirection: "row", gap: 10, alignItems: "flex-start", justifyContent: "flex-start", width: "100%", }, cardContainerWithTitleAndIcon: { flex: 1, flexDirection: "column", alignItems: "stretch", justifyContent: "flex-start", paddingBottom: 5, backgroundColor: "#fff5f0", borderWidth: 1, borderColor: "#ff5100", borderRadius: 5, }, cardContainer1: { backgroundColor: "#e0e0e0", borderRadius: 5, }, flexColumnEndAlign: { flexDirection: "column", alignItems: "flex-end", justifyContent: "flex-start", width: "100%", height: 90, borderRadius: 5, }, uniqueTextStyler: { alignSelf: "center", padding: 0, margin: 0, marginTop: 1, fontWeight: "600", fontSize: 16, lineHeight: 20, fontFamily: "Segoe UI", color: "#ff5100", }, cardContainer2: { flex: 1, flexDirection: "column", alignItems: "stretch", justifyContent: "flex-start", paddingBottom: 5, backgroundColor: "#f4f4f4", borderRadius: 5, width: 90, height: 116, }, flexColumnEndAlign1: { flexDirection: "column", alignItems: "flex-end", justifyContent: "flex-start", width: "100%", height: 90, borderRadius: 5, }, profileCard: { alignSelf: "center", padding: 0, margin: 0, marginTop: 1, fontWeight: "400", fontFamily: "Segoe UI", color: "black", height: 26, textAlign: "center", width: 90, fontSize: fontSize(18), }, beigeContainer: { flexDirection: "column", alignItems: "flex-end", justifyContent: "flex-start", height: 90, backgroundColor: "#e0e0e0", borderRadius: 5, }, colorPaletteWidget: { flexDirection: "column", alignItems: "flex-end", justifyContent: "flex-start", height: 90, borderRadius: 5, }, cardContainerWithTitle: { flexDirection: "column", alignItems: "stretch", justifyContent: "flex-start", width: 90, height: 116, paddingBottom: 5, backgroundColor: "#f4f4f4", borderRadius: 5, }, cardContainerWithImage: { flexDirection: "row", alignItems: "flex-start", justifyContent: "flex-start", borderRadius: 5, width: 90, height: 90, }, imageContainer: { width: "100%", height: "100%", borderWidth: 0, resizeMode: "cover", }, svgContainer3: { width: "100%", height: "100%", }, productStockInfoContainer: { marginTop: 24, }, productStockDisplayWidget: { width: "100%", marginTop: 8, }, stockAvailabilityDisplayWidget: { width: "100%", }, stockInfoDisplayContainer: { flexDirection: "row", gap: 8, alignItems: "center", justifyContent: "space-between", width: "100%", }, stockAvailabilityDisplay: { marginTop: 10, }, stockAvailabilityInfoStyle: { padding: 0, margin: 0, fontSize: 16, lineHeight: 20, fontFamily: "Segoe UI", color: "black", }, stockStatusInfoTextStyle: { padding: 0, margin: 0, fontWeight: "400", fontSize: 12, fontFamily: "Segoe UI", color: "#7c7c7c", }, stockInfoContainer: { flexDirection: "row", gap: 7.5, alignItems: "center", justifyContent: "flex-start", }, stockCountDisplayStyleContainer: { width: 9, borderTopWidth: 1, borderTopColor: "black", }, stockCountDisplayStyleContainer1: { alignItems: "center", justifyContent: "center", height: 24, paddingHorizontal: 15, fontWeight: "400", fontSize: 14, fontFamily: "Segoe UI", color: "black", backgroundColor: "#f4f4f4", borderWidth: 0, borderRadius: 5, }, svgContainer4: { width: 8, height: 8, }, verticalFlexContainer: { flexDirection: "column", alignItems: "stretch", justifyContent: "flex-start", width: "100%", marginTop: 10, }, numberTextContainer: { padding: 0, margin: 0, fontWeight: "400", fontSize: 16, lineHeight: 20, fontFamily: "Segoe UI", color: "black", }, verticalAlignBottom: { flexDirection: "column", alignItems: "flex-end", justifyContent: "center", marginTop: -4, }, verticalAlignContainer: { alignSelf: "flex-start", paddingRight: 33, paddingLeft: 322, marginTop: -4.5, }, borderBoxedWidthBlackTopLine: { width: 9, borderTopWidth: 1, borderTopColor: "black", }, closeIconContainer: { position: "absolute", top: 15, right: 15, zIndex: 1, }, selectedColorImageContainer: { borderWidth: 1, borderColor: "#ff5217", }, }); export default ProductCard;