import React, { FC, memo, useMemo, } from '../../../lib/teact/teact'; import { ApiAvailableReaction, ApiMessage, ApiMessageOutgoingStatus } from '../../../api/types'; import { ActiveReaction } from '../../../global/types'; import { formatDateTimeToString, formatTime } from '../../../util/dateFormat'; import { formatIntegerCompact } from '../../../util/textFormat'; import renderText from '../../common/helpers/renderText'; import useLang from '../../../hooks/useLang'; import useFlag from '../../../hooks/useFlag'; import buildClassName from '../../../util/buildClassName'; import MessageOutgoingStatus from '../../common/MessageOutgoingStatus'; import ReactionAnimatedEmoji from './ReactionAnimatedEmoji'; import './MessageMeta.scss'; type OwnProps = { message: ApiMessage; reactionMessage?: ApiMessage; withReactions?: boolean; withReactionOffset?: boolean; outgoingStatus?: ApiMessageOutgoingStatus; signature?: string; onClick: (e: React.MouseEvent) => void; activeReaction?: ActiveReaction; availableReactions?: ApiAvailableReaction[]; }; const MessageMeta: FC = ({ message, outgoingStatus, signature, onClick, withReactions, activeReaction, withReactionOffset, availableReactions, reactionMessage, }) => { const lang = useLang(); const [isActivated, markActivated] = useFlag(); const reactions = withReactions && reactionMessage?.reactions?.results.filter((l) => l.count > 0); const title = useMemo(() => { if (!isActivated) return undefined; const createDateTime = formatDateTimeToString(message.date * 1000, lang.code); const editDateTime = message.isEdited && formatDateTimeToString(message.editDate! * 1000, lang.code); const forwardedDateTime = message.forwardInfo && formatDateTimeToString(message.forwardInfo.date * 1000, lang.code); let text = createDateTime; if (editDateTime) { text += '\n'; text += lang('lng_edited_date').replace('{date}', editDateTime); } if (forwardedDateTime) { text += '\n'; text += lang('lng_forwarded_date').replace('{date}', forwardedDateTime); } return text; }, [isActivated, lang, message]); return ( {reactions && reactions.map((l) => ( ))} {Boolean(message.views) && ( <> {formatIntegerCompact(message.views!)} )} {signature && ( {renderText(signature)} )} {message.isEdited && `${lang('EditedMessage')} `} {formatTime(lang, message.date * 1000)} {outgoingStatus && ( )} ); }; export default memo(MessageMeta);