diff --git a/web/src/features/messages/MessageBubble.tsx b/web/src/features/messages/MessageBubble.tsx index 0cdf581e..e6801e3d 100644 --- a/web/src/features/messages/MessageBubble.tsx +++ b/web/src/features/messages/MessageBubble.tsx @@ -141,17 +141,39 @@ export function MessageRow({ }} className={`flex flex-1 items-start gap-2.5 ${mine ? 'flex-row-reverse' : ''}`} > - - {avatarLetter(mine ? '我' : isGroup ? senderName || msg.from : peerName)} - + {/* Group members' avatar/name go to their profile (same destination ContactCardBubble's own + card already uses, which works for a non-friend group member too -- FriendProfileView's + relationship-aware buttons handle that case, it isn't friends-only). Not for `mine` -- that + slot always reads "我", and viewing "your own profile" via a route built around a two-party + relationship isn't a case this app has ever needed to support. Not during `selectMode` + either -- the checkbox is the only thing a tap in this row should do while bulk-selecting, + not navigate away and lose whatever's already been picked. */} + {isGroup && !mine && !selectMode && msg.from ? ( + + {avatarLetter(senderName || msg.from)} + + ) : ( + + {avatarLetter(mine ? '我' : isGroup ? senderName || msg.from : peerName)} + + )}
{isGroup ? (
- {mine ? '我' : senderName || msg.from} + {!mine && !selectMode && msg.from ? ( + + {senderName || msg.from} + + ) : ( + {mine ? '我' : senderName || msg.from} + )}
) : null}