import React from 'react' import {View, StyleSheet, ActivityIndicator} from 'react-native' import {ProfileModeration, AppBskyActorDefs} from '@atproto/api' import {Button} from '#/view/com/util/forms/Button' import {usePalette} from 'lib/hooks/usePalette' import {sanitizeDisplayName} from 'lib/strings/display-names' import {sanitizeHandle} from 'lib/strings/handles' import {s} from 'lib/styles' import {UserAvatar} from 'view/com/util/UserAvatar' import {Text} from 'view/com/util/text/Text' import Animated, {FadeInRight} from 'react-native-reanimated' import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' import {useAnalytics} from 'lib/analytics/analytics' import {useLingui} from '@lingui/react' import {Trans, msg} from '@lingui/macro' import {Shadow, useProfileShadow} from '#/state/cache/profile-shadow' import {useProfileFollowMutationQueue} from '#/state/queries/profile' import {logger} from '#/logger' type Props = { profile: AppBskyActorDefs.ProfileViewBasic moderation: ProfileModeration onFollowStateChange: (props: { did: string following: boolean }) => Promise } export function RecommendedFollowsItem({ profile, moderation, onFollowStateChange, }: React.PropsWithChildren) { const pal = usePalette('default') const {isMobile} = useWebMediaQueries() const shadowedProfile = useProfileShadow(profile) return ( ) } export function ProfileCard({ profile, onFollowStateChange, moderation, }: { profile: Shadow moderation: ProfileModeration onFollowStateChange: (props: { did: string following: boolean }) => Promise }) { const {track} = useAnalytics() const pal = usePalette('default') const {_} = useLingui() const [addingMoreSuggestions, setAddingMoreSuggestions] = React.useState(false) const [queueFollow, queueUnfollow] = useProfileFollowMutationQueue(profile) const onToggleFollow = React.useCallback(async () => { try { if (profile.viewer?.following) { await queueUnfollow() } else { setAddingMoreSuggestions(true) await queueFollow() await onFollowStateChange({did: profile.did, following: true}) setAddingMoreSuggestions(false) track('Onboarding:SuggestedFollowFollowed') } } catch (e: any) { if (e?.name !== 'AbortError') { logger.error('RecommendedFollows: failed to toggle following', { message: e, }) } } finally { setAddingMoreSuggestions(false) } }, [ profile, queueFollow, queueUnfollow, setAddingMoreSuggestions, track, onFollowStateChange, ]) return ( {sanitizeDisplayName( profile.displayName || sanitizeHandle(profile.handle), moderation.profile, )} {sanitizeHandle(profile.handle, '@')}