import type React from 'react'; import { useState, useMemo, useEffect } from 'react'; import { useUIKit, Button, IconEdit1, Input, Switch } from '@tencentcloud/uikit-base-component-react'; import classNames from 'classnames'; import { ContactStore, useUIContext } from 'tuikit-atomicx-react/chat'; import { Avatar } from 'tuikit-atomicx-react/chat'; import styles from './FriendInfo.module.scss'; import type { FriendInfoProps, ContactInfo } from '../../../../types/contact'; export const FriendInfo: React.FC = ({ friend, showActions = true, onClose, onSendMessage, onDeleteFriend, onAddToBlacklist, onUpdateFriendRemark, className, style, }) => { const { t } = useUIKit(); const { blackList, deleteFriend, addToBlacklist, removeFromBlacklist, setFriendRemark } = ContactStore(); const { setActiveConversation } = useUIContext(); const [isEditing, setIsEditing] = useState(false); const [remark, setRemark] = useState(friend.friendRemark || ''); const [remarkInput, setRemarkInput] = useState(friend.friendRemark || ''); const [remarkLoading, setRemarkLoading] = useState(false); const [blackLoading, setBlackLoading] = useState(false); useEffect(() => { setRemark(friend.friendRemark || ''); setRemarkInput(friend.friendRemark || ''); }, [friend.friendRemark]); const isBlacklisted = useMemo(() => blackList.some(item => item.userID === friend.userID), [blackList, friend.userID], ); const handleRemarkSave = async () => { if (remarkInput.trim() === remark) { setIsEditing(false); return; } setRemarkLoading(true); try { await setFriendRemark(friend.userID, remarkInput.trim()); setRemark(remarkInput.trim()); setIsEditing(false); onUpdateFriendRemark?.({ ...friend, friendRemark: remarkInput.trim(), }, remarkInput.trim()); } catch (err: any) { console.error(err); } finally { setRemarkLoading(false); } }; const handleBlacklistChange = async (checked: boolean) => { setBlackLoading(true); try { if (checked) { await addToBlacklist(friend.userID); onAddToBlacklist?.(friend); } else { await removeFromBlacklist(friend.userID); } } catch (err: any) { console.error(err); } finally { setBlackLoading(false); } }; const handleDeleteFriend = async () => { try { await deleteFriend(friend.userID); onDeleteFriend?.(friend); } catch (err: any) { console.error(err); } onClose?.(); }; const handleSendMessage = (data: ContactInfo) => { onSendMessage?.(data); setActiveConversation(`C2C${data.userID}`); }; const displayName = remark || friend?.nickname || friend.userID; return (
{displayName}
{t('ContactList.id')} : {friend.userID}
{t('ContactList.remark_name')}
{isEditing ? (
setRemarkInput(e.target.value)} onBlur={handleRemarkSave} onKeyDown={e => e.key === 'Enter' && handleRemarkSave()} autoFocus disabled={remarkLoading} maxLength={30} />
) : (
{remark || {t('ContactList.none')}} { setRemarkInput(remark); setIsEditing(true); }} />
)}
{t('ContactList.personal_signature')}
{friend?.aboutMe || t('ContactList.none')}
{t('ContactList.add_to_blacklist')}
{showActions && (
)}
); };