import {View} from 'react-native' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {dateDiff, useGetTimeAgo} from '#/lib/hooks/useTimeAgo' import {useAgeAssurance} from '#/state/ageAssurance/useAgeAssurance' import {logger} from '#/state/ageAssurance/util' import {atoms as a, useBreakpoints, useTheme, type ViewStyleProp} from '#/alf' import {Admonition} from '#/components/Admonition' import {AgeAssuranceAppealDialog} from '#/components/ageAssurance/AgeAssuranceAppealDialog' import {AgeAssuranceBadge} from '#/components/ageAssurance/AgeAssuranceBadge' import { AgeAssuranceInitDialog, useDialogControl, } from '#/components/ageAssurance/AgeAssuranceInitDialog' import {useAgeAssuranceCopy} from '#/components/ageAssurance/useAgeAssuranceCopy' import {Button, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {Divider} from '#/components/Divider' import {createStaticClick, InlineLinkText} from '#/components/Link' import {Text} from '#/components/Typography' export function AgeAssuranceAccountCard({style}: ViewStyleProp & {}) { const {isReady, isAgeRestricted, isDeclaredUnderage} = useAgeAssurance() if (!isReady) return null if (isDeclaredUnderage) return null if (!isAgeRestricted) return null return } function Inner({style}: ViewStyleProp & {}) { const t = useTheme() const {_, i18n} = useLingui() const control = useDialogControl() const appealControl = Dialog.useDialogControl() const getTimeAgo = useGetTimeAgo() const {gtPhone} = useBreakpoints() const copy = useAgeAssuranceCopy() const {status, lastInitiatedAt} = useAgeAssurance() const isBlocked = status === 'blocked' const hasInitiated = !!lastInitiatedAt const timeAgo = lastInitiatedAt ? getTimeAgo(lastInitiatedAt, new Date()) : null const diff = lastInitiatedAt ? dateDiff(lastInitiatedAt, new Date(), 'down') : null return ( <> {copy.notice} {isBlocked ? ( You are currently unable to access Bluesky's Age Assurance flow. Please{' '} { appealControl.open() logger.metric('ageAssurance:appealDialogOpen', {}) })}> contact our moderation team {' '} if you believe this is an error. ) : ( <> {lastInitiatedAt && timeAgo && diff ? ( {diff.value === 0 ? ( Last initiated just now ) : ( Last initiated {timeAgo} ago )} ) : ( Age assurance only takes a few minutes )} )} ) }