import React, {memo} from 'react' import {StyleProp, StyleSheet, TextStyle, View, ViewStyle} from 'react-native' import {Text} from './text/Text' import {TextLinkOnWebOnly} from './Link' import {niceDate} from 'lib/strings/time' import {usePalette} from 'lib/hooks/usePalette' import {TypographyVariant} from 'lib/ThemeContext' import {UserAvatar} from './UserAvatar' import {sanitizeDisplayName} from 'lib/strings/display-names' import {sanitizeHandle} from 'lib/strings/handles' import {isAndroid} from 'platform/detection' import {TimeElapsed} from './TimeElapsed' import {makeProfileLink} from 'lib/routes/links' import {ModerationUI} from '@atproto/api' interface PostMetaOpts { author: { avatar?: string did: string handle: string displayName?: string | undefined } authorHasWarning: boolean postHref: string timestamp: string showAvatar?: boolean avatarModeration?: ModerationUI avatarSize?: number displayNameType?: TypographyVariant displayNameStyle?: StyleProp style?: StyleProp } let PostMeta = (opts: PostMetaOpts): React.ReactNode => { const pal = usePalette('default') const displayName = opts.author.displayName || opts.author.handle const handle = opts.author.handle return ( {opts.showAvatar && ( )} {sanitizeDisplayName(displayName)}  {sanitizeHandle(handle, '@')} } href={makeProfileLink(opts.author)} /> {!isAndroid && ( · )} {({timeElapsed}) => ( )} ) } PostMeta = memo(PostMeta) export {PostMeta} const styles = StyleSheet.create({ container: { flexDirection: 'row', alignItems: 'center', paddingBottom: 2, gap: 4, zIndex: 1, flex: 1, }, avatar: { alignSelf: 'center', }, maxWidth: { flex: isAndroid ? 1 : undefined, maxWidth: !isAndroid ? '80%' : undefined, }, })