import React, {useState} from 'react'; import {FormattedMessage, useIntl} from 'react-intl'; import Client4 from 'mattermost-redux/client/client4'; import {UserBadge} from '../../types/badges'; import BadgeImage from '../badge_image/badge_image'; import {markdown} from 'utils/markdown'; import Client from '../../client/api'; import ConfirmDialog from '../confirm_dialog/confirm_dialog'; import './user_badge_row.scss'; type Props = { badge: UserBadge; isCurrentUser: boolean; currentUserID: string; onClick: (badge: UserBadge) => void; onRevoke?: (badge: UserBadge) => void; } const UserBadgeRow: React.FC = ({badge, onClick, isCurrentUser, currentUserID, onRevoke}: Props) => { const intl = useIntl(); const time = new Date(badge.time); const [confirmingRevoke, setConfirmingRevoke] = useState(false); const canRevoke = badge.granted_by === currentUserID; const handleRevoke = async () => { try { const client = new Client(); await client.revokeOwnership({ badge_id: String(badge.id), user_id: badge.user, time: String(badge.time), }); onRevoke?.(badge); } catch { // ignore } finally { setConfirmingRevoke(false); } }; let reason = null; if (badge.reason) { reason = (
); } let setStatus = null; if (isCurrentUser && badge.image_type === 'emoji') { setStatus = (
{ e.stopPropagation(); const c = new Client4(); c.updateCustomStatus({emoji: badge.image, text: badge.name}); }} >
); } let revokeAction = null; if (canRevoke && onRevoke) { revokeAction = (
{ e.stopPropagation(); setConfirmingRevoke(true); }} >
); if (confirmingRevoke) { revokeAction = ( <> {revokeAction} setConfirmingRevoke(false)} > ); } } return (
onClick(badge)} >
{' '} {badge.name}
{' '} {badge.description ? markdown(badge.description) : '—'}
{reason} {setStatus} {revokeAction}
); }; export default UserBadgeRow;