fix(dm): render system messages in sidebar preview instead of raw JSON

DmLastMessagePreview lacked a `type` field, so the sidebar rendered
`lastMessage.content` verbatim — surfacing JSON like
`{"event":"space_invite",...}` for space invites and member-add events.

Adds `type` to the preview payload (populated server-side from
`dm_messages.type`) and routes all sidebar call sites through a single
`formatDmSidebarPreview` helper that renders human-readable text for
each system event and skips the group `Sender:` prefix on system rows.
This commit is contained in:
Jannis Braun
2026-04-29 23:13:09 +02:00
parent 9aa97f4552
commit 1ed70a90b1
7 changed files with 164 additions and 23 deletions
+6
View File
@@ -294,6 +294,12 @@ export interface DmLastMessagePreview {
userId: string;
content: string | null;
createdAt: number;
/**
* 'system' for membership/lifecycle JSON payloads (member_added, member_removed,
* owner_changed, space_invite). 'user' (or omitted) for normal user-authored
* messages. The sidebar renderer relies on this to avoid showing raw JSON.
*/
type?: 'user' | 'system';
attachments?: Array<{ type: string; filename: string }>;
}