fix: DM close removes from sidebar, DM header shows real user status

This commit is contained in:
jevb
2026-03-27 14:39:47 +01:00
parent 36062d1495
commit ac74252304
2 changed files with 14 additions and 2 deletions
@@ -21,6 +21,8 @@ import type { PendingDeleteManager } from "./MessageController";
import type { ReactionController } from "./ReactionController";
import { updateChatHeaderForDm } from "./ChatHeader";
import type { ChatHeaderRefs } from "./ChatHeader";
import { dmStore } from "@stores/dm.store";
import { membersStore } from "@stores/members.store";
const log = createLogger("channel-ctrl");
@@ -264,7 +266,15 @@ export function createChannelController(
// Update header
if (chatHeaderRefs !== null && channelType === "dm") {
updateChatHeaderForDm(chatHeaderRefs, { username: channelName, status: "Online" });
// Look up the recipient's actual status from DM store or members store
const dmChannel = dmStore.getState().channels.find((c) => c.channelId === channelId);
let recipientStatus = "Offline";
if (dmChannel !== undefined) {
const member = membersStore.getState().members.get(dmChannel.recipient.id);
recipientStatus = member?.status ?? dmChannel.recipient.status ?? "Offline";
}
const displayStatus = recipientStatus.charAt(0).toUpperCase() + recipientStatus.slice(1);
updateChatHeaderForDm(chatHeaderRefs, { username: channelName, status: displayStatus });
} else if (chatHeaderRefs !== null) {
updateChatHeaderForDm(chatHeaderRefs, null);
if (chatHeaderName !== null) {
@@ -28,7 +28,7 @@ import { authStore, clearAuth } from "@stores/auth.store";
import { membersStore, getOnlineMembers } from "@stores/members.store";
import { channelsStore, setActiveChannel } from "@stores/channels.store";
import type { Channel } from "@stores/channels.store";
import { dmStore, clearDmUnread, addDmChannel } from "@stores/dm.store";
import { dmStore, clearDmUnread, addDmChannel, removeDmChannel } from "@stores/dm.store";
import type { DmChannel } from "@stores/dm.store";
import {
createProfileManager,
@@ -410,6 +410,8 @@ export function createSidebarArea(opts: SidebarAreaOptions): SidebarAreaResult {
onCloseDm: (userId) => {
const dmChannel = dmChannels.find((c) => c.recipient.id === userId);
if (dmChannel !== undefined) {
// Remove from store immediately (optimistic), then call API
removeDmChannel(dmChannel.channelId);
void api.closeDm(dmChannel.channelId);
}
},