import type React from 'react'; import { useMemo } from 'react'; import { FriendApplicationType } from 'tuikit-atomicx-react/chat'; import { ContactStore } from 'tuikit-atomicx-react/chat'; import { useUIKit, Button } from '@tencentcloud/uikit-base-component-react'; import classNames from 'classnames'; import { Avatar } from 'tuikit-atomicx-react/chat'; import styles from './FriendApplicationInfo.module.scss'; import type { FriendApplicationInfoProps } from '../../../../types/contact'; type FriendApplicationDisplayStatus = 'pending' | 'accepted' | 'rejected' | 'handled'; export const FriendApplicationInfo: React.FC = ({ application, showActions = true, onClose, onAccept, onRefuse, className, style, }) => { const { t } = useUIKit(); const { acceptFriendApplication, refuseFriendApplication, friendApplicationList, friendList, } = ContactStore(); const displayStatus = useMemo(() => { const isFriend = friendList.some(friend => friend.userID === application.userID); const isApplicationPending = friendApplicationList.some(item => item.userID === application.userID); // Friend relation wins because a removed application can mean it was accepted. if (isFriend) { return 'accepted'; } if (!isApplicationPending) { return application.type === FriendApplicationType.Sent ? 'rejected' : 'handled'; } return 'pending'; }, [application.type, application.userID, friendApplicationList, friendList]); const sentApplicationText = useMemo(() => { if (displayStatus === 'accepted') { return t('ContactList.friend_application_accepted'); } if (displayStatus === 'rejected') { return t('ContactList.friend_application_rejected'); } return t('ContactList.wait_to_add_you_as_friend'); }, [displayStatus, t]); const receivedApplicationText = useMemo(() => { if (displayStatus === 'accepted') { return t('ContactList.friend_application_accepted'); } if (displayStatus === 'handled') { return t('ContactList.friend_application_handled'); } return ''; }, [displayStatus, t]); const shouldShowReceivedActions = showActions && application.type === FriendApplicationType.Received && displayStatus === 'pending'; const handleAccept = async () => { onAccept?.(application); await acceptFriendApplication(application); onClose?.(); }; const handleRefuse = async () => { onRefuse?.(application); await refuseFriendApplication(application); onClose?.(); }; return (
{application?.nickname || application?.userID}
{`${t('ContactList.id')}: ${application?.userID}`}
{t('ContactList.verification_info')}
{application?.addWording || t('ContactList.none')}
{shouldShowReceivedActions && (
)} {showActions && application.type === FriendApplicationType.Received && displayStatus !== 'pending' && (
{receivedApplicationText}
)} {showActions && application.type === FriendApplicationType.Sent && (
{sentApplicationText}
)}
); };