diff --git a/packages/web/src/components/layout/ChannelSidebar.tsx b/packages/web/src/components/layout/ChannelSidebar.tsx index 9f0b9cfb..26b0a80c 100644 --- a/packages/web/src/components/layout/ChannelSidebar.tsx +++ b/packages/web/src/components/layout/ChannelSidebar.tsx @@ -17,6 +17,7 @@ import { wsSend } from '../../hooks/useWebSocket'; import { AudioManager } from '../../audio/AudioManager'; import { hasPermissionBit, PermissionBits } from '../../utils/permissions'; import { parseFederatedUsername, isSelf } from '../../utils/identity'; +import { formatDmTimestamp, formatDmPreview } from '../../utils/dmFormatters'; import { joinVoiceChannel, broadcastVoiceStatus, broadcastDeafenViaLiveKit } from '../../utils/voice'; import { useContextMenuStore, type ContextMenuItem } from '../../stores/contextMenuStore'; import { ConfirmDialog } from '../ui/ConfirmDialog'; @@ -554,16 +555,37 @@ export function ChannelSidebar() { )} + {dm.lastMessage && ( + + {formatDmTimestamp(dm.lastMessage.createdAt)} + + )} - {isGroup ? ( -
- {dm.members.length} Members -
- ) : dm.lastMessage ? ( -
- {dm.lastMessage.content} -
- ) : null} + {(() => { + const preview = formatDmPreview(dm.lastMessage ?? null); + if (isGroup) { + const lastMsg = dm.lastMessage; + const senderName = (lastMsg && 'user' in lastMsg ? lastMsg.user?.displayName : undefined) + ?? dm.members.find(m => m.id === lastMsg?.userId)?.displayName + ?? 'Unknown'; + const groupPreview = preview + ? `${senderName}: ${preview}` + : `${dm.members.length} Members`; + return ( +
+ {groupPreview} +
+ ); + } + if (preview) { + return ( +
+ {preview} +
+ ); + } + return null; + })()}