Skip to main content
FieldValue
Package@cometchat/chat-uikit-react
Key componentsCometChatMessages, CometChatGroupMembers, CometChatMessageComposer, CometChatMessageList, CometChatMessageHeader
InitCometChatUIKit.init(UIKitSettings) then CometChatUIKit.login("UID")
PurposeLaunch a direct 1:1 chat from a group member profile
Sample appGitHub
RelatedAll Guides
Message Privately lets users start a direct 1:1 conversation with a group member without leaving the group context. The user can return to the group after the private chat. Before starting, complete the Getting Started guide for your framework.

Components

Component / ClassRole
CometChatGroupMembersDisplays group members with click handlers for private messaging
CometChatMessageComposerInput component for composing private messages
CometChatMessageListDisplays private conversation messages
CometChatMessageHeaderHeader showing private chat information

Integration Steps

1. Group Member Click Handler

When a group member is clicked, cast them to a User object and initiate a private chat. The current group is saved so the user can return to it later. CometChat.getConversation() fetches or creates the 1:1 conversation. File: CometChatHome.tsx
const handleGroupMemberClick = (groupMember: CometChat.GroupMember) => {
    const user = groupMember as CometChat.User;
    startPrivateChatFromGroup(user, currentGroup);
}

const startPrivateChatFromGroup = (user: CometChat.User, group: CometChat.Group) => {
    setAppState({ type: "updatePreviousGroup", payload: group });
    
    CometChat.getConversation(user.getUid(), CometChatUIKitConstants.MessageReceiverType.user)
        .then((conversation) => {
            setSelectedItem(conversation);
            setAppState({ type: "updateSideComponent", payload: { visible: false, type: "" } });
            setShowPrivateChat(true);
        })
        .catch((error) => {
            console.error("Failed to start private chat:", error);
        });
}

2. Group Members with Private Messaging Option

Add a “Message Privately” option to the group members list. The options prop adds a context-menu action that triggers the private chat flow when clicked. File: CometChatHome.tsx
const GroupMembersWithPrivateMessaging = ({ group }: { group: CometChat.Group }) => {
    return (
        <CometChatGroupMembers
            group={group}
            onItemClick={handleGroupMemberClick}
            options={[
                {
                    id: "message_privately",
                    title: getLocalizedString("message_privately"),
                    iconURL: messageIcon,
                    onClick: (member: CometChat.GroupMember) => {
                        handleGroupMemberClick(member);
                    }
                }
            ]}
            selectionMode={SelectionMode.none}
        />
    );
}

3. Private Chat Interface

Render a full chat view (header, message list, composer) for the 1:1 conversation. The header includes a back button that returns the user to the original group, and a subtitle showing which group the private chat was initiated from. File: CometChatHome.tsx
const PrivateChatFromGroupView = ({ user, previousGroup }: { 
    user: CometChat.User, 
    previousGroup: CometChat.Group 
}) => {
    const returnToGroup = () => {
        setShowPrivateChat(false);
        CometChat.getConversation(previousGroup.getGuid(), CometChatUIKitConstants.MessageReceiverType.group)
            .then((conversation) => {
                setSelectedItem(conversation);
            });
    };

    return (
        <div className="cometchat-private-chat-from-group">
            <CometChatMessageHeader
                user={user}
                onBack={returnToGroup}
                showBackButton={true}
                subtitle={`${getLocalizedString("private_message_from")} ${previousGroup.getName()}`}
            />
            <CometChatMessageList user={user} onThreadRepliesClick={() => {}} />
            <CometChatMessageComposer user={user} />
        </div>
    );
}

4. State Management

Add reducer cases to track the group the user came from, whether the private chat is visible, and which user is being messaged. This lets the app restore the group context when the user navigates back. File: appReducer.ts
interface AppState {
    previousGroup?: CometChat.Group;
    showPrivateChat?: boolean;
    privateChatUser?: CometChat.User;
}

case "updatePreviousGroup": {
    return { ...state, ["previousGroup"]: action.payload };
}
case "updateShowPrivateChat": {
    return { ...state, ["showPrivateChat"]: action.payload };
}
case "updatePrivateChatUser": {
    return { ...state, ["privateChatUser"]: action.payload };
}

Feature Matrix

FeatureComponent / MethodFile
Group member selectionCometChatGroupMembersCometChatHome.tsx
Private chat initiationstartPrivateChatFromGroup()CometChatHome.tsx
Private chat interfacePrivateChatFromGroupViewCometChatHome.tsx
Context preservationupdatePreviousGroupappReducer.ts
Return to groupreturnToGroup()CometChatHome.tsx
Member optionsoptions in CometChatGroupMembersCometChatHome.tsx
State managementupdateShowPrivateChatappReducer.ts

Next Steps