chatty / client /src /hooks /useChat.jsx
arabdullah's picture
@ARAbdullaSL
a0fda44 verified
import useFetch from "./useFetch";
import { useDispatch, useSelector } from "react-redux";
import { chatActions } from "../store/chatSlice";
import { chatListActions } from "../store/chatListSlice";
const useChat = (contact, from = "contact") => {
const mode = useSelector((state) => state.chatReducer.mode);
const dispatch = useDispatch();
const chatHistory = useSelector((state) => state.chatReducer.chatHistory);
const chat = useSelector((state) => state.chatReducer.currentChatRoom);
// Fetch chat room request
const { reqFn: fetchChatRoom } = useFetch(
{
method: "GET",
url: `/chatRoom/${contact?.chatRoomId}`,
},
(data) => {
const chatRoom = {
chatProfile:
from === "contact"
? {
...contact.contactDetails,
name: contact.contactName,
}
: { ...contact.profile },
...data.data.chatRoom,
};
// Set chat room as current
dispatch(chatActions.setChatRoom({ chatRoom }));
// Add chat room to history
dispatch(
chatActions.addToChatRoomHistory({
chatRoomId: contact.chatRoomId,
chatRoom,
})
);
}
);
// Set chat room
const setChatRoom = async (
{ disableSettingChatRoomActive } = { disableSettingChatRoomActive: false }
) => {
// Check if chat has been fetched already
const chatRoom = chatHistory[contact.chatRoomId];
if (chatRoom) {
dispatch(chatActions.setChatRoom({ chatRoom }));
} else {
await fetchChatRoom();
}
!disableSettingChatRoomActive && dispatch(chatActions.setChatActive());
dispatch(
chatListActions.markMessagesInChatRoomAsRead({
chatRoomId: contact.chatRoomId,
})
);
};
return { chat, setChatRoom, mode, chatActions };
};
export default useChat;