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.

DirectChatContentHeader.js 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import React, { useState } from "react";
  2. import PropTypes from "prop-types";
  3. import {
  4. DirectChatContentHeaderContainer,
  5. DirectChatContentHeaderFlexContainer,
  6. DirectChatHeaderStatusContainer,
  7. DirectChatHeaderStatusText,
  8. PhoneIcon,
  9. PhoneIconContainer,
  10. ProfileDetails,
  11. ProfileImage,
  12. ProfileLocation,
  13. ProfileLocationIcon,
  14. ProfileLocationText,
  15. ProfileName,
  16. } from "./DirectChatContentHeader.styled";
  17. import PopoverComponent from "../../../Popovers/PopoverComponent";
  18. import PhonePopover from "../../../Popovers/PhonePopover/PhonePopover";
  19. import { getImageUrl, variants } from "../../../../util/helpers/imageUrlGetter";
  20. import useIsMobile from "../../../../hooks/useIsMobile";
  21. import history from "../../../../store/utils/history";
  22. import { replaceInRoute } from "../../../../util/helpers/routeHelpers";
  23. import { PROFILE_PAGE } from "../../../../constants/pages";
  24. import { selectAmIBlocked } from "../../../../store/selectors/profileSelectors";
  25. import { useSelector } from "react-redux";
  26. import { useTranslation } from "react-i18next";
  27. import exchangeStatus from "../../../../constants/exchangeStatus";
  28. const DirectChatContentHeader = (props) => {
  29. const { t } = useTranslation();
  30. const [showPhonePopover, setShowPhonePopover] = useState(false);
  31. const [phonePopoverAnchorEl, setPhonePopoverAnchorEl] = useState(null);
  32. const { isMobile } = useIsMobile();
  33. const mineProfileBlocked = useSelector(selectAmIBlocked);
  34. const togglePhonePopover = (event) => {
  35. if (props.interlocutor?.company?.contacts?.telephone) {
  36. setShowPhonePopover((prevState) => !prevState);
  37. setPhonePopoverAnchorEl((prevState) => {
  38. if (prevState) return null;
  39. return event.target;
  40. });
  41. }
  42. };
  43. const routeToUser = () => {
  44. if (!props?.interlocutor?._blocked)
  45. history.push(
  46. replaceInRoute(PROFILE_PAGE, {
  47. profileId: props?.interlocutor?._id,
  48. })
  49. );
  50. };
  51. return (
  52. <>
  53. <DirectChatContentHeaderContainer>
  54. <DirectChatContentHeaderFlexContainer>
  55. <ProfileImage
  56. onClick={routeToUser}
  57. src={getImageUrl(
  58. props?.interlocutor?.image,
  59. variants.chatHeader,
  60. isMobile
  61. )}
  62. />
  63. <ProfileDetails>
  64. <ProfileName onClick={routeToUser}>
  65. {props?.interlocutor?.company?.name}
  66. </ProfileName>
  67. <ProfileLocation>
  68. <ProfileLocationIcon />
  69. <ProfileLocationText>
  70. {props?.interlocutor?.company?.contacts?.location}
  71. </ProfileLocationText>
  72. </ProfileLocation>
  73. </ProfileDetails>
  74. </DirectChatContentHeaderFlexContainer>
  75. <DirectChatContentHeaderFlexContainer>
  76. <PhoneIconContainer
  77. disabled={
  78. mineProfileBlocked ||
  79. props?.interlocutor?._blocked ||
  80. !props.interlocutor?.company?.contacts?.telephone
  81. }
  82. onClick={togglePhonePopover}
  83. >
  84. <PhoneIcon />
  85. </PhoneIconContainer>
  86. </DirectChatContentHeaderFlexContainer>
  87. <PopoverComponent
  88. anchorEl={phonePopoverAnchorEl}
  89. open={showPhonePopover}
  90. anchorRight
  91. onClose={togglePhonePopover}
  92. content={
  93. <PhonePopover
  94. phoneNumber={props.interlocutor?.company?.contacts?.telephone}
  95. />
  96. }
  97. />
  98. </DirectChatContentHeaderContainer>
  99. {(props.exchangeState === exchangeStatus.I_OFFERED ||
  100. props.exchangeState === exchangeStatus.ACCEPTED ||
  101. props.exchangeState === exchangeStatus.REVIEWED) && (
  102. <DirectChatHeaderStatusContainer>
  103. <DirectChatHeaderStatusText>
  104. {props.exchangeState === exchangeStatus.I_OFFERED
  105. ? t("messages.requestSentLong")
  106. : t("messages.requestSuccessfulLong")}
  107. </DirectChatHeaderStatusText>
  108. </DirectChatHeaderStatusContainer>
  109. )}
  110. </>
  111. );
  112. };
  113. DirectChatContentHeader.propTypes = {
  114. children: PropTypes.node,
  115. interlocutor: PropTypes.any,
  116. exchangeState: PropTypes.bool,
  117. };
  118. export default DirectChatContentHeader;