Untitled
unknown
plain_text
a year ago
5.1 kB
5
Indexable
// @flow import { Grid } from "@mui/material"; import React, { useCallback, useEffect, useState } from "react"; import { useMutation, useQuery } from "react-query"; import { getConversation, sendTextMessage } from "../../api/requests"; import useUserData from "../../hooks/user/useUserData"; import ChatMessenger from "./Messenger/chatMessenger"; import ChatMessagesContainer from "./chatMessagesContainer"; import ChatMessagesContainerHeader from "./chatMessagesContainerHeader"; import ChatSideBar from "./chatSidebar"; const mockUserList = [ { id: 'user1_id', name: 'John', surname: 'Doe', unreadMessages: 2, lastMessageDate: '2022-03-01', lastMessage: 'Hello, how are you?', }, { id: 'user2_id', name: 'Jane', surname: 'Doe', unreadMessages: 0, lastMessageDate: '2022-03-02', lastMessage: 'I am fine, thank you. And you?', }, { id: 'user3_id', name: 'Bob', surname: 'Smith', unreadMessages: 5, lastMessageDate: '2022-03-03', lastMessage: 'I am doing well, thank you.', }, { id: 'user4_id', name: 'Alice', surname: 'Cooper', unreadMessages: 1, lastMessageDate: '2022-03-04', lastMessage: 'That is good to hear.', }, ]; const mockMessages = [ { id: 'msg1', messageText: 'Hello', messageDate: new Date(), name: 'John', isSender: false, }, { id: 'msg2', messageText: 'Hi', messageDate: new Date(), name: 'Jane', isSender: true }, { id: 'msg3', messageText: 'How are you?', messageDate: new Date(), name: 'John', isSender: false, }, { id: 'msg4', messageText: 'I am fine', messageDate: new Date(), name: 'Jane', isSender: true } ] const ChatContainer = () => { console.log("ChatContainer-rendered.."); const [messages, setMessages] = useState([]); const [userConversations, setUserConversations] = useState([]); const [selectedMsgReceiverId, setSelecteMsgReceiverId] = useState([]); const [triggerSendMsgSrc, setTriggerSendMsgSrc] = useState(null); //src from which we are trying to open 'chat-card' | 'new-chat-button' const handleNewChatClicked = useCallback(() => { console.log("[ChatContainer][handleNewChat]"); setTriggerSendMsgSrc("new-chat-button-clicked"); //todo somehow configure that this event is coming from the newChatButton click when navigating to the chat }, []); const handleMsgCardClicked = useCallback(() => { console.log("[ChatContainer][handleMsgCardClick]"); setTriggerSendMsgSrc("card-clicked"); //todo somehow configure that this event is coming from the clicking a card that exists already in the chat sidebar }, []); const handleNewMsgReceiverSelected = (event) => { const { target: { value }, } = event; console.log("[chatContainer][handleNewMsgReceiverSelected-value]->", value); setSelecteMsgReceiverId(value); }; const { accessCode } = useUserData(); const { data: conversationData, isLoading: isConversationLoading } = useQuery( ["getConversation", accessCode, selectedMsgReceiverId], getConversation, { enabled: true, refetchInterval: 30000, // Refetch every 30 seconds } // Initially disabled ); const { mutate: sendTextMessageAction } = useMutation({ mutationFn: sendTextMessage, onSuccess: (data, variables, context) => { console.log("[sendTextMessage][onSuccess]data->", data); }, }); const handleSendMessage = useCallback((message) => { console.log('handleSendMessage-selectedMsgReceiverId', selectedMsgReceiverId); sendTextMessageAction( ["sendTextMessage", accessCode, selectedMsgReceiverId, message] ); }, [selectedMsgReceiverId]); console.log('chatContainer-selectedMsgReceiverId', selectedMsgReceiverId); useEffect(() => { setUserConversations(mockUserList); setMessages(mockMessages); }, []); const ChatListSideBar = <ChatSideBar userConversations={userConversations} setUserConversations={setUserConversations} onNewChatClicked={handleNewChatClicked} onMsgCardClicked={handleMsgCardClicked} /> return ( <Grid container spacing={1} sx={{ height: "calc(100% - 60px)" }}> <Grid item xs={3} md={3} lg={3} sx={{ borderRight: "1px solid #ECECEC" }}> {ChatListSideBar} </Grid> <Grid item xs={9} md={9} lg={9}> <ChatMessagesContainerHeader triggerSrc={triggerSendMsgSrc} selectedMsgReceiverId={selectedMsgReceiverId} onNewReceiversSelected={handleNewMsgReceiverSelected} /> <ChatMessagesContainer conversationData={conversationData} /> <ChatMessenger {...{ messages, submitMessage: handleSendMessage }} /> {/* <ChatMessagesContainerSendMsgBar onSendMessage={handleSendMessage} /> */} </Grid> </Grid> ); }; export default ChatContainer;
Editor is loading...
Leave a Comment