import React from 'react' import { StyleSheet, TouchableOpacity, View, ActivityIndicator, } from 'react-native' import {observer} from 'mobx-react-lite' import {ComAtprotoServerDefs} from '@atproto/api' import { FontAwesomeIcon, FontAwesomeIconStyle, } from '@fortawesome/react-native-fontawesome' import Clipboard from '@react-native-clipboard/clipboard' import {Text} from '../util/text/Text' import {Button} from '../util/forms/Button' import * as Toast from '../util/Toast' import {ScrollView} from './util' import {usePalette} from 'lib/hooks/usePalette' import {isWeb} from 'platform/detection' import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' import {Trans} from '@lingui/macro' import {cleanError} from 'lib/strings/errors' import {useModalControls} from '#/state/modals' import {useInvitesState, useInvitesAPI} from '#/state/invites' import {UserInfoText} from '../util/UserInfoText' import {makeProfileLink} from '#/lib/routes/links' import {Link} from '../util/Link' import {ErrorMessage} from '../util/error/ErrorMessage' import { useInviteCodesQuery, InviteCodesQueryResponse, } from '#/state/queries/invites' export const snapPoints = ['70%'] export function Component() { const {isLoading, data: invites, error} = useInviteCodesQuery() return error ? ( ) : isLoading || !invites ? ( ) : ( ) } export function Inner({invites}: {invites: InviteCodesQueryResponse}) { const pal = usePalette('default') const {closeModal} = useModalControls() const {isTabletOrDesktop} = useWebMediaQueries() const onClose = React.useCallback(() => { closeModal() }, [closeModal]) if (invites.all.length === 0) { return ( You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer.