import { FindNewFriendsMessageComposer, MouseEventType } from '@nitrots/nitro-renderer'; import { FC, useEffect, useRef, useState } from 'react'; import { GetUserProfile, LocalizeText, MessengerFriend, OpenMessengerChat, SendMessageComposer } from '../../../../api'; import { LayoutAvatarImageView, LayoutBadgeImageView } from '../../../../common'; import { useFriends } from '../../../../hooks'; import { motion, AnimatePresence } from 'framer-motion'; export const FriendBarItemView: FC<{ friend: MessengerFriend }> = props => { const { friend = null } = props; const [isVisible, setVisible] = useState(false); const { followFriend = null } = useFriends(); const elementRef = useRef(null); useEffect(() => { const onClick = (event: MouseEvent) => { const element = elementRef.current; if (!element) return; if ((event.target !== element) && !element.contains((event.target as Node))) { setVisible(false); } }; document.addEventListener(MouseEventType.MOUSE_CLICK, onClick); return () => document.removeEventListener(MouseEventType.MOUSE_CLICK, onClick); }, []); if (!friend) { return (
setVisible(prev => !prev)} >
{LocalizeText('friend.bar.find.title')}
{isVisible && (
{LocalizeText('friend.bar.find.title')}
{LocalizeText('friend.bar.find.text')}
)}
); } return (
{(friend.id > 0) ? (
) : (
)} setVisible(prev => !prev)} >
{friend.name}
{isVisible && (
{friend.name}
{ event.stopPropagation(); OpenMessengerChat(friend.id); setVisible(false); }} /> {friend.online &&
{ event.stopPropagation(); followFriend(friend); setVisible(false); }} />}
{ event.stopPropagation(); GetUserProfile(friend.id); setVisible(false); }} />
)}
); };