import { useState } from "react";
import { CometChat } from "@cometchat/chat-sdk-javascript";
import {
CometChatProvider,
CometChatConversations,
CometChatMessageList,
CometChatMessageComposer,
CometChatMessageHeader,
CometChatThreadHeader,
} from "@cometchat/chat-uikit-react";
function ChatWithThreads() {
const [user, setUser] = useState<CometChat.User | null>(null);
const [group, setGroup] = useState<CometChat.Group | null>(null);
const [threadedMessage, setThreadedMessage] = useState<CometChat.BaseMessage | null>(null);
function handleConversationClick(conversation: CometChat.Conversation) {
setThreadedMessage(null);
const entity = conversation.getConversationWith();
if (entity instanceof CometChat.User) {
setUser(entity);
setGroup(null);
} else if (entity instanceof CometChat.Group) {
setGroup(entity);
setUser(null);
}
}
return (
<div style={{ display: "flex", height: "100vh" }}>
{/* Conversations sidebar */}
<div style={{ width: "300px", borderRight: "1px solid #e0e0e0" }}>
<CometChatConversations onItemClick={handleConversationClick} />
</div>
{/* Main message panel */}
<div style={{ flex: 1, display: "flex", flexDirection: "column" }}>
{(user || group) && (
<>
<CometChatMessageHeader user={user ?? undefined} group={group ?? undefined} />
<div style={{ flex: 1, overflow: "hidden" }}>
<CometChatMessageList
user={user ?? undefined}
group={group ?? undefined}
onThreadRepliesClick={(message) => setThreadedMessage(message)}
/>
</div>
<CometChatMessageComposer user={user ?? undefined} group={group ?? undefined} />
</>
)}
</div>
{/* Thread panel */}
{threadedMessage && (
<div style={{ width: "400px", borderLeft: "1px solid #e0e0e0", display: "flex", flexDirection: "column" }}>
<CometChatThreadHeader
parentMessage={threadedMessage}
onClose={() => setThreadedMessage(null)}
onParentDeleted={() => setThreadedMessage(null)}
/>
<div style={{ flex: 1, overflow: "hidden" }}>
<CometChatMessageList
parentMessageId={threadedMessage.getId()}
user={user ?? undefined}
group={group ?? undefined}
/>
</div>
<CometChatMessageComposer
parentMessageId={threadedMessage.getId()}
user={user ?? undefined}
group={group ?? undefined}
layout="compact"
enableRichTextEditor
/>
</div>
)}
</div>
);
}
function App() {
return (
<CometChatProvider>
<ChatWithThreads />
</CometChatProvider>
);
}
export default App;