Merge pull request #56 from Bilb/group-show-author-when-next-previous-msg-is-not-content

fix: show avatar/displayname of author when followed/ing ctrl message
pull/3281/head
Audric Ackermann 3 months ago committed by GitHub
commit de63710abd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -14,6 +14,7 @@ import {
QuoteLookupType, QuoteLookupType,
ReduxConversationType, ReduxConversationType,
SortedMessageModelProps, SortedMessageModelProps,
type PropsForMessageWithoutConvoProps,
} from '../ducks/conversations'; } from '../ducks/conversations';
import { StateType } from '../reducer'; import { StateType } from '../reducer';
@ -535,6 +536,16 @@ export const getNextMessageToPlayId = (state: StateType): string | undefined =>
export const getMentionsInput = (state: StateType): Array<SessionSuggestionDataItem> => export const getMentionsInput = (state: StateType): Array<SessionSuggestionDataItem> =>
state.conversations.mentionMembers; state.conversations.mentionMembers;
/**
* Returns true if the props are not corresponding to a visible message.
* We want to show the author avatar/display name when the next/previous message is not a visible one.
* This is to make a sure a sequence of messages from the same author, with one of them being a control message,
* shows the avatar/name of the author before and after the control message.
*/
function messagePropsHaveVisibleMessage(msgProps?: PropsForMessageWithoutConvoProps) {
return !!msgProps?.text || !isEmpty(msgProps?.attachments);
}
/// Those calls are just related to ordering messages in the redux store. /// Those calls are just related to ordering messages in the redux store.
function updateFirstMessageOfSeries( function updateFirstMessageOfSeries(
@ -548,17 +559,24 @@ function updateFirstMessageOfSeries(
for (let i = 0; i < messageModelsProps.length; i++) { for (let i = 0; i < messageModelsProps.length; i++) {
const currentSender = messageModelsProps[i].propsForMessage?.sender; const currentSender = messageModelsProps[i].propsForMessage?.sender;
// most recent message is at index 0, so the previous message sender is 1+index // most recent message is at index 0, so the previous message sender is 1+index
const previousSender = const previousPropsMessage =
i < messageModelsProps.length - 1 i < messageModelsProps.length - 1 ? messageModelsProps[i + 1].propsForMessage : undefined;
? messageModelsProps[i + 1].propsForMessage?.sender const nextPropsMessage = i > 0 ? messageModelsProps[i - 1].propsForMessage : undefined;
: undefined;
const nextSender = i > 0 ? messageModelsProps[i - 1].propsForMessage?.sender : undefined; const previousSender = previousPropsMessage?.sender;
const previousMessageIsVisibleMessage = messagePropsHaveVisibleMessage(previousPropsMessage);
const nextSender = nextPropsMessage?.sender;
const nextMessageIsVisibleMessage = messagePropsHaveVisibleMessage(nextPropsMessage);
// Handle firstMessageOfSeries for conditional avatar rendering // Handle firstMessageOfSeries for conditional avatar rendering
const firstMessageOfSeries =
!(i >= 0 && currentSender === previousSender) || !previousMessageIsVisibleMessage;
const lastMessageOfSeries = currentSender !== nextSender || !nextMessageIsVisibleMessage;
sortedMessageProps.push({ sortedMessageProps.push({
...messageModelsProps[i], ...messageModelsProps[i],
firstMessageOfSeries: !(i >= 0 && currentSender === previousSender), firstMessageOfSeries,
lastMessageOfSeries: currentSender !== nextSender, lastMessageOfSeries,
}); });
} }
return sortedMessageProps; return sortedMessageProps;

Loading…
Cancel
Save