mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-11-04 04:57:51 +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>
 |