import React from 'react' import { ActivityIndicator, StyleSheet, TouchableOpacity, View, } from 'react-native' import {setStringAsync} from 'expo-clipboard' import {ComAtprotoServerDefs} from '@atproto/api' import { FontAwesomeIcon, FontAwesomeIconStyle, } from '@fortawesome/react-native-fontawesome' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {usePalette} from '#/lib/hooks/usePalette' import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries' import {makeProfileLink} from '#/lib/routes/links' import {cleanError} from '#/lib/strings/errors' import {isWeb} from '#/platform/detection' import {useInvitesAPI, useInvitesState} from '#/state/invites' import {useModalControls} from '#/state/modals' import { InviteCodesQueryResponse, useInviteCodesQuery, } from '#/state/queries/invites' import {ErrorMessage} from '../util/error/ErrorMessage' import {Button} from '../util/forms/Button' import {Link} from '../util/Link' import {Text} from '../util/text/Text' import * as Toast from '../util/Toast' import {UserInfoText} from '../util/UserInfoText' import {ScrollView} from './util' 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 {_} = useLingui() 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.