All files / app/features/messages/groupchats ChatContent.tsx

92.3% Statements 12/13
60% Branches 3/5
100% Functions 3/3
91.66% Lines 11/12

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 681x 1x 1x 1x         1x 31x                 1x                                         45x       31x                                 31x           45x  
import { styled } from "@mui/material";
import CenteredSpinner from "components/CenteredSpinner/CenteredSpinner";
import InfiniteMessageLoader from "features/messages/messagelist/InfiniteMessageLoader";
import MessageList from "features/messages/messagelist/MessageList";
import { GetGroupChatMessagesRes } from "proto/conversations_pb";
import { HostRequest } from "proto/requests_pb";
import { InfiniteData } from "react-query";
 
const StyledInfiniteMessageLoader = styled(InfiniteMessageLoader)(
  ({ theme }) => ({
    padding: theme.spacing(2, 2),
 
    [theme.breakpoints.down("md")]: {
      padding: theme.spacing(1, 1),
    },
  })
);
 
const ChatContent = ({
  isHostRequest,
  isLoading,
  hostRequest,
  messages,
  fetchNextPage,
  isFetchingNextPage,
  hasNextPage,
  markLastSeen,
  isError,
}: {
  isHostRequest: boolean;
  isLoading: boolean;
  hostRequest?: HostRequest.AsObject | undefined;
  messages: InfiniteData<GetGroupChatMessagesRes.AsObject> | undefined;
  fetchNextPage: () => void;
  isFetchingNextPage: boolean;
  hasNextPage: boolean;
  markLastSeen: (messageId: number) => void;
  isError: boolean;
}) => {
  if (isLoading) {
    return <CenteredSpinner minHeight="100%" />;
  }
 
  Iif (!messages || (isHostRequest && !hostRequest)) {
    return null;
  }
 
  return (
    <StyledInfiniteMessageLoader
      earliestMessageId={
        messages.pages[messages.pages.length - 1].lastMessageId
      }
      latestMessage={messages.pages[0].messagesList[0]}
      fetchNextPage={fetchNextPage}
      isFetchingNextPage={isFetchingNextPage}
      hasNextPage={!!hasNextPage}
      isError={isError}
    >
      <MessageList
        markLastSeen={markLastSeen}
        messages={messages.pages.map((page) => page.messagesList).flat()}
      />
    </StyledInfiniteMessageLoader>
  );
};
 
export default ChatContent;