import { useCallback } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import classNames from 'classnames'; import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; import { blockAccount, unblockAccount, muteAccount, unmuteAccount, } from 'flavours/glitch/actions/accounts'; import { initMuteModal } from 'flavours/glitch/actions/mutes'; import { Avatar } from 'flavours/glitch/components/avatar'; import { Button } from 'flavours/glitch/components/button'; import { FollowersCounter } from 'flavours/glitch/components/counters'; import { DisplayName } from 'flavours/glitch/components/display_name'; import { FollowButton } from 'flavours/glitch/components/follow_button'; import { RelativeTimestamp } from 'flavours/glitch/components/relative_timestamp'; import { ShortNumber } from 'flavours/glitch/components/short_number'; import { Skeleton } from 'flavours/glitch/components/skeleton'; import { VerifiedBadge } from 'flavours/glitch/components/verified_badge'; import DropdownMenu from 'flavours/glitch/containers/dropdown_menu_container'; import { me } from 'flavours/glitch/initial_state'; import { useAppSelector, useAppDispatch } from 'flavours/glitch/store'; import { Permalink } from './permalink'; const messages = defineMessages({ follow: { id: 'account.follow', defaultMessage: 'Follow' }, unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' }, cancel_follow_request: { id: 'account.cancel_follow_request', defaultMessage: 'Withdraw follow request', }, unblock: { id: 'account.unblock_short', defaultMessage: 'Unblock' }, unmute: { id: 'account.unmute_short', defaultMessage: 'Unmute' }, mute_notifications: { id: 'account.mute_notifications_short', defaultMessage: 'Mute notifications', }, unmute_notifications: { id: 'account.unmute_notifications_short', defaultMessage: 'Unmute notifications', }, mute: { id: 'account.mute_short', defaultMessage: 'Mute' }, block: { id: 'account.block_short', defaultMessage: 'Block' }, more: { id: 'status.more', defaultMessage: 'More' }, }); export const Account: React.FC<{ size?: number; id: string; hidden?: boolean; minimal?: boolean; defaultAction?: 'block' | 'mute'; withBio?: boolean; }> = ({ id, size = 46, hidden, minimal, defaultAction, withBio }) => { const intl = useIntl(); const account = useAppSelector((state) => state.accounts.get(id)); const relationship = useAppSelector((state) => state.relationships.get(id)); const dispatch = useAppDispatch(); const handleBlock = useCallback(() => { if (relationship?.blocking) { dispatch(unblockAccount(id)); } else { dispatch(blockAccount(id)); } }, [dispatch, id, relationship]); const handleMute = useCallback(() => { if (relationship?.muting) { dispatch(unmuteAccount(id)); } else { dispatch(initMuteModal(account)); } }, [dispatch, id, account, relationship]); const handleMuteNotifications = useCallback(() => { dispatch(muteAccount(id, true)); }, [dispatch, id]); const handleUnmuteNotifications = useCallback(() => { dispatch(muteAccount(id, false)); }, [dispatch, id]); if (hidden) { return ( <> {account?.display_name} {account?.username} ); } let buttons; if (account && account.id !== me && relationship) { const { requested, blocking, muting } = relationship; if (requested) { buttons = ; } else if (blocking) { buttons = (