import React, { memo } from '../../lib/teact/teact';
import type { ApiMessage } from '../../api/types';
import type { ObserveFn } from '../../hooks/useIntersectionObserver';
import type { LangFn } from '../../hooks/useLang';
import { ApiMessageEntityTypes } from '../../api/types';
import trimText from '../../util/trimText';
import {
getMessageSummaryDescription,
getMessageSummaryEmoji,
getMessageSummaryText,
TRUNCATED_SUMMARY_LENGTH,
} from '../../global/helpers';
import renderText from './helpers/renderText';
import MessageText from './MessageText';
interface OwnProps {
lang: LangFn;
message: ApiMessage;
noEmoji?: boolean;
highlight?: string;
truncateLength?: number;
observeIntersectionForLoading?: ObserveFn;
observeIntersectionForPlaying?: ObserveFn;
withTranslucentThumbs?: boolean;
}
function MessageSummary({
lang,
message,
noEmoji = false,
highlight,
truncateLength = TRUNCATED_SUMMARY_LENGTH,
observeIntersectionForLoading,
observeIntersectionForPlaying,
withTranslucentThumbs,
}: OwnProps) {
const { text, entities } = message.content.text || {};
const hasSpoilers = entities?.some((e) => e.type === ApiMessageEntityTypes.Spoiler);
const hasCustomEmoji = entities?.some((e) => e.type === ApiMessageEntityTypes.CustomEmoji);
if (!text || (!hasSpoilers && !hasCustomEmoji)) {
const trimmedText = trimText(getMessageSummaryText(lang, message, noEmoji), truncateLength);
return (
{highlight ? (
renderText(trimmedText, ['emoji', 'highlight'], { highlight })
) : (
renderText(trimmedText)
)}
);
}
function renderMessageText() {
return (
);
}
const emoji = !noEmoji && getMessageSummaryEmoji(message);
return (
<>
{[
emoji ? renderText(`${emoji} `) : undefined,
getMessageSummaryDescription(lang, message, renderMessageText()),
].flat().filter(Boolean)}
>
);
}
export default memo(MessageSummary);