Last active
October 27, 2021 05:21
-
-
Save hieptl/8d27b18074a2d33f4d31c2e2f5385fbb to your computer and use it in GitHub Desktop.
RemoveGroupMembers.tsx - Ionic Chat App
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import React, { useState, useEffect, useContext } from 'react'; | |
import { IonToolbar, IonTitle, IonHeader, IonButtons, IonBackButton } from '@ionic/react'; | |
import { useHistory } from 'react-router'; | |
import { v4 as uuidv4 } from "uuid"; | |
import Context from '../context'; | |
const RemoveGroupMembers: React.FC = () => { | |
const history = useHistory(); | |
const { user, cometChat, setIsLoading, selectedConversation } = useContext(Context); | |
const [keyword, setKeyword] = useState<any>(''); | |
// data that will be shown on the list, data could be the list of users, or the list of groups. | |
const [data, setData] = useState<any>([]); | |
useEffect(() => { | |
searchGroupMembers(); | |
}, [cometChat, keyword]); | |
const transformGroupMembers = (groupMembers: any) => { | |
if (groupMembers && groupMembers.length !== 0) { | |
return groupMembers.filter((member: any) => member && member.uid !== user.uid); | |
} | |
return groupMembers; | |
}; | |
const searchGroupMembers = () => { | |
const GUID = selectedConversation.guid; | |
const limit = 30; | |
const groupMemberRequestBuilder = new cometChat.GroupMembersRequestBuilder(GUID) | |
.setLimit(limit) | |
const groupMemberRequest = keyword ? groupMemberRequestBuilder.setSearchKeyword(keyword).build() : groupMemberRequestBuilder.build(); | |
groupMemberRequest.fetchNext().then( | |
(groupMembers: any) => { | |
setData(() => transformGroupMembers(groupMembers)); | |
}, | |
(error: any) => { | |
} | |
); | |
}; | |
const onKeywordChanged = (e: any) => { | |
setKeyword(() => e.target.value.trim()); | |
}; | |
const shouldRemoveMember = (selectedUser: any) => { | |
return selectedUser && selectedUser.uid && selectedConversation && selectedConversation.guid; | |
}; | |
const handleRemoveMember = (selectedUser: any) => { | |
if (shouldRemoveMember(selectedUser)) { | |
setIsLoading(true); | |
const GUID = selectedUser.guid; | |
const UID = selectedUser.uid; | |
cometChat.kickGroupMember(GUID, UID).then( | |
(response: any) => { | |
setIsLoading(false); | |
alert(`${selectedUser.name} was removed from the group successfully`) | |
searchGroupMembers(); | |
}, | |
(error: any) => { | |
} | |
); | |
} | |
}; | |
const selectItem = (item: any) => () => { | |
// logic adding a new member to the selected group will be handled in here. | |
const shouldRemoveMember = window.confirm(`Do you want remove ${item.name} from the group?`); | |
if (shouldRemoveMember) { | |
handleRemoveMember(item) | |
} | |
}; | |
if (!selectedConversation) { | |
history.push('/'); | |
} | |
const renderDataItem = (dataItem: any) => { | |
if (dataItem) { | |
return ( | |
<div className='removegroupmembers__data-item' onClick={selectItem(dataItem)} key={dataItem.uid ? dataItem.uid : dataItem.guid ? dataItem.guid : uuidv4()}> | |
<img src={dataItem.avatar ? dataItem.avatar : dataItem.icon ? dataItem.icon : ''} alt={dataItem.name} /> | |
<span>{dataItem.name}</span> | |
</div> | |
); | |
} | |
}; | |
return ( | |
<> | |
<IonHeader> | |
<IonToolbar> | |
<IonButtons slot="start"> | |
<IonBackButton defaultHref='/manage-group' /> | |
</IonButtons> | |
<IonTitle>Remove Group Members</IonTitle> | |
</IonToolbar> | |
</IonHeader> | |
<div className='removegroupmembers__container'> | |
<input type="url" placeholder="Search..." onChange={onKeywordChanged} /> | |
<div className='removegroupmembers__data'> | |
{data && data.length !== 0 && data.map((dataItem: any) => { | |
if (dataItem) { | |
return renderDataItem(dataItem); | |
} | |
})} | |
</div> | |
</div> | |
</> | |
); | |
}; | |
export default RemoveGroupMembers; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment