From 94a1d28a4c1f74a6af8c14602ac722e38e91f0e0 Mon Sep 17 00:00:00 2001 From: Jannis Braun <151788261+TheZwiss@users.noreply.github.com> Date: Sun, 10 May 2026 20:51:09 +0200 Subject: [PATCH] feat(mobile): MobileDmsScreen uses AvatarStack + dm.name + group globe --- .../src/components/layout/MobileDmsScreen.tsx | 47 +++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/packages/web/src/components/layout/MobileDmsScreen.tsx b/packages/web/src/components/layout/MobileDmsScreen.tsx index 7d733e01..b79472f6 100644 --- a/packages/web/src/components/layout/MobileDmsScreen.tsx +++ b/packages/web/src/components/layout/MobileDmsScreen.tsx @@ -6,6 +6,7 @@ import { useAuthStore } from '../../stores/authStore'; import { useSocialStore } from '../../stores/socialStore'; import { useContextMenuStore } from '../../stores/contextMenuStore'; import { Avatar } from '../ui/Avatar'; +import { AvatarStack } from '../ui/AvatarStack'; import { Mascot } from '../ui/Mascot'; import { resolveAssetUrl } from '../../utils/assetUrls'; import { useNavigate } from 'react-router-dom'; @@ -87,10 +88,20 @@ function MobileDmRow({ const canonicalMainUser = useCanonicalUserView(rawMainUser ?? FALLBACK_USER); const mainUser = rawMainUser ? canonicalMainUser : null; + // Group DMs use `dm.name` when set, else fall back to a comma-joined member + // list (matches `MobileChatScreen` + `DmListItem`). 1:1 DMs use the + // canonical view of the single other member. const name = isGroup - ? otherMembers.map(m => m.displayName ?? parseFederatedUsername(m.username).baseName).join(', ') + ? (dm.name && dm.name.length > 0 + ? dm.name + : otherMembers.map(m => m.displayName ?? parseFederatedUsername(m.username).baseName).join(', ')) : mainUser?.displayName ?? (parseFederatedUsername(mainUser?.username ?? '').baseName || 'Unknown'); + // Show a single federation globe next to the group name when any non-self + // member is federated. No tooltip on mobile — the new `group-dm-info` screen + // surfaces federation identity per-member. + const groupHasFederatedMember = isGroup && otherMembers.some((m) => isFederationGlobeApplicable(m)); + const lastMsgId = dm.lastMessage?.id; const readState = readStates.get(dm.id); const isUnread = lastMsgId && (!readState || readState < lastMsgId); @@ -110,11 +121,16 @@ function MobileDmRow({ >