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/MessageText.tsx

67 lines
1.7 KiB
TypeScript

import classNames from 'classnames';
import styled from 'styled-components';
import { SessionIcon } from '../../../icon';
import { MessageBody } from './MessageBody';
import {
useMessageDirection,
useMessageIsDeleted,
useMessageText,
} from '../../../../state/selectors';
import {
useIsMessageSelectionMode,
useSelectedIsGroupOrCommunity,
} from '../../../../state/selectors/selectedConversation';
import type { WithMessageId } from '../../../../session/types/with';
type Props = WithMessageId;
const StyledMessageText = styled.div<{ isDeleted?: boolean }>`
white-space: pre-wrap;
svg {
margin-inline-end: var(--margins-xs);
}
${({ isDeleted }) =>
isDeleted &&
`
display: flex;
align-items: center;
`}
`;
export const MessageText = ({ messageId }: Props) => {
const multiSelectMode = useIsMessageSelectionMode();
const direction = useMessageDirection(messageId);
const isDeleted = useMessageIsDeleted(messageId);
const text = useMessageText(messageId);
const isOpenOrClosedGroup = useSelectedIsGroupOrCommunity();
const contents = isDeleted ? window.i18n('deleteMessageDeletedGlobally') : text?.trim();
if (!contents) {
return null;
}
const iconColor =
direction === 'incoming'
? 'var(--message-bubbles-received-text-color)'
: 'var(--message-bubbles-sent-text-color)';
return (
<StyledMessageText
dir="auto"
className={classNames('module-message__text')}
isDeleted={isDeleted}
>
{isDeleted && <SessionIcon iconType="delete" iconSize="small" iconColor={iconColor} />}
<MessageBody
text={contents || ''}
disableLinks={multiSelectMode}
disableJumbomoji={false}
isGroup={isOpenOrClosedGroup}
/>
</StyledMessageText>
);
};