From 6af469de2b610e09c0777a944d6f199435fc74ea Mon Sep 17 00:00:00 2001 From: DocNR Date: Sat, 13 Jun 2026 17:32:29 -0400 Subject: [PATCH] feat(mute): collapse muted-thread notes with reveal, matching muted users Thread mute only hard-hid notes in feeds/notifications. Muted USERS get a second tier: a 'show anyway' placeholder () wherever a note renders through but isn't list-filtered (embeds/quotes and direct detail views). Thread mute lacked that tier, so a quote of a muted thread rendered in full. Bring thread mute to parity at every tier muted users use: - Note/index.tsx: collapse to with a 'Temporarily display this note' reveal (embeds + detail) - NoteCard.shouldHide + useFilteredReplies (both hooks): hard-hide muted-thread notes (standalone cards + thread reply lists) - MutedNote generalized with a reason prop ('user' default) so the component is not duplicated Feeds + notifications stay hard-hide, same as muted users. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/components/Note/MutedNote.tsx | 14 ++++++++++++-- src/components/Note/index.tsx | 6 ++++-- src/components/NoteCard/index.tsx | 9 ++++++--- src/hooks/useFilteredReplies.tsx | 11 ++++++----- src/i18n/locales/en.ts | 3 ++- 5 files changed, 30 insertions(+), 13 deletions(-) diff --git a/src/components/Note/MutedNote.tsx b/src/components/Note/MutedNote.tsx index 4964ff6..4a04e5a 100644 --- a/src/components/Note/MutedNote.tsx +++ b/src/components/Note/MutedNote.tsx @@ -2,12 +2,22 @@ import { Button } from '@/components/ui/button' import { Eye } from 'lucide-react' import { useTranslation } from 'react-i18next' -export default function MutedNote({ show }: { show: () => void }) { +export default function MutedNote({ + show, + reason = 'user' +}: { + show: () => void + reason?: 'user' | 'thread' +}) { const { t } = useTranslation() return (
-
{t('This user has been muted')}
+
+ {reason === 'thread' + ? t('This note is from a thread you muted') + : t('This user has been muted')} +