import React, { useState, useEffect } from "react"; import { View, Text, Image, ScrollView, TouchableHighlight, Dimensions, Platform, ActivityIndicator, } 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 separate from "../../../utils/separate"; //components import LinkBox from "./LinkBox"; import Comments from "./Comments"; import Rates from "./Rates"; //style import tw from "tailwind-rn"; import fontSize from "../../../constants/fontSize"; import Colors from "../../../constants/Colors"; const ios = Platform.OS === "ios"; function Book({ book, grades, pushToCart, userId, userProductsLoading, userFavoriteLoading, mobile, userProducts, theme, orientation, availableForSell, }) { const [width, setWidth] = React.useState(Dimensions.get("window").width); const navigation = useNavigation(); const [whichTypeAdded, setWhichTypeAdded] = React.useState(null); const physicalAvailableForSell = React.useMemo(() => { return availableForSell?.filter((product) => product === 2)?.length; }, [availableForSell]); const digitalAvailableForSell = React.useMemo(() => { return availableForSell?.filter((product) => product === 1)?.length; }, [availableForSell]); const videoAvailableForSell = React.useMemo(() => { return availableForSell?.filter((product) => product === 4)?.length; }, [availableForSell]); const physicalProduct = React.useMemo(() => { return book?.product?.filter((product) => product?.productType === 2)[0]; }, [book]); const digitalProduct = React.useMemo(() => { return book?.product?.filter((product) => product?.productType === 1)[0]; }, [book]); const videoProduct = React.useMemo(() => { return book?.product?.filter((product) => product?.productType === 4)[0]; }, [book]); const physicalAvailabileInCart = React.useMemo(() => { return userProducts?.filter( (product) => product?.productId === physicalProduct?.id && product?.condition < 2 )?.length; }, [userProducts, book]); const digitalAvailabileInCart = React.useMemo(() => { return userProducts?.filter( (product) => product?.productId === digitalProduct?.id && product?.condition < 2 )?.length; }, [userProducts, book]); const videoAvailabileInCart = React.useMemo(() => { return userProducts?.filter( (product) => product?.productId === videoProduct?.id && product?.condition < 2 )?.length; }, [userProducts, book]); const addToCart = React.useCallback( async (action, type) => { setWhichTypeAdded(type); action(); }, [book, userId] ); React.useEffect(() => { if (userProducts?.length && whichTypeAdded) { setTimeout(() => { if (whichTypeAdded === "video" && videoAvailabileInCart) { asyncAwesomeAlert("", "به سبد خرید اضافه شد", { showCancelButton: true, onConfirm: () => navigation.navigate("Root", { screen: "ShoppingCartTab", }), confirmText: "مشاهده سبد خرید", cancelText: "ادامه خرید", }); } else if (whichTypeAdded === "physical" && physicalAvailabileInCart) { asyncAwesomeAlert("", "به سبد خرید اضافه شد", { showCancelButton: true, onConfirm: () => navigation.navigate("Root", { screen: "ShoppingCartTab", }), confirmText: "مشاهده سبد خرید", cancelText: "ادامه خرید", }); } else if (whichTypeAdded === "digital" && digitalAvailabileInCart) { asyncAwesomeAlert("", "به سبد خرید اضافه شد", { showCancelButton: true, onConfirm: () => navigation.navigate("Root", { screen: "ShoppingCartTab", }), confirmText: "مشاهده سبد خرید", cancelText: "ادامه خرید", }); } setWhichTypeAdded(null); }, 500); } }, [userProducts]); const ProductButton = ({ availableInCart, availableForSell, product, type, onLoad, title, sample, sampleAction, }) => { return product ? ( availableInCart ? asyncAwesomeAlert( "", "این محصول قبلا به سبد خرید شما اضافه شده است.", { showCancelButton: true, onConfirm: () => navigation.navigate("Root", { screen: "ShoppingCartTab", }), confirmText: "مشاهده سبد خرید", cancelText: "باشه", } ) : availableForSell ? addToCart( pushToCart({ productId: product?.id, userId: userId, count: 1, }), type ) : null } > <> {onLoad ? ( ) : ( {title} )} {availableForSell ? (separate(product?.price) || " ") + " " + "تومان" : "ناموجود"} {sample ? ( sampleAction()} > مشاهده نمونه ) : null} ) : null; }; return ( setWidth(Dimensions.get("window").width)} > {!mobile ? : null} {/* {imageSlider ? : null} */} {book?.name || ""} {"پایه" + " " + (grades[book?.gradeId] || " ")} {" "} {(book?.pagesNum || " ") + "\n" + "صفحه"} {" "} {`${ videoProduct ? "ویدئو" : "" + physicalProduct ? "فیزیکی" : "" + digitalProduct ? "دیجیتال" : "" } \n در دسترس`} {" "} {book?.rate || 4 + "\n" + "امتیاز"} {book?.product?.length > 1 ? ( نسخه محصول را انتخاب کنید ) : null} navigation.push("Sample", { id: book?.sampleFileId }) } /> navigation.navigate("Video", { id: book?.id })} /> {}} /> {book?.text ? ( navigation.push("Info", { type: { name: "توضیحات", value: "productDescription" }, data: book?.text, }) } /> ) : null} navigation.push("Info", { type: { name: "مشخصات محصول", value: "productSpecifications" }, data: [], }) } /> navigation.push("Info", { type: { name: "نقد و بررسی", value: "productReview" }, data: [], }) } /> navigation.push("Info", { type: { name: "پرسش و پاسخ", value: "productQuestion" }, data: [], }) } /> {book?.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, orientation: state.publicApi.orientation, theme: state.publicApi.theme, availableForSell: state.config.availableForSell, }); const mapDispatchToProps = { pushToCart: userProduct.add, }; export default connect(mapStateToProps, mapDispatchToProps)(Book);