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 && (
)}
>
)
}