@@ -4,6 +4,7 @@ import { channelUsersActions, selectCurrentClanId, selectMemberClanByUserId, sel
44import { Icons } from '@mezon/ui' ;
55import type { IChannel } from '@mezon/utils' ;
66import { createImgproxyUrl , generateE2eId , getAvatarForPrioritize , getNameForPrioritize } from '@mezon/utils' ;
7+ import { useMemo } from 'react' ;
78import { useTranslation } from 'react-i18next' ;
89import { useSelector } from 'react-redux' ;
910import { AvatarImage } from '../../../AvatarImage/AvatarImage' ;
@@ -19,11 +20,24 @@ const ListMemberPermission = (props: ListMemberPermissionProps) => {
1920
2021 const dispatch = useAppDispatch ( ) ;
2122 const idUsers = useSelector ( ( state ) => selectUserChannelIds ( state , channel . id ) ) ;
23+ const displayUserIds = useMemo ( ( ) => {
24+ const sourceIds = channel . channel_private === 1 ? idUsers : props . selectedUserIds ;
25+ return Array . from ( new Set ( sourceIds . filter ( Boolean ) ) ) ;
26+ } , [ channel . channel_private , idUsers , props . selectedUserIds ] ) ;
2227 const currentClanId = useSelector ( selectCurrentClanId ) ;
2328 const navigate = useCustomNavigate ( ) ;
2429 const userProfile = useAuth ( ) ;
2530 const { toMembersPage } = useAppNavigation ( ) ;
31+
2632 const deleteMember = async ( userId : string ) => {
33+ if ( channel . channel_private !== 1 ) {
34+ props . setSelectedUserIds ?.( props . selectedUserIds . filter ( ( selectedId ) => selectedId !== userId ) ) ;
35+ return ;
36+ }
37+
38+ if ( ! idUsers . includes ( userId ) ) {
39+ return ;
40+ }
2741 const body : removeChannelUsersPayload = {
2842 channelId : channel . id ,
2943 userId,
@@ -36,15 +50,8 @@ const ListMemberPermission = (props: ListMemberPermissionProps) => {
3650 }
3751 } ;
3852
39- return idUsers . map ( ( id ) => (
40- < ItemMemberPermission
41- key = { id }
42- id = { id }
43- onDelete = { ( ) => deleteMember ( id as string ) }
44- channelOwner = { channel . creator_id === id }
45- selectedUserIds = { props . selectedUserIds }
46- setSelectedUserIds = { props . setSelectedUserIds }
47- />
53+ return displayUserIds . map ( ( id ) => (
54+ < ItemMemberPermission key = { id } id = { id } onDelete = { ( ) => deleteMember ( id as string ) } channelOwner = { channel . creator_id === id } />
4855 ) ) ;
4956} ;
5057
@@ -59,21 +66,15 @@ type ItemMemberPermissionProps = {
5966 clanAvatar ?: string ;
6067 onDelete : ( ) => void ;
6168 channelOwner ?: boolean ;
62- selectedUserIds ?: string [ ] ;
63- setSelectedUserIds ?: ( userIds : string [ ] ) => void ;
6469} ;
6570
6671const ItemMemberPermission = ( props : ItemMemberPermissionProps ) => {
67- const { id = '' , onDelete, channelOwner, selectedUserIds = [ ] , setSelectedUserIds } = props ;
72+ const { id = '' , onDelete, channelOwner } = props ;
6873 const user = useSelector ( ( state ) => selectMemberClanByUserId ( state , id ) ) ;
6974 const namePrioritize = getNameForPrioritize ( user ?. clan_nick , user ?. user ?. display_name , user ?. user ?. username ) ;
7075 const avatarPrioritize = getAvatarForPrioritize ( user ?. clan_avatar , user ?. user ?. avatar_url ) ;
7176
7277 const handleDelete = ( ) => {
73- if ( setSelectedUserIds && selectedUserIds ) {
74- const newSelectedUserIds = selectedUserIds . filter ( ( userId ) => userId !== id ) ;
75- setSelectedUserIds ( newSelectedUserIds ) ;
76- }
7778 if ( ! channelOwner ) {
7879 onDelete ( ) ;
7980 }
0 commit comments