From ed8922281af46071375f47112fbb37ba5b7d578b Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Wed, 15 May 2024 16:05:17 +0100 Subject: [PATCH] =?UTF-8?q?[=F0=9F=90=B4]=20Show=20if=20user=20can=20be=20?= =?UTF-8?q?messaged=20in=20new=20chat=20search=20(#4021)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * show if user can be messaged * allow 2 lines in handle field due to new text * cannot -> can't * rework canBeMessaged logic and move to new file --------- Co-authored-by: Eric Bailey --- src/components/Lists.tsx | 4 ++- src/components/dialogs/GifSelect.tsx | 1 + src/components/dms/NewChat.tsx | 37 ++++++++++++++++++---- src/components/dms/util.ts | 18 +++++++++++ src/screens/Messages/List/ChatListItem.tsx | 18 +++++------ 5 files changed, 61 insertions(+), 17 deletions(-) create mode 100644 src/components/dms/util.ts diff --git a/src/components/Lists.tsx b/src/components/Lists.tsx index 721e877be6..8cbe2810e8 100644 --- a/src/components/Lists.tsx +++ b/src/components/Lists.tsx @@ -136,6 +136,7 @@ let ListMaybePlaceholder = ({ onGoBack, hideBackButton, sideBorders, + topBorder = true, }: { isLoading: boolean noEmpty?: boolean @@ -149,6 +150,7 @@ let ListMaybePlaceholder = ({ onGoBack?: () => void hideBackButton?: boolean sideBorders?: boolean + topBorder?: boolean }): React.ReactNode => { const t = useTheme() const {_} = useLingui() @@ -165,7 +167,7 @@ let ListMaybePlaceholder = ({ {paddingTop: 175, paddingBottom: 110}, ]} sideBorders={sideBorders ?? gtMobile} - topBorder={!gtTablet}> + topBorder={topBorder && !gtTablet}> diff --git a/src/components/dialogs/GifSelect.tsx b/src/components/dialogs/GifSelect.tsx index 57389ba2b7..4a3ce42aa9 100644 --- a/src/components/dialogs/GifSelect.tsx +++ b/src/components/dialogs/GifSelect.tsx @@ -197,6 +197,7 @@ function GifList({ onGoBack={onGoBack} emptyType="results" sideBorders={false} + topBorder={false} errorTitle={_(msg`Failed to load GIFs`)} errorMessage={_(msg`There was an issue connecting to Tenor.`)} emptyMessage={ diff --git a/src/components/dms/NewChat.tsx b/src/components/dms/NewChat.tsx index 5dde8628c1..3975c0c5d5 100644 --- a/src/components/dms/NewChat.tsx +++ b/src/components/dms/NewChat.tsx @@ -10,6 +10,7 @@ import {sanitizeHandle} from '#/lib/strings/handles' import {isWeb} from '#/platform/detection' import {useModerationOpts} from '#/state/preferences/moderation-opts' import {useGetConvoForMembers} from '#/state/queries/messages/get-convo-for-members' +import {useSession} from '#/state/session' import {useActorAutocompleteQuery} from 'state/queries/actor-autocomplete' import {FAB} from '#/view/com/util/fab/FAB' import * as Toast from '#/view/com/util/Toast' @@ -23,6 +24,7 @@ import {Button} from '../Button' import {Envelope_Stroke2_Corner0_Rounded as Envelope} from '../icons/Envelope' import {ListMaybePlaceholder} from '../Lists' import {Text} from '../Typography' +import {canBeMessaged} from './util' export function NewChat({ control, @@ -82,6 +84,7 @@ function SearchablePeopleList({ const moderationOpts = useModerationOpts() const control = Dialog.useDialogContext() const listRef = useRef(null) + const {currentAccount} = useSession() const [searchText, setSearchText] = useState('') @@ -95,12 +98,17 @@ function SearchablePeopleList({ const renderItem = useCallback( ({item: profile}: {item: AppBskyActorDefs.ProfileView}) => { if (!moderationOpts) return null + const moderation = moderateProfile(profile, moderationOpts) + + const disabled = !canBeMessaged(profile) + const handle = sanitizeHandle(profile.handle, '@') + return (