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.
		
		
		
		
		
			
		
			
				
	
	
		
			108 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			TypeScript
		
	
import React, { useContext } from 'react';
 | 
						|
import { Flex } from '../../basic/Flex';
 | 
						|
import { SessionIcon, SessionIconButton, SessionIconSize, SessionIconType } from '../icon';
 | 
						|
import { ReplyingToMessageProps } from './SessionCompositionBox';
 | 
						|
import styled, { DefaultTheme, ThemeContext } from 'styled-components';
 | 
						|
import { getAlt, isAudio, isImageAttachment } from '../../../types/Attachment';
 | 
						|
import { Image } from '../../conversation/Image';
 | 
						|
 | 
						|
// tslint:disable: react-unused-props-and-state
 | 
						|
interface Props {
 | 
						|
  quotedMessageProps: ReplyingToMessageProps;
 | 
						|
  removeQuotedMessage: any;
 | 
						|
}
 | 
						|
 | 
						|
const QuotedMessageComposition = styled.div`
 | 
						|
  width: 100%;
 | 
						|
  padding-inline-end: ${props => props.theme.common.margins.md};
 | 
						|
  padding-inline-start: ${props => props.theme.common.margins.md};
 | 
						|
`;
 | 
						|
 | 
						|
const QuotedMessageCompositionReply = styled.div`
 | 
						|
  background: ${props => props.theme.colors.quoteBottomBarBackground};
 | 
						|
  border-radius: ${props => props.theme.common.margins.sm};
 | 
						|
  padding: ${props => props.theme.common.margins.xs};
 | 
						|
  box-shadow: ${props => props.theme.colors.sessionShadow};
 | 
						|
  margin: ${props => props.theme.common.margins.xs};
 | 
						|
`;
 | 
						|
 | 
						|
const Subtle = styled.div`
 | 
						|
  overflow: hidden;
 | 
						|
  text-overflow: ellipsis;
 | 
						|
  word-break: break-all;
 | 
						|
  -webkit-line-clamp: 3;
 | 
						|
  -webkit-box-orient: vertical;
 | 
						|
  display: -webkit-box;
 | 
						|
  color: ${props => props.theme.colors.textColor};
 | 
						|
`;
 | 
						|
 | 
						|
const ReplyingTo = styled.div`
 | 
						|
  color: ${props => props.theme.colors.textColor};
 | 
						|
`;
 | 
						|
 | 
						|
export const SessionQuotedMessageComposition = (props: Props) => {
 | 
						|
  const { quotedMessageProps, removeQuotedMessage } = props;
 | 
						|
  const theme = useContext(ThemeContext);
 | 
						|
 | 
						|
  const { text: body, attachments } = quotedMessageProps;
 | 
						|
  const hasAttachments = attachments && attachments.length > 0;
 | 
						|
 | 
						|
  let hasImageAttachment = false;
 | 
						|
 | 
						|
  let firstImageAttachment;
 | 
						|
  if (attachments && attachments.length > 0) {
 | 
						|
    firstImageAttachment = attachments[0];
 | 
						|
    hasImageAttachment = true;
 | 
						|
  }
 | 
						|
 | 
						|
  const hasAudioAttachment =
 | 
						|
    hasAttachments && attachments && attachments.length > 0 && isAudio(attachments);
 | 
						|
 | 
						|
  return (
 | 
						|
    <QuotedMessageComposition theme={theme}>
 | 
						|
      <Flex
 | 
						|
        container={true}
 | 
						|
        justifyContent="space-between"
 | 
						|
        flexGrow={1}
 | 
						|
        margin={theme.common.margins.xs}
 | 
						|
      >
 | 
						|
        <ReplyingTo>{window.i18n('replyingToMessage')}</ReplyingTo>
 | 
						|
        <SessionIconButton
 | 
						|
          iconType={SessionIconType.Exit}
 | 
						|
          iconSize={SessionIconSize.Small}
 | 
						|
          onClick={removeQuotedMessage}
 | 
						|
          theme={theme}
 | 
						|
        />
 | 
						|
      </Flex>
 | 
						|
      <QuotedMessageCompositionReply>
 | 
						|
        <Flex container={true} justifyContent="space-between" margin={theme.common.margins.xs}>
 | 
						|
          <Subtle>{(hasAttachments && window.i18n('mediaMessage')) || body}</Subtle>
 | 
						|
 | 
						|
          {hasImageAttachment && (
 | 
						|
            <Image
 | 
						|
              alt={getAlt(firstImageAttachment, window.i18n)}
 | 
						|
              i18n={window.i18n}
 | 
						|
              attachment={firstImageAttachment}
 | 
						|
              height={100}
 | 
						|
              width={100}
 | 
						|
              curveTopLeft={true}
 | 
						|
              curveTopRight={true}
 | 
						|
              curveBottomLeft={true}
 | 
						|
              curveBottomRight={true}
 | 
						|
              url={firstImageAttachment.thumbnail.objectUrl}
 | 
						|
            />
 | 
						|
          )}
 | 
						|
 | 
						|
          {hasAudioAttachment && (
 | 
						|
            <SessionIcon
 | 
						|
              iconType={SessionIconType.Microphone}
 | 
						|
              iconSize={SessionIconSize.Huge}
 | 
						|
              theme={theme}
 | 
						|
            />
 | 
						|
          )}
 | 
						|
        </Flex>
 | 
						|
      </QuotedMessageCompositionReply>
 | 
						|
    </QuotedMessageComposition>
 | 
						|
  );
 | 
						|
};
 |