import React, { useState, useCallback } from 'react';
import { View, TouchableOpacity, Text } from 'react-native';
import { CometChat } from '@cometchat/chat-sdk-react-native';
import {
CometChatUsers,
CometChatUIEventHandler,
CometChatGroupsEvents,
CometChatUIKit,
CometChatUiKitConstants,
} from '@cometchat/chat-uikit-react-native';
interface AddMemberProps {
group: CometChat.Group;
onBack: () => void;
}
const AddMemberScreen: React.FC<AddMemberProps> = ({ group, onBack }) => {
const [selectedUsers, setSelectedUsers] = useState<CometChat.User[]>([]);
const addMembersToGroup = useCallback(async () => {
try {
const membersList = selectedUsers.map((user) => {
const groupMember = new CometChat.GroupMember(
user.getUid(),
CometChat.GROUP_MEMBER_SCOPE.PARTICIPANT
);
groupMember.setName(user.getName());
return groupMember;
});
const guid = group.getGuid();
const response = await CometChat.addMembersToGroup(guid, membersList, []);
const addedUIDs = Object.entries(response)
.filter(([_, status]) => status === 'success')
.map(([uid]) => uid);
if (addedUIDs.length > 0) {
// Emit event for each added member
membersList
.filter((member) => addedUIDs.includes(member.getUid()))
.forEach((member) => {
CometChatUIEventHandler.emitGroupEvent(
CometChatGroupsEvents.ccGroupMemberAdded,
{
addedBy: CometChatUIKit.loggedInUser,
usersAdded: [member],
userAddedIn: group,
}
);
});
onBack();
}
} catch (error) {
console.error('Failed to add members:', error);
}
}, [group, selectedUsers, onBack]);
return (
<View style={{ flex: 1 }}>
<CometChatUsers
hideHeader={true}
selectionMode="multiple"
onSelection={setSelectedUsers}
/>
<TouchableOpacity onPress={addMembersToGroup}>
<Text>Add Members</Text>
</TouchableOpacity>
</View>
);
};