import React from "react"; import useTime from "../../../hooks/useTime"; import MessageCheck from "../../globals/MessageCheck"; import { useDispatch, useSelector } from "react-redux"; import { modalActions } from "../../../store/modalSlice"; import useModalBestPosition from "../../../hooks/useModalBestPosition"; import useChat from "../../../hooks/useChat"; import { chatListActions } from "../../../store/chatListSlice"; import Image from "../../globals/Image"; import { useEffect } from "react"; import { chatActions } from "../../../store/chatSlice"; import { useState } from "react"; function ChatItem({ chatData }) { // Chat options visibility const chatOptionVisible = useSelector( (state) => state.modalReducer.payload.chatRoomId === chatData.chatRoomId ); // To know if chatItem was clicked to make chat room visible const [chatItemClicked, setChatItemClicked] = useState(); const activeChat = useSelector( (state) => state.chatReducer.currentChatRoom._id === chatData.chatRoomId ); const chatRoomShown = useSelector((state) => state.chatReducer.active); // Chat mode of user i.e Typing, recording const chatMode = useSelector((state) => { const chatIndex = state.chatListReducer.findIndex( (chat) => chat.chatRoomId === chatData.chatRoomId ); return state.chatListReducer[chatIndex]?.mode; }); // Currently logged in user id const userId = useSelector((state) => state.userReducer.user._id); // Set chat room function const { setChatRoom } = useChat(chatData, "chatList"); // Format latest message date const formattedDate = useTime(chatData.latestMessage.timeSent); const dispatch = useDispatch(); // returns function to get the best position for a modal const getBestModalPostion = useModalBestPosition(); // Elements data to help with getting best position const elemData = { modalData: { width: 140, height: 80, }, overlayId: "side-bar", }; // show options handler const showOptions = (event) => { event.preventDefault(); const positions = getBestModalPostion(event, elemData); dispatch( modalActions.openModal({ type: "chatOptions", payload: chatData, positions, }) ); }; // On mobile, enable holding down to show options const timeoutToShowOptions = (event) => { const timer = setTimeout(() => { showOptions(event); }, 250); event.currentTarget.addEventListener("mouseup", () => { clearTimeout(timer); }); }; useEffect(() => { if (activeChat && !chatItemClicked && chatRoomShown) { setChatRoom({ disableSettingChatRoomActive: true }); } if (chatItemClicked) { setChatItemClicked(false); } }, [chatRoomShown]); return (