diff --git a/src/components/dms/InitiateChatFlow.tsx b/src/components/dms/InitiateChatFlow.tsx index f58d168cbe..09760aefdf 100644 --- a/src/components/dms/InitiateChatFlow.tsx +++ b/src/components/dms/InitiateChatFlow.tsx @@ -14,6 +14,7 @@ import {sanitizeDisplayName} from '#/lib/strings/display-names' import {sanitizeHandle} from '#/lib/strings/handles' import {useModerationOpts} from '#/state/preferences/moderation-opts' import {useActorAutocompleteQuery} from '#/state/queries/actor-autocomplete' +import {useChatActorStatusQuery} from '#/state/queries/messages/get-status' import {useProfileFollowsQuery} from '#/state/queries/profile-follows' import {useSession} from '#/state/session' import {type ListMethods} from '#/view/com/util/List' @@ -31,6 +32,7 @@ import {ChevronRight_Stroke2_Corner0_Rounded as ChevronRightIcon} from '#/compon import {PersonGroup_Stroke2_Corner2_Rounded as PersonGroupIcon} from '#/components/icons/Person' import {TimesLarge_Stroke2_Corner0_Rounded as XIcon} from '#/components/icons/Times' import * as ProfileCard from '#/components/ProfileCard' +import * as Prompt from '#/components/Prompt' import {Text} from '#/components/Typography' import {IS_NATIVE, IS_WEB} from '#/env' import type * as bsky from '#/types/bsky' @@ -206,6 +208,10 @@ export function InitiateChatFlow({ const listRef = useRef(null) const {currentAccount} = useSession() const inputRef = useRef(null) + const accountTooNewPromptControl = Dialog.useDialogControl() + + const {data: chatStatus} = useChatActorStatusQuery() + const canCreateGroups = chatStatus?.canCreateGroups ?? true const [searchText, setSearchText] = useState('') @@ -358,9 +364,13 @@ export function InitiateChatFlow({ }, [chatState, control, newGroupChatTitle, title]) const handlePressNewGroupChat = useCallback(() => { + if (!canCreateGroups) { + accountTooNewPromptControl.open() + return + } LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut) dispatch({type: 'startNewGroupChat', screenTitle: newGroupChatTitle}) - }, [newGroupChatTitle]) + }, [accountTooNewPromptControl, canCreateGroups, newGroupChatTitle]) const handlePressNext = useCallback(() => { LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut) @@ -384,6 +394,7 @@ export function InitiateChatFlow({ ) } @@ -429,7 +440,13 @@ export function InitiateChatFlow({ return null } }, - [chatState, handlePressNewGroupChat, moderationOpts, onSelectChat], + [ + canCreateGroups, + chatState, + handlePressNewGroupChat, + moderationOpts, + onSelectChat, + ], ) useLayoutEffect(() => { @@ -652,6 +669,14 @@ export function InitiateChatFlow({ : l`Start chat` } style={web([a.contents])}> + {}} + showCancel={false} + /> void}) { +function NewGroupChatButton({ + onPress, + dimmed = false, +}: { + onPress: () => void + dimmed?: boolean +}) { const t = useTheme() const {t: l} = useLingui() @@ -726,6 +757,7 @@ function NewGroupChatButton({onPress}: {onPress: () => void}) { a.align_center, a.gap_sm, pressed || focused || hovered ? t.atoms.bg_contrast_25 : t.atoms.bg, + dimmed && {opacity: 0.5}, ]}>