import {useMemo, useState} from 'react' import {View} from 'react-native' import {type AppBskyActorDefs, moderateProfile} from '@atproto/api' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {differenceInSeconds} from 'date-fns' import {HITSLOP_10} from '#/lib/constants' import {useGetTimeAgo} from '#/lib/hooks/useTimeAgo' import {sanitizeDisplayName} from '#/lib/strings/display-names' import {isNative} from '#/platform/detection' import {useModerationOpts} from '#/state/preferences/moderation-opts' import {useSession} from '#/state/session' import {atoms as a, useTheme, web} from '#/alf' import {Button, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {useDialogControl} from '#/components/Dialog' import {Newskie} from '#/components/icons/Newskie' import * as StarterPackCard from '#/components/StarterPack/StarterPackCard' import {Text} from '#/components/Typography' export function NewskieDialog({ profile, disabled, }: { profile: AppBskyActorDefs.ProfileViewDetailed disabled?: boolean }) { const {_} = useLingui() const control = useDialogControl() const createdAt = profile.createdAt as string | undefined const [now] = useState(() => Date.now()) const daysOld = useMemo(() => { if (!createdAt) return Infinity return differenceInSeconds(now, new Date(createdAt)) / 86400 }, [createdAt, now]) if (!createdAt || daysOld > 7) return null return ( ) } function DialogInner({ profile, createdAt, now, }: { profile: AppBskyActorDefs.ProfileViewDetailed createdAt: string now: number }) { const control = Dialog.useDialogContext() const {_} = useLingui() const t = useTheme() const moderationOpts = useModerationOpts() const {currentAccount} = useSession() const timeAgo = useGetTimeAgo() const isMe = profile.did === currentAccount?.did const profileName = useMemo(() => { const name = profile.displayName || profile.handle if (isMe) { return _(msg`You`) } if (!moderationOpts) return name const moderation = moderateProfile(profile, moderationOpts) return sanitizeDisplayName(name, moderation.ui('displayName')) }, [_, isMe, moderationOpts, profile]) return ( {isMe ? Welcome, friend! : Say hello!} {profile.joinedViaStarterPack ? ( {profileName} joined Bluesky using a starter pack{' '} {timeAgo(createdAt, now, {format: 'long'})} ago ) : ( {profileName} joined Bluesky{' '} {timeAgo(createdAt, now, {format: 'long'})} ago )} {profile.joinedViaStarterPack ? ( control.close()}> ) : null} {isNative && ( )} ) }