All files / src/features/Merchants/MerchantSidePanel/WithRepository/Challenges Conversations.tsx

80% Statements 12/15
80% Branches 8/10
66.66% Functions 2/3
80% Lines 12/15

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 79 80 81 82 83 84 85 86                                        21x               566x 566x 566x           566x   566x       566x   154x 154x   154x       566x                           566x                                        
import { HiddenComponent } from "@containers/HiddenComponent";
import { MerchantType } from "@customTypes/merchant.preview.types";
import { useOpenGiveConversation } from "@features/GiveConversation/hooks/useOpenGiveConversation";
import { useGetFeatureFlagValues } from "FeatureFlags/useGetFeatureFlagValues";
import ConversationModal from "features/Minibuilders/Conversations/Modal/ConversationsModal_V2";
import { useConversationsModal } from "features/Minibuilders/Conversations/hooks/useConversationsModal";
import {
  TConversationTopic,
  useListTopics,
} from "features/Minibuilders/Conversations/hooks/useListTopics";
import { calculateTotalUnreadSum } from "features/Minibuilders/Conversations/utils/functions";
 
type ConversationsProps = MerchantType & {
  isLoading: boolean;
  isLoadingChangelog?: boolean;
  handleOpenManageUnderwriting?: () => void;
  shouldShowChangelog?: boolean;
  isOpenParent?: boolean;
};
 
const Conversations = ({
  merchant,
  isLoading,
  isLoadingChangelog,
  handleOpenManageUnderwriting,
  shouldShowChangelog,
  isOpenParent,
}: ConversationsProps) => {
  const { isOpen, handleOpenConversationsModal } = useConversationsModal();
  const { isNewConversationsEnabled } = useGetFeatureFlagValues();
  const { handleOpenConversation } = useOpenGiveConversation();
 
  const {
    data,
    isLoading: isTopicDataLoading,
    isFetching,
  } = useListTopics({ merchantId: merchant?.accID });
 
  const { totalUnread, hasUnreadActivity } = calculateTotalUnreadSum(
    data?.data,
  );
 
  const sortedData = Array.isArray(data?.data)
    ? data?.data?.sort((a: TConversationTopic, b: TConversationTopic) => {
        const aLastActivity = a.lastActivity ?? 0;
        const bLastActivity = b.lastActivity ?? 0;
 
        return bLastActivity - aLastActivity;
      })
    : [];
 
  const openConv = (open?: boolean) => {
    if (isNewConversationsEnabled)
      handleOpenConversation({
        merchantData: {
          id: merchant?.accID,
          name: merchant?.name,
          imageURL: merchant?.imageURL,
          pahInvitationStatus: merchant?.ownerMembership?.memberStatus,
          isOnboarding: merchant?.onbStateName === "onboarding",
        },
      });
    else handleOpenConversationsModal(open);
  };
 
  return (
    <>
      <HiddenComponent hidden={!isOpen || !isOpenParent}>
        <ConversationModal
          merchant={merchant}
          hasUnreadActivity={hasUnreadActivity}
          isLoading={isLoading}
          totalUnread={totalUnread}
          handleOpenManageUnderwriting={openConv}
          isFetching={isFetching}
          data={sortedData as TConversationTopic[]}
          isLoadingChangelog={isLoadingChangelog}
          shouldShowChangelog={shouldShowChangelog}
        />
      </HiddenComponent>
    </>
  );
};
 
export default Conversations;