Skip to content
Draft
5 changes: 5 additions & 0 deletions .changeset/feat-dm-message-preview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: minor
---

feat(dm-list): show last-message preview below DM room name
Comment on lines +1 to +5
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This changeset introduces a separate minor release entry for the DM message preview feature. If DM previews are intentionally part of this PR, the PR title/description should mention it; otherwise this changeset should probably be removed/split so release notes match the actual PR scope.

Copilot uses AI. Check for mistakes.
5 changes: 5 additions & 0 deletions .changeset/room-message-preview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: minor
---

feat(room-nav): show topic and last-message preview for rooms in the sidebar, fetching enough timeline events to handle reactions and edits correctly
13 changes: 12 additions & 1 deletion src/app/features/room-nav/RoomNavItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ import { useAutoDiscoveryInfo } from '$hooks/useAutoDiscoveryInfo';
import { livekitSupport } from '$hooks/useLivekitSupport';
import { Presence, useUserPresence } from '$hooks/useUserPresence';
import { AvatarPresence, PresenceBadge } from '$components/presence';
import { useRoomLastMessage } from '$hooks/useRoomLastMessage';
import { RoomNavUser } from './RoomNavUser';
import { SidebarUnreadBadge } from '$components/sidebar';

Expand Down Expand Up @@ -266,6 +267,9 @@ type RoomNavItemProps = {
customDMCards?: boolean;
hideText?: boolean;
joinCallOnSingleClick?: boolean;
roomTopicPreview?: boolean;
roomMessagePreview?: boolean;
dmMessagePreview?: boolean;
};

export function RoomNavItem({
Expand All @@ -274,6 +278,9 @@ export function RoomNavItem({
showAvatar,
direct,
customDMCards,
roomTopicPreview = false,
roomMessagePreview = false,
dmMessagePreview = true,
notificationMode,
linkPath,
hideText,
Expand All @@ -297,8 +304,12 @@ export function RoomNavItem({
const matrixRoomName = useRoomName(room);
const roomName = (dmUserId && nicknames[dmUserId]) || matrixRoomName;
const presence = useUserPresence(dmUserId ?? '');
const showPreview = direct ? dmMessagePreview : roomMessagePreview;
const lastMessage = useRoomLastMessage(showPreview ? room : undefined, mx);
const getRoomTopic = useRoomTopic(room);
const roomTopic = direct ? ((customDMCards && getRoomTopic) ?? presence?.status) : undefined;
const roomTopic = direct
? (customDMCards && getRoomTopic) || lastMessage || presence?.status
: (roomTopicPreview && getRoomTopic) || (roomMessagePreview ? lastMessage : undefined);

const { navigateRoom } = useRoomNavigate();
const navigate = useNavigate();
Expand Down
51 changes: 51 additions & 0 deletions src/app/features/settings/cosmetics/Themes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -784,12 +784,18 @@ export function Appearance({
const [sidebarSelector, setSidebarSelector] = useState('roomSidebarWidth');
const [twitterEmoji, setTwitterEmoji] = useSetting(settingsAtom, 'twitterEmoji');
const [customDMCards, setCustomDMCards] = useSetting(settingsAtom, 'customDMCards');
const [dmMessagePreview, setDmMessagePreview] = useSetting(settingsAtom, 'dmMessagePreview');
const [showEasterEggs, setShowEasterEggs] = useSetting(settingsAtom, 'showEasterEggs');
const [themeBrowserOpen, setThemeBrowserOpen] = useState(false);
const [closeFoldersByDefault, setCloseFoldersByDefault] = useSetting(
settingsAtom,
'closeFoldersByDefault'
);
const [roomTopicPreview, setRoomTopicPreview] = useSetting(settingsAtom, 'roomTopicPreview');
const [roomMessagePreview, setRoomMessagePreview] = useSetting(
settingsAtom,
'roomMessagePreview'
);

return (
<Box direction="Column" gap="700">
Expand Down Expand Up @@ -842,6 +848,51 @@ export function Appearance({
/>
</SequenceCard>

<SequenceCard className={SequenceCardStyle} variant="SurfaceVariant" direction="Column">
<SettingTile
title="DM Message Preview"
focusId="dm-message-preview"
description="Show a preview of the last message below DM room names."
after={
<Switch
variant="Primary"
value={dmMessagePreview}
onChange={setDmMessagePreview}
/>
}
/>
</SequenceCard>

<SequenceCard className={SequenceCardStyle} variant="SurfaceVariant" direction="Column">
<SettingTile
title="Room Topic Preview"
focusId="room-topic-preview"
description="Show the room topic below room names in spaces and Home."
after={
<Switch
variant="Primary"
value={roomTopicPreview}
onChange={setRoomTopicPreview}
/>
}
/>
</SequenceCard>

<SequenceCard className={SequenceCardStyle} variant="SurfaceVariant" direction="Column">
<SettingTile
title="Room Message Preview"
focusId="room-message-preview"
description="Show the latest message below room names in spaces and Home."
after={
<Switch
variant="Primary"
value={roomMessagePreview}
onChange={setRoomMessagePreview}
/>
}
/>
</SequenceCard>

<SequenceCard className={SequenceCardStyle} variant="SurfaceVariant" direction="Column">
<SettingTile
title="Show Easter Eggs"
Expand Down
Loading
Loading