import {useCallback, useState} from 'react' import {View} from 'react-native' import {LinearGradient} from 'expo-linear-gradient' import {msg} from '@lingui/core/macro' import {useLingui} from '@lingui/react' import {Trans} from '@lingui/react/macro' import {atoms as a, useTheme, web} from '#/alf' import {Button, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {useNuxDialogContext} from '#/components/dialogs/nuxs' import {Sparkle_Stroke2_Corner0_Rounded as SparkleIcon} from '#/components/icons/Sparkle' import {Text} from '#/components/Typography' import {IS_E2E, IS_NATIVE, IS_WEB} from '#/env' import {InviteFriendsDialog} from '#/features/inviteFriends' import {createIsEnabledCheck} from './utils' export const enabled = createIsEnabledCheck(() => { // Native-only feature (matches the rest of the invite-friends scope). // Skipped in E2E to keep tests deterministic. return !IS_E2E && IS_NATIVE }) export function InviteFriendsAnnouncement() { const t = useTheme() const {_} = useLingui() const nuxDialogs = useNuxDialogContext() const control = Dialog.useDialogControl() const inviteFriendsControl = Dialog.useDialogControl() const [openInviteAfterClose, setOpenInviteAfterClose] = useState(false) Dialog.useAutoOpen(control) const onClose = useCallback(() => { nuxDialogs.dismissActiveNux() if (openInviteAfterClose) { // Defer to the next tick so the close animation completes before // we open the next dialog (avoids visual glitch on iOS). setOpenInviteAfterClose(false) inviteFriendsControl.open() } }, [nuxDialogs, openInviteAfterClose, inviteFriendsControl]) const onPressTryIt = useCallback(() => { setOpenInviteAfterClose(true) control.close() }, [control]) return ( <> New Feature {/* TODO: drop promo image */} Invite your friends You can now invite friends with a link or QR code. Share it anywhere or let them scan to join you on Bluesky. {!IS_WEB && ( )} ) }