All files / app/features/messages/requests HostRequestReferenceCard.tsx

0% Statements 0/24
0% Branches 0/10
0% Functions 0/4
0% Lines 0/21

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78                                                                                                                                                           
import { Box, styled, Typography } from "@mui/material";
import Button from "components/Button";
import { useAuthContext } from "features/auth/AuthProvider";
import { useListAvailableReferences } from "features/profile/hooks/referencesHooks";
import { useTranslation } from "i18n";
import { MESSAGES } from "i18n/namespaces";
import Link from "next/link";
import { HostRequestStatus } from "proto/conversations_pb";
import { ReferenceType } from "proto/references_pb";
import { HostRequest } from "proto/requests_pb";
import { referenceTypeRoute, routeToLeaveReference } from "routes";
 
const StyledCard = styled(Box)(({ theme }) => ({
  background: "var(--mui-palette-grey-50)",
  borderRadius: theme.shape.borderRadius * 2,
  padding: theme.spacing(2),
  display: "flex",
  flexDirection: "column",
  gap: theme.spacing(1.5),
  alignSelf: "flex-start",
}));
 
const StyledButtonRow = styled(Box)(({ theme }) => ({
  display: "flex",
  justifyContent: "flex-end",
  gap: theme.spacing(1),
}));
 
export default function HostRequestReferenceCard({
  hostRequest,
}: {
  hostRequest: HostRequest.AsObject;
}) {
  const { t } = useTranslation(MESSAGES);
  const { authState } = useAuthContext();
 
  const isHost = hostRequest.hostUserId === authState.userId;
 
  const { data: availableReferences } = useListAvailableReferences(
    isHost ? hostRequest.surferUserId : hostRequest.hostUserId,
  );
 
  const isReferenceAvailable =
    (hostRequest.status === HostRequestStatus.HOST_REQUEST_STATUS_CONFIRMED ||
      hostRequest.status === HostRequestStatus.HOST_REQUEST_STATUS_ACCEPTED) &&
    availableReferences?.availableWriteReferencesList.find(
      ({ hostRequestId }) => hostRequestId === hostRequest.hostRequestId,
    );
 
  Iif (!isReferenceAvailable) return null;
 
  const referenceRoute = routeToLeaveReference(
    referenceTypeRoute[
      isHost
        ? ReferenceType.REFERENCE_TYPE_HOSTED
        : ReferenceType.REFERENCE_TYPE_SURFED
    ],
    isHost ? hostRequest.surferUserId : hostRequest.hostUserId,
    hostRequest.hostRequestId,
  );
 
  return (
    <StyledCard>
      <div>
        <Typography variant="subtitle2">{t("reference_card.title")}</Typography>
        <Typography variant="body2" color="text.secondary">
          {t("reference_card.description")}
        </Typography>
      </div>
      <StyledButtonRow>
        <Button component={Link} href={referenceRoute}>
          {t("write_reference_button_text")}
        </Button>
      </StyledButtonRow>
    </StyledCard>
  );
}