You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

OfferCard.js 5.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. import React, { useState } from "react";
  2. import PropTypes from "prop-types";
  3. import {
  4. CheckButton,
  5. DetailIcon,
  6. DetailText,
  7. EditIcon,
  8. EditIconContainer,
  9. EyeIcon,
  10. Line,
  11. MessageIcon,
  12. OfferAuthor,
  13. OfferAuthorName,
  14. OfferCardContainer,
  15. OfferCategory,
  16. OfferDescription,
  17. OfferDescriptionText,
  18. OfferDescriptionTitle,
  19. OfferDetails,
  20. OfferFlexContainer,
  21. OfferImage,
  22. OfferImageContainer,
  23. OfferInfo,
  24. OfferLocation,
  25. OfferTitle,
  26. OfferTitleAboveImage,
  27. OfferViews,
  28. RemoveIcon,
  29. RemoveIconContainer,
  30. } from "./OfferCard.styled";
  31. import DeleteOffer from "./DeleteOffer";
  32. import { ReactComponent as Category } from "../../../assets/images/svg/category.svg";
  33. import { ReactComponent as Message } from "../../../assets/images/svg/mail.svg";
  34. import selectedTheme from "../../../themes";
  35. import { useHistory } from "react-router-dom";
  36. import CreateOffer from "../CreateOfferCard/CreateOffer";
  37. const OfferCard = (props) => {
  38. const [deleteOfferModal, setDeleteOfferModal] = useState(false);
  39. const [editOfferModal, setEditOfferModal] = useState(false);
  40. const history = useHistory();
  41. const routeToItem = (itemId) => {
  42. history.push(`/proizvodi/${itemId}`);
  43. };
  44. const closeModalHandler = () => {
  45. setDeleteOfferModal(false);
  46. };
  47. const closeCreateOfferModal = () => {
  48. setEditOfferModal(false);
  49. };
  50. if (deleteOfferModal || editOfferModal) {
  51. document.body.style.overflow = "hidden";
  52. } else {
  53. document.body.style.overflow = "auto";
  54. }
  55. console.log(props.offer);
  56. return (
  57. <React.Fragment>
  58. <OfferCardContainer
  59. vertical={props.vertical}
  60. sponsored={
  61. props.pinned !== undefined
  62. ? props.pinned.toString()
  63. : props?.offer?.pinned.toString()
  64. }
  65. halfwidth={props.halfwidth ? 1 : 0}
  66. >
  67. <OfferTitleAboveImage
  68. vertical={props.vertical}
  69. onClick={() => routeToItem(props?.offer?._id)}
  70. >
  71. {props?.offer?.name}
  72. </OfferTitleAboveImage>
  73. <OfferFlexContainer vertical={props.vertical}>
  74. <OfferImageContainer vertical={props.vertical}>
  75. <OfferImage
  76. src={props?.offer?.images[0]}
  77. vertical={props.vertical}
  78. ></OfferImage>
  79. </OfferImageContainer>
  80. <OfferInfo vertical={props.vertical}>
  81. <OfferTitle
  82. vertical={props.vertical}
  83. onClick={() => routeToItem(props?.offer?._id)}
  84. >
  85. {props?.offer?.name}
  86. </OfferTitle>
  87. <OfferAuthor>
  88. <OfferAuthorName vertical={props.vertical}>
  89. {props?.offer?.user?.company?.name}
  90. </OfferAuthorName>
  91. <OfferLocation vertical={props.vertical}>
  92. {props?.offer?.location?.city}
  93. </OfferLocation>
  94. </OfferAuthor>
  95. <OfferDetails>
  96. <OfferCategory vertical={props.vertical}>
  97. <DetailIcon color="black" component="span" size="16px">
  98. <Category width={"14px"} />
  99. </DetailIcon>
  100. <DetailText>{props?.offer?.category.name}</DetailText>
  101. </OfferCategory>
  102. <OfferViews vertical={props.vertical}>
  103. <DetailIcon color="black" component="span" size="16px">
  104. <EyeIcon />
  105. </DetailIcon>
  106. <DetailText>{props?.offer?.views?.viewers?.length}</DetailText>
  107. </OfferViews>
  108. </OfferDetails>
  109. </OfferInfo>
  110. {!props.halfwidth ? (
  111. <React.Fragment>
  112. <Line />
  113. <OfferDescription>
  114. <OfferDescriptionTitle>Opis:</OfferDescriptionTitle>
  115. <OfferDescriptionText>
  116. {props?.offer?.description}
  117. </OfferDescriptionText>
  118. </OfferDescription>
  119. <CheckButton
  120. variant={props.sponsored ? "contained" : "outlined"}
  121. buttoncolor={selectedTheme.primaryPurple}
  122. textcolor={
  123. props.sponsored ? "white" : selectedTheme.primaryPurple
  124. }
  125. style={{ fontWeight: "600" }}
  126. onClick={() => routeToItem(props?.offer?._id)}
  127. >
  128. Pogledaj proizvod
  129. </CheckButton>
  130. </React.Fragment>
  131. ) : (
  132. <></>
  133. )}
  134. {props.isMyOffer ? (
  135. <>
  136. <RemoveIconContainer
  137. vertical={props.vertical}
  138. onClick={() => setDeleteOfferModal(true)}
  139. >
  140. <RemoveIcon />
  141. </RemoveIconContainer>
  142. <EditIconContainer
  143. vertical={props.vertical}
  144. onClick={() => setEditOfferModal(true)}
  145. >
  146. <EditIcon />
  147. </EditIconContainer>
  148. </>
  149. ) : (
  150. <MessageIcon vertical={props.vertical}>
  151. <Message />
  152. </MessageIcon>
  153. )}
  154. </OfferFlexContainer>
  155. </OfferCardContainer>
  156. {deleteOfferModal && (
  157. <DeleteOffer
  158. offer={props.offer}
  159. closeModalHandler={closeModalHandler}
  160. />
  161. )}
  162. {editOfferModal && (
  163. <CreateOffer
  164. editOffer
  165. closeCreateOfferModal={closeCreateOfferModal}
  166. offer={props.offer}
  167. />
  168. )}
  169. </React.Fragment>
  170. );
  171. };
  172. OfferCard.propTypes = {
  173. children: PropTypes.node,
  174. _id: PropTypes.string,
  175. title: PropTypes.string,
  176. description: PropTypes.string,
  177. category: PropTypes.string,
  178. author: PropTypes.string,
  179. location: PropTypes.string,
  180. image: PropTypes.node,
  181. quantity: PropTypes.number,
  182. package: PropTypes.string,
  183. numberOfViews: PropTypes.number,
  184. halfwidth: PropTypes.bool,
  185. sponsored: PropTypes.bool,
  186. offer: PropTypes.any,
  187. pinned: PropTypes.bool,
  188. vertical: PropTypes.bool,
  189. isMyOffer: PropTypes.bool,
  190. };
  191. OfferCard.defaultProps = {
  192. halfwidth: false,
  193. sponsored: false,
  194. };
  195. export default OfferCard;