import React from 'react'; import { Box, Text, as } from 'folds'; import classNames from 'classnames'; import { MatrixClient, MatrixEvent, Room } from 'matrix-js-sdk'; import * as css from './Reaction.css'; import { getHexcodeForEmoji, getShortcodeFor } from '../../plugins/emoji'; import { getMemberDisplayName } from '../../utils/room'; import { eventWithShortcode, getMxIdLocalPart, mxcUrlToHttp } from '../../utils/matrix'; export const Reaction = as< 'button', { mx: MatrixClient; count: number; reaction: string; useAuthentication?: boolean; } >(({ className, mx, count, reaction, useAuthentication, ...props }, ref) => ( {reaction.startsWith('mxc://') ? ( {reaction} ) : ( {reaction} )} {count} )); type ReactionTooltipMsgProps = { room: Room; reaction: string; events: MatrixEvent[]; }; export function ReactionTooltipMsg({ room, reaction, events }: ReactionTooltipMsgProps) { const shortCodeEvt = events.find(eventWithShortcode); const shortcode = shortCodeEvt?.getContent().shortcode ?? getShortcodeFor(getHexcodeForEmoji(reaction)) ?? reaction; const names = events.map( (ev: MatrixEvent) => getMemberDisplayName(room, ev.getSender() ?? 'Unknown') ?? getMxIdLocalPart(ev.getSender() ?? 'Unknown') ?? 'Unknown' ); return ( <> {names.length === 1 && {names[0]}} {names.length === 2 && ( <> {names[0]} {' and '} {names[1]} )} {names.length === 3 && ( <> {names[0]} {', '} {names[1]} {' and '} {names[2]} )} {names.length > 3 && ( <> {names[0]} {', '} {names[1]} {', '} {names[2]} {' and '} {names.length - 3} others )} {' reacted with '} :{shortcode}: ); }