diff --git a/web-chat/src/ChatList.tsx b/web-chat/src/ChatList.tsx index 77917bb80e..fa1fa9291c 100644 --- a/web-chat/src/ChatList.tsx +++ b/web-chat/src/ChatList.tsx @@ -1,6 +1,11 @@ import { useEffect, useRef } from 'react'; import { ChatMessage } from '../../build/main/chat/chat_message'; -import { Message, MessageText, MessageGroup } from '@livechat/ui-kit'; +import { + Message, + MessageText, + MessageGroup, + MessageList, +} from '@livechat/ui-kit'; interface Props { messages: ChatMessage[]; @@ -9,33 +14,57 @@ interface Props { export default function ChatList(props: Props) { const messages = props.messages; - const listItems = messages.map((currentMessage) => ( - - {currentMessage.message} - - )); - - return ( - - {listItems} - - + const messagesGroupedBySender = groupMessagesBySender(props.messages).map( + (currentMessageGroup) => ( + + {currentMessageGroup.map((currentMessage) => ( + + {currentMessage.message} + + ))} + + ) ); - function formatDisplayDate(message: ChatMessage) { - return message.timestamp.toLocaleString([], { - month: 'short', - day: 'numeric', - hour: 'numeric', - minute: '2-digit', - hour12: false, - }); + return ( + + {messagesGroupedBySender} + + + ); +} + +function groupMessagesBySender(messageArray: ChatMessage[]): ChatMessage[][] { + let currentSender = -1; + let lastNick = ''; + let messagesBySender: ChatMessage[][] = []; + let currentSenderMessage = 0; + + for (let currentMessage of messageArray) { + if (lastNick !== currentMessage.nick) { + currentSender++; + messagesBySender[currentSender] = []; + currentSenderMessage = 0; + lastNick = currentMessage.nick; + } + messagesBySender[currentSender][currentSenderMessage++] = currentMessage; } + return messagesBySender; +} + +function formatDisplayDate(message: ChatMessage): string { + return message.timestamp.toLocaleString([], { + month: 'short', + day: 'numeric', + hour: 'numeric', + minute: '2-digit', + hour12: false, + }); } const AlwaysScrollToBottom = (props: Props) => { diff --git a/web-chat/src/Room.tsx b/web-chat/src/Room.tsx index a0849f3e52..2ea40c291c 100644 --- a/web-chat/src/Room.tsx +++ b/web-chat/src/Room.tsx @@ -5,7 +5,7 @@ import { ChatContentTopic } from './App'; import ChatList from './ChatList'; import MessageInput from './MessageInput'; import { useWaku } from './WakuContext'; -import { TitleBar, MessageList } from '@livechat/ui-kit'; +import { TitleBar } from '@livechat/ui-kit'; interface Props { lines: ChatMessage[]; @@ -23,9 +23,7 @@ export default function Room(props: Props) { style={{ height: '98vh', display: 'flex', flexDirection: 'column' }} > - - - +