Viewing File: /home/ubuntu/misabloom-frontend-base/src/components/Product/ProductCard.jsx
import React, { useState, useEffect } from "react";
import { Link } from "react-router-dom";
import { Image } from "react-bootstrap";
import {
deleteCartDetailsStart,
guestCartList,
saveCartDetailsStart,
} from "../store/actions/CartsAction";
import { connect } from "react-redux";
import { useNavigate } from "react-router-dom";
import ReactStars from "react-rating-stars-component";
import { withTranslation, useTranslation } from "react-multi-lang";
import CustomLazyLoad from "../Helper/CustomLazyLoad";
import { saveWishlistsStart } from "../store/actions/ProductAction";
import ThcProgress from "./ThcProgress";
import CbdProgress from "./CbdProgress";
const ProductCard = (props) => {
const navigate = useNavigate();
const { product } = props;
const t = useTranslation();
const [isCarted, setIsCarted] = useState(false);
useEffect(() => {
if (
props.guestCartList.filter(
(cartProduct) => cartProduct.product_id === product.product_id
).length > 0
) {
setIsCarted(true);
} else {
setIsCarted(false);
}
}, [product, props.guestCartList]);
const onCartClickUser = (e) => {
e.stopPropagation();
if (!props.cartSave.buttonDisable && !props.cartDelete.buttonDisable) {
if (product.is_carted === 0) {
props.dispatch(
saveCartDetailsStart({
product_id: product.product_id,
quantity: 1,
})
);
} else {
props.dispatch(
deleteCartDetailsStart({
product_id: product.product_id,
})
);
}
}
};
const onGuestCartClick = (e) => {
e.preventDefault();
let cartItems = [];
if (!isCarted) {
const cartProduct = {
product_id: product.product_id,
quantity: 1,
};
cartItems = [...props.guestCartList, cartProduct];
} else {
cartItems = props.guestCartList.filter(
(cartedProduct) => cartedProduct.product_id !== product.product_id
);
}
localStorage.setItem("carts", JSON.stringify(cartItems));
props.dispatch(guestCartList(cartItems));
};
const wishListToggle = (e) => {
e.preventDefault();
if (Object.keys(props.profile.data).length > 0) {
props.dispatch(
saveWishlistsStart({
product_unique_id: product.product_unique_id,
})
);
} else {
localStorage.setItem("product", product.product_unique_id);
navigate("/login");
}
};
return (
<div className="product-search-result-grid-card">
<Link
to={`/product/${product.product_unique_id}`}
className="no-link"
>
<div className="product-search-result-img-sec">
{/* <Image
className="product-search-result-img"
src={product.file}
type="image/png"
/> */}
<CustomLazyLoad
src={product.file}
classes="product-search-result-img"
placeholderSrc={window.location.origin + "/images/loading.svg"}
alt={product.name}
/>
</div>
{product.discount_tag ? (
<div className="product-offer-sec">{product.discount_tag}</div>
) : null}
<Link
to="#"
className="product-search-cart-icon-sec"
onClick={wishListToggle}
>
{product.is_wishlisted ? (
<Image
className="product-search-cart-icon"
src={window.location.origin + "/images/like-fill.svg"}
/>
) : (
<Image
className="product-search-cart-icon"
src={window.location.origin + "/images/like.svg"}
/>
)}
</Link>
<div className="product-cbd-value">
<div className="product-percentage">
{product.thc_drug_content ?
<div className="pack-icon">
<ThcProgress percentage={product.thc_avg} width="40px" height="40px" fontsize="0.8em" />
<div className="pack-value">{product.thc_formatted ? product.thc_formatted : '0%'}</div>
</div>
: null
}
{product.cbd_drug_content ?
<div className="pack-icon">
<CbdProgress percentage={product.cbd_avg} width="40px" height="40px" fontsize="0.8em" />
<div className="pack-value">{product.cbd_formatted ? product.cbd_formatted : '0%'}</div>
</div>
: null
}
</div>
</div>
<div className="product-search-result-info">
<h4>{product.name}</h4>
<p>{product.sub_category_name}</p>
<h3>
{product.selling_price_formatted}{" "}
{product.discount_tag ? (
<sub>
<del>{product.original_price_formatted}</del>
</sub>
) : null}
</h3>
<div className="product-thc-value">
<h4>{product.plant_type}</h4>
</div>
{/* <ReactStars
count={5}
value={product.review_stars}
size={24}
isHalf={true}
edit={false}
emptyIcon={<i className="far fa-star"></i>}
halfIcon={<i className="fa fa-star-half-alt"></i>}
fullIcon={<i className="fa fa-star"></i>}
activeColor="#ffd700"
/> */}
{product.stock_status === 1 ? (
<div className="default-btn-sec">
{localStorage.getItem("userId") &&
Object.keys(props.profile.data).length > 0 ? (
<Link to="#" onClick={onCartClickUser} className="default-btn">
{props.cartSave.loadingButtonContent &&
props.cartSave.data.product_id === product.product_id
? props.cartSave.loadingButtonContent
: props.cartDelete.loadingButtonContent &&
props.cartDelete.data.product_id === product.product_id
? props.cartDelete.loadingButtonContent
: product.is_carted === 0
? t("add_to_cart")
: t("remove_from_cart")}
</Link>
) : (
<Link to="#" onClick={onGuestCartClick} className="default-btn">
{!isCarted ? t("add_to_cart") : t("remove_from_cart")}
</Link>
)}
</div>
) : (
<div className="text-danger">
{product.stock_availablity_formatted}
</div>
)}
</div>
</Link>
</div>
);
};
const mapStateToPros = (state) => ({
profile: state.users.profile,
guestCartList: state.carts.guestCartList,
cartSave: state.carts.cartSave,
cartDelete: state.carts.cartDelete,
});
function mapDispatchToProps(dispatch) {
return { dispatch };
}
export default connect(
mapStateToPros,
mapDispatchToProps
)(withTranslation(ProductCard));
Back to Directory
File Manager