mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 02:57:57 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <script setup>
 | |
| import Message from '../Message.vue';
 | |
| 
 | |
| import textWithMedia from '../fixtures/textWithMedia.js';
 | |
| 
 | |
| const messages = textWithMedia;
 | |
| 
 | |
| const shouldGroupWithNext = index => {
 | |
|   if (index === messages.length - 1) return false;
 | |
| 
 | |
|   const current = messages[index];
 | |
|   const next = messages[index + 1];
 | |
| 
 | |
|   if (next.status === 'failed') return false;
 | |
| 
 | |
|   const nextSenderId = next.senderId ?? next.sender?.id;
 | |
|   const currentSenderId = current.senderId ?? current.sender?.id;
 | |
|   if (currentSenderId !== nextSenderId) return false;
 | |
| 
 | |
|   // Check if messages are in the same minute by rounding down to nearest minute
 | |
|   return Math.floor(next.createdAt / 60) === Math.floor(current.createdAt / 60);
 | |
| };
 | |
| 
 | |
| const getReplyToMessage = message => {
 | |
|   const idToCheck = message.contentAttributes.inReplyTo;
 | |
|   if (!idToCheck) return null;
 | |
| 
 | |
|   return messages.find(candidate => idToCheck === candidate.id);
 | |
| };
 | |
| </script>
 | |
| 
 | |
| <template>
 | |
|   <Story title="Components/Messages/Text" :layout="{ type: 'single' }">
 | |
|     <div class="p-4 bg-n-background rounded-lg w-full min-w-5xl grid">
 | |
|       <template v-for="(message, index) in messages" :key="message.id">
 | |
|         <Message
 | |
|           :current-user-id="1"
 | |
|           :group-with-next="shouldGroupWithNext(index)"
 | |
|           :in-reply-to="getReplyToMessage(message)"
 | |
|           v-bind="message"
 | |
|         />
 | |
|       </template>
 | |
|     </div>
 | |
|   </Story>
 | |
| </template>
 | 
