From 6ad3d3051fe89c0dc3fff69349eab727b338f251 Mon Sep 17 00:00:00 2001 From: MartinBraquet Date: Wed, 11 Feb 2026 13:16:28 +0100 Subject: [PATCH] Show messages of deleted users --- web/messages/de.json | 2 + web/messages/fr.json | 2 + web/pages/messages/[channelId].tsx | 74 ++++++++++++++++++++---------- web/pages/messages/index.tsx | 32 +++++++------ 4 files changed, 72 insertions(+), 38 deletions(-) diff --git a/web/messages/de.json b/web/messages/de.json index 26b6c4ca..c3fd6b10 100644 --- a/web/messages/de.json +++ b/web/messages/de.json @@ -314,6 +314,8 @@ "messages.toast.muting_forever.success": "Benachrichtigungen dauerhaft stummgeschaltet", "messages.toast.send_failed": "Senden der Nachricht fehlgeschlagen. Bitte versuchen Sie es später erneut oder kontaktieren Sie den Support, wenn das Problem weiterhin besteht.", "messages.you_prefix": "Sie: ", + "messages.cannot_message_deleted": "Sie können ihnen keine Nachricht senden, da sie ihr Konto gelöscht haben", + "messages.deleted_user": "Gelöschter Benutzer", "multi-checkbox.enter_value": "Bitte geben Sie einen Wert ein.", "multi-checkbox.could_not_add": "Option konnte nicht hinzugefügt werden.", "multi-checkbox.add_failed": "Hinzufügen der Option fehlgeschlagen.", diff --git a/web/messages/fr.json b/web/messages/fr.json index dfd8a291..b6b38e36 100644 --- a/web/messages/fr.json +++ b/web/messages/fr.json @@ -314,6 +314,8 @@ "messages.toast.muting_forever.success": "Notifs coupées définitivement", "messages.toast.send_failed": "Échec de l'envoi du message. Veuillez réessayer plus tard ou contacter le support si le problème persiste.", "messages.you_prefix": "Vous : ", + "messages.cannot_message_deleted": "Vous ne pouvez pas leur envoyer de message car ils ont supprimé leur compte", + "messages.deleted_user": "Utilisateur supprimé", "multi-checkbox.enter_value": "Veuillez saisir une valeur.", "multi-checkbox.could_not_add": "Impossible d'ajouter l'option.", "multi-checkbox.add_failed": "Échec de l'ajout de l'option.", diff --git a/web/pages/messages/[channelId].tsx b/web/pages/messages/[channelId].tsx index 5a4be116..34d2ec88 100644 --- a/web/pages/messages/[channelId].tsx +++ b/web/pages/messages/[channelId].tsx @@ -1,6 +1,6 @@ import {PageBase} from 'web/components/page-base' import {useRouter} from 'next/router' -import {usePrivateMessages, useSortedPrivateMessageMemberships,} from 'web/hooks/use-private-messages' +import {usePrivateMessages, useSortedPrivateMessageMemberships} from 'web/hooks/use-private-messages' import {Col} from 'web/components/layout/col' import {User} from 'common/user' import {useCallback, useEffect, useState} from 'react' @@ -19,6 +19,7 @@ import {Row} from 'web/components/layout/row' import clsx from 'clsx' import {useRedirectIfSignedOut} from 'web/hooks/use-redirect-if-signed-out' import {MultipleOrSingleAvatars} from 'web/components/multiple-or-single-avatars' +import {Avatar} from 'web/components/widgets/avatar' import {Modal, MODAL_CLASS} from 'web/components/layout/modal' import {BannedBadge, UserAvatarAndBadge,} from 'web/components/widgets/user-link' import DropdownMenu from 'web/components/comments/dropdown-menu' @@ -69,6 +70,7 @@ export function PrivateMessagesContent(props: { useRedirectIfSignedOut() const {channelId, user} = props + const t = useT() const channelMembership = useSortedPrivateMessageMemberships( user.id, 1, @@ -77,14 +79,20 @@ export function PrivateMessagesContent(props: { const {channels, memberIdsByChannelId} = channelMembership const thisChannel = channels?.find((c) => c.channel_id == channelId) const loaded = channels !== undefined && channelId - const memberIds = thisChannel + const memberIds = (thisChannel ? memberIdsByChannelId?.[thisChannel.channel_id] - : undefined + : undefined) ?? [] return ( <> - {user && loaded && thisChannel && memberIds ? ( - + {user && loaded ? ( + thisChannel ? ( + + ) : ( +
+ {t('', 'You do not have access to this conversation.')} +
+ ) ) : ( )} @@ -103,6 +111,8 @@ export const PrivateChat = (props: { const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent) const isMobile = useIsMobile() + const noOtherUser = memberIds.length === 0 + const totalMessagesToLoad = 100 const {messages: realtimeMessages, setMessages, fetchMessages} = usePrivateMessages( channelId, @@ -246,16 +256,20 @@ export const PrivateChat = (props: { } > - setShowUsers(true)} - /> - {members && ( + {members && members.length > 0 ? ( + setShowUsers(true)} + /> + ) : ( + + )} + {members && members.length > 0 ? ( members.length === 1 ? router.push(`/${members[0].username}`) @@ -263,11 +277,13 @@ export const PrivateChat = (props: { } > {members - .map((user) => user.name.split(' ')[0].trim()) + .map((user) => (user.name ? user.name.split(' ')[0].trim() : t('messages.deleted_user', 'Deleted user'))) .slice(0, 2) .join(', ')} {members.length > 2 && ` & ${members.length - 2} more`} + ) : ( + {t('messages.deleted_user', 'Deleted user')} )} {members?.length == 1 && members[0].isBannedFromPosting && ( @@ -419,16 +435,24 @@ export const PrivateChat = (props: { - + {noOtherUser ? ( +
+ + {t('messages.cannot_message_deleted', "You can't text them as they deleted their account")} + +
+ ) : ( + + )} ) } diff --git a/web/pages/messages/index.tsx b/web/pages/messages/index.tsx index 9f567ddb..ac97a2e1 100644 --- a/web/pages/messages/index.tsx +++ b/web/pages/messages/index.tsx @@ -17,6 +17,7 @@ import {useUser} from 'web/hooks/use-user' import {useUsersInStore} from 'web/hooks/use-user-supabase' import {useRedirectIfSignedOut} from 'web/hooks/use-redirect-if-signed-out' import {MultipleOrSingleAvatars} from 'web/components/multiple-or-single-avatars' +import {Avatar} from 'web/components/widgets/avatar' import {BannedBadge} from 'web/components/widgets/user-link' import {PrivateMessageChannel} from 'common/supabase/private-messages' import {SEO} from "web/components/SEO"; @@ -66,8 +67,7 @@ export function MessagesContent(props: { currentUser: User }) { {channels?.map((channel) => { const userIds = memberIdsByChannelId?.[channel.channel_id]?.map( (m) => m - ) - if (!userIds) return null + ) || [] return ( - 1 ? '-ml-2' : ''} - /> + + {otherUsers && otherUsers.length > 0 ? ( + 1 ? '-ml-2' : ''} + /> + ) : ( + + )} - {otherUsers && ( + {otherUsers && otherUsers.length > 0 ? ( {otherUsers - .map((user) => user.name.split(' ')[0].trim()) + .map((user) => (user.name ? user.name.split(' ')[0].trim() : t('messages.deleted_user', 'Deleted user'))) .slice(0, 2) .join(', ')} {otherUsers.length > 2 && ( @@ -129,6 +133,8 @@ export const MessageChannelRow = (props: { )} + ) : ( + {t('messages.deleted_user', 'Deleted user')} )} {isBanned && }