import React, { useCallback } from 'react'; import { FormattedList, FormattedMessage } from 'react-intl'; import { useDispatch } from 'react-redux'; import { openModal } from 'soapbox/actions/modals'; import { useAppSelector, useCompose, useFeatures } from 'soapbox/hooks'; import { statusToMentionsAccountIdsArray } from 'soapbox/reducers/compose'; import { makeGetStatus } from 'soapbox/selectors'; import { isPubkey } from 'soapbox/utils/nostr'; import type { Status as StatusEntity } from 'soapbox/types/entities'; interface IReplyMentions { composeId: string } const ReplyMentions: React.FC = ({ composeId }) => { const dispatch = useDispatch(); const features = useFeatures(); const compose = useCompose(composeId); const getStatus = useCallback(makeGetStatus(), []); const status = useAppSelector(state => getStatus(state, { id: compose.in_reply_to! })); const to = compose.to; const account = useAppSelector((state) => state.accounts.get(state.me)); if (!features.explicitAddressing || !status || !to) { return null; } const parentTo = status && statusToMentionsAccountIdsArray(status, account!); const handleClick = (e: React.MouseEvent) => { e.preventDefault(); dispatch(openModal('REPLY_MENTIONS', { composeId, })); }; if (!parentTo || (parentTo.size === 0)) { return null; } if (to.size === 0) { return ( ); } const accounts = to.slice(0, 2).map((acct: string) => { const username = acct.split('@')[0]; return ( @{isPubkey(username) ? username.slice(0, 8) : username} ); }).toArray(); if (to.size > 2) { accounts.push( , ); } return ( , }} /> ); }; export default ReplyMentions;