import { FC, MouseEvent, useState } from 'react'; import { LocalizeText, MessengerFriend, OpenMessengerChat } from '../../../../../api'; import { LayoutAvatarImageView, NitroCardAccordionItemView, UserProfileIconView } from '../../../../../common'; import { useFriends } from '../../../../../hooks'; import { resolveAvatarFigure } from '../resolveAvatarFigure'; import { resolveAvatarGender } from '../resolveAvatarGender'; export const FriendsListGroupItemView: FC<{ friend: MessengerFriend, selected: boolean, selectFriend: (userId: number) => void }> = props => { const { friend = null, selected = false, selectFriend = null } = props; const [ isRelationshipOpen, setIsRelationshipOpen ] = useState(false); const { followFriend = null, updateRelationship = null, moveFriendToCategory = null, settings = null } = useFriends(); const [ isGroupMenuOpen, setIsGroupMenuOpen ] = useState(false); const categories = settings?.categories ?? []; const clickFollowFriend = (event: MouseEvent) => { event.stopPropagation(); followFriend(friend); }; const openMessengerChat = (event: MouseEvent) => { event.stopPropagation(); OpenMessengerChat(friend.id); }; const openRelationship = (event: MouseEvent) => { event.stopPropagation(); setIsRelationshipOpen(true); }; const clickUpdateRelationship = (event: MouseEvent, type: number) => { event.stopPropagation(); updateRelationship(friend, type); setIsRelationshipOpen(false); }; const getCurrentRelationshipName = () => { if(!friend) return 'none'; switch(friend.relationshipStatus) { case MessengerFriend.RELATIONSHIP_HEART: return 'heart'; case MessengerFriend.RELATIONSHIP_SMILE: return 'smile'; case MessengerFriend.RELATIONSHIP_BOBBA: return 'bobba'; default: return 'none'; } }; if(!friend) return null; return ( selectFriend(friend.id) }>
event.stopPropagation() }>
{ friend.name }
{ !isRelationshipOpen && <> { friend.online &&
} { friend.online &&
} { (friend.id > 0) && (categories.length > 0) &&
{ event.stopPropagation(); setIsGroupMenuOpen(prev => !prev); } }>{ '📁' }
{ isGroupMenuOpen &&
{ event.stopPropagation(); moveFriendToCategory(friend.id, 0); setIsGroupMenuOpen(false); } }> { LocalizeText('friendlist.friends') }
{ categories.map(category => (
{ event.stopPropagation(); moveFriendToCategory(friend.id, category.id); setIsGroupMenuOpen(false); } }> { category.name }
)) }
}
} { (friend.id > 0) &&
} } { isRelationshipOpen && <>
clickUpdateRelationship(event, MessengerFriend.RELATIONSHIP_HEART) } />
clickUpdateRelationship(event, MessengerFriend.RELATIONSHIP_SMILE) } />
clickUpdateRelationship(event, MessengerFriend.RELATIONSHIP_BOBBA) } />
clickUpdateRelationship(event, MessengerFriend.RELATIONSHIP_NONE) } /> }
); };