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.
		
		
		
		
		
			
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
| import is from '@sindresorhus/is';
 | |
| import { Message } from './Message';
 | |
| 
 | |
| 
 | |
| interface ConversationLastMessageUpdate {
 | |
|   lastMessage: string | null;
 | |
|   timestamp: number | null;
 | |
| }
 | |
| 
 | |
| export const createLastMessageUpdate = ({
 | |
|   currentLastMessageText,
 | |
|   currentTimestamp,
 | |
|   lastMessage,
 | |
|   lastMessageNotificationText,
 | |
| }: {
 | |
|   currentLastMessageText: string | null,
 | |
|   currentTimestamp: number | null,
 | |
|   lastMessage: Message | null,
 | |
|   lastMessageNotificationText: string | null,
 | |
| }): ConversationLastMessageUpdate => {
 | |
|   if (lastMessage === null) {
 | |
|     return {
 | |
|       lastMessage: '',
 | |
|       timestamp: null,
 | |
|     };
 | |
|   }
 | |
| 
 | |
|   const { type } = lastMessage;
 | |
|   const isVerifiedChangeMessage = type === 'verified-change';
 | |
|   const isExpiringMessage = is.object(lastMessage.expirationTimerUpdate);
 | |
|   const shouldUpdateTimestamp = !isVerifiedChangeMessage && !isExpiringMessage;
 | |
| 
 | |
|   const newTimestamp = shouldUpdateTimestamp ?
 | |
|     lastMessage.sent_at :
 | |
|     currentTimestamp;
 | |
| 
 | |
|   const shouldUpdateLastMessageText = !isVerifiedChangeMessage;
 | |
|   const newLastMessageText = shouldUpdateLastMessageText ?
 | |
|     lastMessageNotificationText : currentLastMessageText;
 | |
| 
 | |
|   return {
 | |
|     lastMessage: newLastMessageText,
 | |
|     timestamp: newTimestamp,
 | |
|   };
 | |
| };
 |