| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- import React, { useMemo, useState } from "react";
- import PropTypes from "prop-types";
- import {
- CheckButton,
- DetailIcon,
- DetailText,
- EditIcon,
- EditIconContainer,
- EyeIcon,
- Line,
- MessageIcon,
- OfferAuthor,
- OfferAuthorName,
- OfferCardContainer,
- OfferCategory,
- OfferDescription,
- OfferDescriptionText,
- OfferDescriptionTitle,
- OfferDetails,
- OfferFlexContainer,
- OfferImage,
- OfferImageContainer,
- OfferInfo,
- OfferLocation,
- OfferTitle,
- OfferTitleAboveImage,
- OfferViews,
- PinIcon,
- RemoveIcon,
- RemoveIconContainer,
- LikeIcon,
- LikeIconContainer,
- } from "./OfferCard.styled";
- import DeleteOffer from "./DeleteOffer/DeleteOffer";
- import { ReactComponent as Category } from "../../../assets/images/svg/category.svg";
- import { ReactComponent as Message } from "../../../assets/images/svg/mail.svg";
- import selectedTheme from "../../../themes";
- import { useHistory } from "react-router-dom";
- import CreateOffer from "../CreateOfferCard/CreateOffer";
- import { useSelector } from "react-redux";
- import { selectUserId } from "../../../store/selectors/loginSelectors";
-
- const OfferCard = (props) => {
- const [deleteOfferModal, setDeleteOfferModal] = useState(false);
- const [editOfferModal, setEditOfferModal] = useState(false);
- const history = useHistory();
- const userId = useSelector(selectUserId);
-
- const routeToItem = (itemId) => {
- history.push(`/proizvodi/${itemId}`);
- };
- const messageUser = () => {
- props.messageUser(props.offer);
- };
- const makeReview = () => {
- if (!props.disabledReviews) {
- props.makeReview(props.offer);
- }
- };
-
- const closeModalHandler = () => {
- setDeleteOfferModal(false);
- };
-
- const closeCreateOfferModal = () => {
- setEditOfferModal(false);
- };
-
- const showMessageIcon = useMemo(() => {
- if (userId === props.offer?.userId) {
- return false;
- }
- return true;
- }, [userId, props.offer]);
-
- if (deleteOfferModal || editOfferModal) {
- document.body.style.overflow = "hidden";
- } else {
- document.body.style.overflow = "auto";
- }
-
- return (
- <React.Fragment>
- <OfferCardContainer
- vertical={props.vertical}
- sponsored={
- props?.pinned !== undefined
- ? props?.pinned?.toString()
- : props?.offer?.pinned?.toString()
- }
- halfwidth={props.halfwidth ? 1 : 0}
- >
- <OfferTitleAboveImage
- vertical={props.vertical}
- onClick={() => routeToItem(props?.offer?._id)}
- >
- {props?.offer?.name}
- </OfferTitleAboveImage>
- <OfferFlexContainer vertical={props.vertical}>
- <OfferImageContainer vertical={props.vertical}>
- <OfferImage
- src={props?.offer?.images ? props?.offer?.images[0] : ""}
- vertical={props.vertical}
- ></OfferImage>
- </OfferImageContainer>
- <OfferInfo vertical={props.vertical}>
- <OfferTitle
- vertical={props.vertical}
- onClick={() => routeToItem(props?.offer?._id)}
- >
- {props?.offer?.name}
- </OfferTitle>
- <OfferAuthor>
- <OfferAuthorName vertical={props.vertical}>
- {props?.offer?.user?.company?.name}
- </OfferAuthorName>
- <OfferLocation vertical={props.vertical}>
- {props?.offer?.location?.city}
- </OfferLocation>
- </OfferAuthor>
- <OfferDetails>
- <OfferCategory vertical={props.vertical}>
- <DetailIcon color="black" component="span" size="16px">
- <Category width={"14px"} />
- </DetailIcon>
- <DetailText>{props?.offer?.category?.name}</DetailText>
- </OfferCategory>
- {props.dontShowViews ? (
- <></>
- ) : (
- <OfferViews vertical={props.vertical}>
- <DetailIcon color="black" component="span" size="16px">
- <EyeIcon />
- </DetailIcon>
- <DetailText>{props?.offer?.views?.count}</DetailText>
- </OfferViews>
- )}
- </OfferDetails>
- </OfferInfo>
- {!props.halfwidth ? (
- <React.Fragment>
- <Line />
- <OfferDescription>
- <OfferDescriptionTitle>Opis:</OfferDescriptionTitle>
- <OfferDescriptionText>
- {props?.offer?.description}
- </OfferDescriptionText>
- </OfferDescription>
-
- <CheckButton
- variant={props.sponsored ? "contained" : "outlined"}
- buttoncolor={selectedTheme.primaryPurple}
- textcolor={
- props.sponsored ? "white" : selectedTheme.primaryPurple
- }
- style={{ fontWeight: "600" }}
- onClick={() => routeToItem(props?.offer?._id)}
- >
- Pogledaj proizvod
- </CheckButton>
- </React.Fragment>
- ) : (
- <></>
- )}
-
- {props.isMyOffer ? (
- <>
- <RemoveIconContainer
- vertical={props.vertical}
- onClick={() => setDeleteOfferModal(true)}
- >
- <RemoveIcon />
- </RemoveIconContainer>
- <EditIconContainer
- vertical={props.vertical}
- onClick={() => setEditOfferModal(true)}
- >
- <EditIcon />
- </EditIconContainer>
- </>
- ) : props.aboveChat ? (
- <LikeIconContainer
- disabled={props.disabledReviews}
- onClick={makeReview}
- >
- <LikeIcon disabled={props.disabledReviews} />
- </LikeIconContainer>
- ) : (
- <MessageIcon
- showMessageIcon={showMessageIcon}
- vertical={props.vertical}
- onClick={messageUser}
- >
- <Message />
- </MessageIcon>
- )}
- {props?.offer?.pinned && <PinIcon isMyOffer={props.isMyOffer} />}
- </OfferFlexContainer>
- </OfferCardContainer>
- {deleteOfferModal && (
- <DeleteOffer
- offer={props.offer}
- closeModalHandler={closeModalHandler}
- />
- )}
- {editOfferModal && (
- <CreateOffer
- editOffer
- closeCreateOfferModal={closeCreateOfferModal}
- offer={props.offer}
- />
- )}
- </React.Fragment>
- );
- };
-
- OfferCard.propTypes = {
- children: PropTypes.node,
- _id: PropTypes.string,
- title: PropTypes.string,
- description: PropTypes.string,
- category: PropTypes.string,
- author: PropTypes.string,
- location: PropTypes.string,
- image: PropTypes.node,
- quantity: PropTypes.number,
- package: PropTypes.string,
- numberOfViews: PropTypes.number,
- halfwidth: PropTypes.bool,
- sponsored: PropTypes.bool,
- offer: PropTypes.any,
- pinned: PropTypes.bool,
- vertical: PropTypes.bool,
- isMyOffer: PropTypes.bool,
- aboveChat: PropTypes.bool,
- disabledReviews: PropTypes.bool,
- messageUser: PropTypes.func,
- makeReview: PropTypes.func,
- dontShowViews: PropTypes.bool,
- skeleton: PropTypes.bool,
- };
- OfferCard.defaultProps = {
- halfwidth: false,
- sponsored: false,
- messageUser: () => {},
- makeReview: () => {},
- };
-
- export default OfferCard;
|