import React, { useState, useEffect } from "react"; import { View, Text, Image, ScrollView, TouchableHighlight, Dimensions, Platform, } from "react-native"; import { useNavigation } from "@react-navigation/native"; import { product, userProduct } from "../../../redux/actions"; import { asyncAwesomeAlert } from "../../../utils/AsyncWrappers"; import { connect } from "react-redux"; import { Entypo } from "@expo/vector-icons"; import separate from "../../../utils/separate"; //components import Description from "./Description"; import LinkBox from "./LinkBox"; import Comments from "./Comments"; import Blur from "../../../components/Blur"; import ImageSlider from "../../../components/ImageSlider"; import Rates from "./Rates"; //style import tw from "tailwind-rn"; import fontSize from "../../../constants/fontSize"; import Colors from "../../../constants/Colors"; const { height, width } = Dimensions.get("window"); const ios = Platform.OS === "ios"; function Book({ book, grades, pushToCart, userId, userProductsLoading, userFavoriteLoading, mobile, userProducts, theme, }) { const navigation = useNavigation(); const [type, setType] = useState(1); const [whichTypeAdded, setWhichTypeAdded] = React.useState(null); const [pageLoading, setPageLoading] = useState(false); const [imageSlider, setImageSlider] = useState(false); useEffect(() => { setPageLoading(true); setTimeout(() => { setPageLoading(false); }, 500); }, [type]); const physicalAvailabileInCart = React.useMemo(() => { return userProducts?.filter( (product) => product?.productId === book?.product[1]?.id )[0]; }, [userProducts, book]); const digitalAvailabileInCart = React.useMemo(() => { return userProducts?.filter( (product) => product?.productId === book?.product[0]?.id )[0]; }, [userProducts, book]); const videoAvailabileInCart = React.useMemo(() => { return userProducts?.filter( (product) => product?.productId === book?.product[2]?.id )[0]; }, [userProducts, book]); const addToCart = React.useCallback( async (action, type) => { setWhichTypeAdded(type); await action(); }, [book, userId] ); React.useEffect(() => { if (userProducts.length && whichTypeAdded) { setTimeout(() => { if (whichTypeAdded === "video" && videoAvailabileInCart) { asyncAwesomeAlert("", "به سبد خرید اضافه شد", { showCancelButton: true, onConfirm: () => navigation.navigate("ShoppingCartTab", { screen: "ShoppingCart", }), confirmText: "مشاهده سبد خرید", cancelText: "ادامه خرید", }); } else if (whichTypeAdded === "physical" && physicalAvailabileInCart) { asyncAwesomeAlert("", "به سبد خرید اضافه شد", { showCancelButton: true, onConfirm: () => navigation.navigate("ShoppingCartTab", { screen: "ShoppingCart", }), confirmText: "مشاهده سبد خرید", cancelText: "ادامه خرید", }); } else if (whichTypeAdded === "digital" && digitalAvailabileInCart) { asyncAwesomeAlert("", "به سبد خرید اضافه شد", { showCancelButton: true, onConfirm: () => navigation.navigate("ShoppingCartTab", { screen: "ShoppingCart", }), confirmText: "مشاهده سبد خرید", cancelText: "ادامه خرید", }); } setWhichTypeAdded(null); }, 500); } }, [userProducts]); return ( {!mobile ? : null} {!book ? ( ) : null} {imageSlider ? : null} {book?.name} {"پایه" + " " + grades[book?.gradeId]} {book?.text} {" "} {book?.pagesNum + "\n" + "صفحه"} {" "} {"فیزیکی- دیجیتالی - ویدئو" + "\n" + "در دسترس"} {" "} {4.8 + "\n" + "امتیاز"} نسخه محصول را انتخاب کنید physicalAvailabileInCart ? asyncAwesomeAlert( "", "این محصول قبلا به سبد خرید شما اضافه شده است.", { showCancelButton: true, onConfirm: () => navigation.push("ShoppingCart"), confirmText: "مشاهده سبد خرید", cancelText: "باشه", } ) : addToCart( pushToCart({ productId: book?.product[1]?.id, userId: userId, count: 1, }), "physical" ) } > <> خرید نسخه فیزیکی کتاب {separate(book?.product[1]?.price) + " " + "تومان"} digitalAvailabileInCart ? asyncAwesomeAlert( "", "این محصول قبلا به سبد خرید شما اضافه شده است.", { showCancelButton: true, onConfirm: () => navigation.push("ShoppingCart"), confirmText: "مشاهده سبد خرید", cancelText: "باشه", } ) : addToCart( pushToCart({ productId: book?.product[0]?.id, userId: userId, count: 1, }), "digital" ) } > <> خرید نسخه دیجیتال کتاب {separate(book?.product[0]?.price) + " " + "تومان"} navigation.push("Sample", { id: book?.sampleFileId })} > مشاهده نمونه videoAvailabileInCart ? asyncAwesomeAlert( "", "این محصول قبلا به سبد خرید شما اضافه شده است.", { showCancelButton: true, onConfirm: () => navigation.push("ShoppingCart"), confirmText: "مشاهده سبد خرید", cancelText: "باشه", } ) : addToCart( pushToCart({ productId: book?.product[2]?.id, userId: userId, count: 1, }), "video" ) } > <> خرید دوره ویدئویی کتاب {separate(book?.product[2]?.price) + " " + "تومان"} navigation.navigate("Video", { id: book?.id })} > پیش نمایش {book?.product[type]?.description ? ( ) : null} navigation.push("Info", { type: { name: "مشخصات محصول", value: "productSpecifications" }, }) } /> navigation.push("Info", { type: { name: "نقد و بررسی", value: "productReview" }, }) } /> navigation.push("Info", { type: { name: "پرسش و پاسخ", value: "productQuestion" }, }) } /> {product.rate || 4 ? ( <> امتیازات و نظرات ) : null} ); } const mapStateToProps = (state) => ({ userProducts: state.userProduct.list, userId: state.user.status?.id, userProductsLoading: state.userProduct.loading, userFavoriteLoading: state.userFavorite.loading, mobile: state.publicApi.mobile, theme: state.publicApi.theme, }); const mapDispatchToProps = { pushToCart: userProduct.add, }; export default connect(mapStateToProps, mapDispatchToProps)(Book);