- {groupedMessages.flatMap(group => {
- if (isMarker(group)) {
- return (
-
- );
- }
- const {messages, firstMessageTimestamp} = group;
-
- return messages.map(message => {
- const isLastDeliveredMessage = lastDeliveredMessage?.id === message.id;
-
- const visibleCallback = getVisibleCallback(conversation, message);
-
- const key = `${message.id || 'message'}-${message.timestamp()}`;
-
- const isHighlighted = !!highlightedMessage && highlightedMessage === message.id;
- const isFocused = !!focusedId && focusedId === message.id;
-
- return (
-
invitePeople(conversation)}
- onClickReactionDetails={message => showMessageReactions(message, true)}
- onClickMessage={onClickMessage}
- onClickParticipants={showParticipants}
- onClickDetails={message => showMessageDetails(message)}
- onClickResetSession={resetSession}
- onClickTimestamp={async function (messageId: string) {
- setHighlightedMessage(messageId);
- setTimeout(() => setHighlightedMessage(undefined), 5000);
- const messageIsLoaded = conversation.getMessage(messageId);
-
- if (!messageIsLoaded) {
- const messageEntity = await messageRepository.getMessageInConversationById(conversation, messageId);
- conversation.removeMessages();
- conversationRepository.getMessagesWithOffset(conversation, messageEntity);
+ <>
+
+
+ {groupedMessages.flatMap((group, groupIndex) => {
+ if (isMarker(group)) {
+ return (
+
+ );
+ }
+ const {messages, firstMessageTimestamp} = group;
+
+ return messages.map((message, messageIndex) => {
+ const isLastDeliveredMessage = lastDeliveredMessage?.id === message.id;
+ const isLastLoadedMessage =
+ groupIndex === groupedMessages.length - 1 && messageIndex === messages.length - 1;
+
+ const isLastMessage = isLastLoadedMessage && conversation.hasLastReceivedMessageLoaded();
+
+ const visibleCallback = () => {
+ getVisibleCallback(conversation, message)?.();
+ if (isLastMessage) {
+ conversation.isLastMessageVisible(true);
+ }
+ };
+
+ const lastMessageInvisibleCallback = isLastMessage
+ ? () => {
+ conversation.isLastMessageVisible(false);
}
- }}
- selfId={selfUser.qualifiedId}
- shouldShowInvitePeople={shouldShowInvitePeople}
- isFocused={isFocused}
- handleFocus={setFocusedId}
- handleArrowKeyDown={handleKeyDown}
- isMsgElementsFocusable={isMsgElementsFocusable}
- setMsgElementsFocusable={setMsgElementsFocusable}
- />
- );
- });
- })}
-
-
+ : undefined;
+
+ const key = `${message.id || 'message'}-${message.timestamp()}`;
+
+ const isHighlighted = !!highlightedMessage && highlightedMessage === message.id;
+ const isFocused = !!focusedId && focusedId === message.id;
+
+ return (
+ invitePeople(conversation)}
+ onClickReactionDetails={message => showMessageReactions(message, true)}
+ onClickMessage={onClickMessage}
+ onClickParticipants={showParticipants}
+ onClickDetails={message => showMessageDetails(message)}
+ onClickResetSession={resetSession}
+ onClickTimestamp={async function (messageId: string) {
+ setHighlightedMessage(messageId);
+ setTimeout(() => setHighlightedMessage(undefined), 5000);
+ const messageIsLoaded = conversation.getMessage(messageId);
+
+ if (!messageIsLoaded) {
+ const messageEntity = await messageRepository.getMessageInConversationById(
+ conversation,
+ messageId,
+ );
+ conversation.removeMessages();
+ conversationRepository.getMessagesWithOffset(conversation, messageEntity);
+ }
+ }}
+ selfId={selfUser.qualifiedId}
+ shouldShowInvitePeople={shouldShowInvitePeople}
+ isFocused={isFocused}
+ handleFocus={setFocusedId}
+ handleArrowKeyDown={handleKeyDown}
+ isMsgElementsFocusable={isMsgElementsFocusable}
+ setMsgElementsFocusable={setMsgElementsFocusable}
+ />
+ );
+ });
+ })}
+
+