From 6efe90a5f5c213a02da9f906fc1f098db113d71d Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Tue, 14 May 2024 20:07:53 -0500 Subject: [🐴] Block states, read only (#4022) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Refactor ChatListItem for mod state * Refactor Conversation Header for mod state * Invalidate query for list when blocking/unblocking * Remove unused prop, restore border * Add mutations, hook up profile shadow to list query, use shadow-aware query for convo (#4024) --- src/screens/Messages/List/ChatListItem.tsx | 70 ++++++++++++++++++++++-------- 1 file changed, 53 insertions(+), 17 deletions(-) (limited to 'src/screens/Messages/List/ChatListItem.tsx') diff --git a/src/screens/Messages/List/ChatListItem.tsx b/src/screens/Messages/List/ChatListItem.tsx index 57a8e0348..aa47e9503 100644 --- a/src/screens/Messages/List/ChatListItem.tsx +++ b/src/screens/Messages/List/ChatListItem.tsx @@ -1,13 +1,21 @@ import React from 'react' import {View} from 'react-native' -import {ChatBskyConvoDefs} from '@atproto/api' +import { + AppBskyActorDefs, + ChatBskyConvoDefs, + moderateProfile, + ModerationOpts, +} from '@atproto/api' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useNavigation} from '@react-navigation/native' import {NavigationProp} from '#/lib/routes/types' import {isNative} from '#/platform/detection' +import {useProfileShadow} from '#/state/cache/profile-shadow' +import {useModerationOpts} from '#/state/preferences/moderation-opts' import {useSession} from '#/state/session' +import {sanitizeDisplayName} from 'lib/strings/display-names' import {TimeElapsed} from '#/view/com/util/TimeElapsed' import {UserAvatar} from '#/view/com/util/UserAvatar' import {atoms as a, useBreakpoints, useTheme, web} from '#/alf' @@ -17,25 +25,53 @@ import {Bell2Off_Filled_Corner0_Rounded as BellStroke} from '#/components/icons/ import {useMenuControl} from '#/components/Menu' import {Text} from '#/components/Typography' -export function ChatListItem({ +export function ChatListItem({convo}: {convo: ChatBskyConvoDefs.ConvoView}) { + const {currentAccount} = useSession() + const otherUser = convo.members.find( + member => member.did !== currentAccount?.did, + ) + const moderationOpts = useModerationOpts() + + if (!otherUser || !moderationOpts) { + return null + } + + return ( + + ) +} + +function ChatListItemReady({ convo, - index, + profile: profileUnshadowed, + moderationOpts, }: { convo: ChatBskyConvoDefs.ConvoView - index: number + profile: AppBskyActorDefs.ProfileViewBasic + moderationOpts: ModerationOpts }) { const t = useTheme() const {_} = useLingui() const {currentAccount} = useSession() const menuControl = useMenuControl() const {gtMobile} = useBreakpoints() - const otherUser = convo.members.find( - member => member.did !== currentAccount?.did, + const profile = useProfileShadow(profileUnshadowed) + const moderation = React.useMemo( + () => moderateProfile(profile, moderationOpts), + [profile, moderationOpts], ) - const isDeletedAccount = otherUser?.handle === 'missing.invalid' + + const isDeletedAccount = profile.handle === 'missing.invalid' const displayName = isDeletedAccount ? 'Deleted Account' - : otherUser?.displayName || otherUser?.handle + : sanitizeDisplayName( + profile.displayName || profile.handle, + moderation.ui('displayName'), + ) let lastMessage = _(msg`No messages yet`) let lastMessageSentAt: string | null = null @@ -73,10 +109,6 @@ export function ChatListItem({ }) }, [convo.id, navigation]) - if (!otherUser) { - return null - } - return (