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.
		
		
		
		
		
			
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
| import React from 'react';
 | |
| import styled, { DefaultTheme, useTheme } from 'styled-components';
 | |
| import { MessageDeliveryStatus } from '../../../models/messageType';
 | |
| import { SessionIcon, SessionIconSize, SessionIconType } from '../../session/icon';
 | |
| import { OpacityMetadataComponent } from './MessageMetadata';
 | |
| 
 | |
| const MessageStatusSendingContainer = styled(props => <OpacityMetadataComponent {...props} />)`
 | |
|   display: inline-block;
 | |
|   margin-bottom: 2px;
 | |
|   margin-inline-start: 5px;
 | |
| `;
 | |
| 
 | |
| const MessageStatusSending = (props: { iconColor: string }) => {
 | |
|   return (
 | |
|     <MessageStatusSendingContainer>
 | |
|       <SessionIcon
 | |
|         rotateDuration={2}
 | |
|         iconColor={props.iconColor}
 | |
|         iconType={SessionIconType.Sending}
 | |
|         iconSize={SessionIconSize.Tiny}
 | |
|       />
 | |
|     </MessageStatusSendingContainer>
 | |
|   );
 | |
| };
 | |
| 
 | |
| const MessageStatusSent = (props: { iconColor: string }) => {
 | |
|   return (
 | |
|     <MessageStatusSendingContainer>
 | |
|       <SessionIcon
 | |
|         iconColor={props.iconColor}
 | |
|         iconType={SessionIconType.CircleCheck}
 | |
|         iconSize={SessionIconSize.Tiny}
 | |
|       />
 | |
|     </MessageStatusSendingContainer>
 | |
|   );
 | |
| };
 | |
| 
 | |
| const MessageStatusRead = (props: { iconColor: string }) => {
 | |
|   return (
 | |
|     <MessageStatusSendingContainer>
 | |
|       <SessionIcon
 | |
|         iconColor={props.iconColor}
 | |
|         iconType={SessionIconType.DoubleCheckCircleFilled}
 | |
|         iconSize={SessionIconSize.Tiny}
 | |
|       />
 | |
|     </MessageStatusSendingContainer>
 | |
|   );
 | |
| };
 | |
| 
 | |
| const MessageStatusError = () => {
 | |
|   const theme = useTheme();
 | |
|   return (
 | |
|     <MessageStatusSendingContainer>
 | |
|       <SessionIcon
 | |
|         iconColor={theme.colors.destructive}
 | |
|         iconType={SessionIconType.Error}
 | |
|         iconSize={SessionIconSize.Tiny}
 | |
|       />
 | |
|     </MessageStatusSendingContainer>
 | |
|   );
 | |
| };
 | |
| 
 | |
| export const OutgoingMessageStatus = (props: {
 | |
|   status?: MessageDeliveryStatus | null;
 | |
|   iconColor: string;
 | |
|   isInMessageView?: boolean;
 | |
| }) => {
 | |
|   switch (props.status) {
 | |
|     case 'sending':
 | |
|       return <MessageStatusSending {...props} />;
 | |
|     case 'sent':
 | |
|       return <MessageStatusSent {...props} />;
 | |
|     case 'read':
 | |
|       return <MessageStatusRead {...props} />;
 | |
|     case 'error':
 | |
|       if (props.isInMessageView) {
 | |
|         return null;
 | |
|       }
 | |
|       return <MessageStatusError />;
 | |
|     default:
 | |
|       return null;
 | |
|   }
 | |
| };
 |