import React, {memo, useCallback} from 'react' import {StyleProp, View, ViewStyle} from 'react-native' import {AppBskyActorDefs, ModerationDecision, ModerationUI} from '@atproto/api' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useQueryClient} from '@tanstack/react-query' import {makeProfileLink} from '#/lib/routes/links' import {forceLTR} from '#/lib/strings/bidi' import {NON_BREAKING_SPACE} from '#/lib/strings/constants' import {sanitizeDisplayName} from '#/lib/strings/display-names' import {sanitizeHandle} from '#/lib/strings/handles' import {niceDate} from '#/lib/strings/time' import {isAndroid} from '#/platform/detection' import {precacheProfile} from '#/state/queries/profile' import {atoms as a, useTheme, web} from '#/alf' import {WebOnlyInlineLinkText} from '#/components/Link' import {ProfileHoverCard} from '#/components/ProfileHoverCard' import {Text} from '#/components/Typography' import {TimeElapsed} from './TimeElapsed' import {PreviewableUserAvatar} from './UserAvatar' interface PostMetaOpts { author: AppBskyActorDefs.ProfileViewBasic moderation: ModerationDecision | undefined postHref: string timestamp: string showAvatar?: boolean avatarModeration?: ModerationUI avatarSize?: number onOpenAuthor?: () => void style?: StyleProp } let PostMeta = (opts: PostMetaOpts): React.ReactNode => { const t = useTheme() const {i18n, _} = useLingui() const displayName = opts.author.displayName || opts.author.handle const handle = opts.author.handle const profileLink = makeProfileLink(opts.author) const queryClient = useQueryClient() const onOpenAuthor = opts.onOpenAuthor const onBeforePressAuthor = useCallback(() => { precacheProfile(queryClient, opts.author) onOpenAuthor?.() }, [queryClient, opts.author, onOpenAuthor]) const onBeforePressPost = useCallback(() => { precacheProfile(queryClient, opts.author) }, [queryClient, opts.author]) const timestampLabel = niceDate(i18n, opts.timestamp) return ( {opts.showAvatar && ( )} {forceLTR( sanitizeDisplayName( displayName, opts.moderation?.ui('displayName'), ), )} {NON_BREAKING_SPACE + sanitizeHandle(handle, '@')} {!isAndroid && ( · )} {({timeElapsed}) => ( {timeElapsed} )} ) } PostMeta = memo(PostMeta) export {PostMeta}