From 39028ae56f1d3830069e62e54b821fcdd1daea84 Mon Sep 17 00:00:00 2001 From: Jannis Braun <151788261+TheZwiss@users.noreply.github.com> Date: Mon, 20 Apr 2026 15:06:48 +0200 Subject: [PATCH] feat: two-variant DM unreachable indicator for rejected vs awaiting_approval --- .../web/src/components/layout/DmListItem.tsx | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/web/src/components/layout/DmListItem.tsx b/packages/web/src/components/layout/DmListItem.tsx index fe8ea415..e67e3c5b 100644 --- a/packages/web/src/components/layout/DmListItem.tsx +++ b/packages/web/src/components/layout/DmListItem.tsx @@ -3,7 +3,7 @@ import { Avatar } from '../ui/Avatar'; import { Tooltip } from '../ui/Tooltip'; import { parseFederatedUsername, isSelf } from '../../utils/identity'; import { formatDmTimestamp, formatDmPreview } from '../../utils/dmFormatters'; -import { getRejectedPeerOrigins } from '../../hooks/useWebSocket'; +import { getRejectedPeerOrigins, getAwaitingApprovalPeerOrigins } from '../../hooks/useWebSocket'; function isMemberUnreachable(homeInstance: string | null | undefined): boolean { if (!homeInstance) return false; @@ -11,6 +11,12 @@ function isMemberUnreachable(homeInstance: string | null | undefined): boolean { return getRejectedPeerOrigins().has(normalized); } +function isMemberAwaitingApproval(homeInstance: string | null | undefined): boolean { + if (!homeInstance) return false; + const normalized = homeInstance.startsWith('http') ? homeInstance : `https://${homeInstance}`; + return getAwaitingApprovalPeerOrigins().has(normalized); +} + interface DmListItemProps { dm: DmChannel; isActive: boolean; @@ -160,12 +166,19 @@ export function DmListItem({ dm, isActive, isUnread, user, onSelect, onClose, on )} {firstOther && isMemberUnreachable(firstOther.homeInstance) && ( - - + + )} + {firstOther && !isMemberUnreachable(firstOther.homeInstance) && isMemberAwaitingApproval(firstOther.homeInstance) && ( + + + + + + )} {dm.lastMessage && ( {formatDmTimestamp(dm.lastMessage.createdAt)}