You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-desktop/ts/components/conversation/message/message-content/quote/QuoteText.tsx

86 lines
2.3 KiB
TypeScript

import { isEmpty } from 'lodash';
import styled from 'styled-components';
import { useSelectedIsGroupOrCommunity } from '../../../../../state/selectors/selectedConversation';
import { MIME } from '../../../../../types';
import { GoogleChrome } from '../../../../../util';
import { MessageBody } from '../MessageBody';
import { QuoteProps } from './Quote';
const StyledQuoteText = styled.div<{ isIncoming: boolean }>`
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
font-size: 15px;
line-height: 18px;
text-align: start;
overflow: hidden;
overflow-wrap: break-word;
word-wrap: break-word;
word-break: break-word;
white-space: pre-wrap;
color: ${props =>
props.isIncoming
? 'var(--message-bubbles-received-text-color)'
: 'var(--message-bubbles-sent-text-color)'};
a {
color: ${props =>
props.isIncoming
? 'var(--color-received-message-text)'
: 'var(--message-bubbles-sent-text-color)'};
}
`;
function getTypeLabel({
contentType,
isVoiceMessage,
}: {
contentType: MIME.MIMEType;
isVoiceMessage: boolean;
}): string | undefined {
if (GoogleChrome.isVideoTypeSupported(contentType)) {
return window.i18n('video');
}
if (GoogleChrome.isImageTypeSupported(contentType)) {
return window.i18n('image');
}
if (MIME.isAudio(contentType) && isVoiceMessage) {
return window.i18n('voiceMessage');
}
if (MIME.isAudio(contentType)) {
return window.i18n('audio');
}
return window.i18n('document');
}
export const QuoteText = (
props: Pick<QuoteProps, 'text' | 'attachment' | 'isIncoming' | 'referencedMessageNotFound'>
) => {
const { text, attachment, isIncoming, referencedMessageNotFound } = props;
const isGroup = useSelectedIsGroupOrCommunity();
if (!referencedMessageNotFound && attachment && !isEmpty(attachment)) {
const { contentType, isVoiceMessage } = attachment;
const typeLabel = getTypeLabel({ contentType, isVoiceMessage });
if (typeLabel && !text) {
return <div>{typeLabel}</div>;
}
}
return (
<StyledQuoteText isIncoming={isIncoming} dir="auto">
<MessageBody
text={text || window.i18n('originalMessageNotFound')}
disableLinks={true}
disableJumbomoji={true}
isGroup={isGroup}
/>
</StyledQuoteText>
);
};