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' }}
>
-
-
-
+