import { AppBskyFeedDefs, AppBskyFeedPost, AppBskyRichtextFacet, RichText, } from '@atproto/api' import {h} from 'preact' import replyIcon from '../../assets/bubble_filled_stroke2_corner2_rounded.svg' import likeIcon from '../../assets/heart2_filled_stroke2_corner0_rounded.svg' import logo from '../../assets/logo.svg' import repostIcon from '../../assets/repost_stroke2_corner2_rounded.svg' import {CONTENT_LABELS} from '../labels' import * as bsky from '../types/bsky' import {niceDate} from '../util/nice-date' import {prettyNumber} from '../util/pretty-number' import {getRkey} from '../util/rkey' import {getVerificationState} from '../util/verification-state' import {Container} from './container' import {Embed} from './embed' import {Link} from './link' import {VerificationCheck} from './verification-check' interface Props { thread: AppBskyFeedDefs.ThreadViewPost } export function Post({thread}: Props) { const post = thread.post const isAuthorLabeled = post.author.labels?.some(label => CONTENT_LABELS.includes(label.val), ) let record: AppBskyFeedPost.Record | null = null if ( bsky.dangerousIsType( post.record, AppBskyFeedPost.isRecord, ) ) { record = post.record } const verification = getVerificationState({profile: post.author}) const href = `/profile/${post.author.did}/post/${getRkey(post)}` return (
{post.author.displayName?.trim() || post.author.handle} {verification.isVerified && ( )}
@{post.author.handle}
{!!post.likeCount && (

{prettyNumber(post.likeCount)}

)} {!!post.repostCount && (

{prettyNumber(post.repostCount)}

)}

Reply

{post.replyCount ? `Read ${prettyNumber(post.replyCount)} ${ post.replyCount > 1 ? 'replies' : 'reply' } on Bluesky` : `View on Bluesky`}

View on Bluesky

) } function PostContent({record}: {record: AppBskyFeedPost.Record | null}) { if (!record) return null const rt = new RichText({ text: record.text, facets: record.facets, }) const richText = [] let counter = 0 for (const segment of rt.segments()) { if ( segment.link && AppBskyRichtextFacet.validateLink(segment.link).success ) { richText.push( {segment.text} , ) } else if ( segment.mention && AppBskyRichtextFacet.validateMention(segment.mention).success ) { richText.push( {segment.text} , ) } else if ( segment.tag && AppBskyRichtextFacet.validateTag(segment.tag).success ) { richText.push( {segment.text} , ) } else { richText.push(segment.text) } counter++ } return (

{richText}

) }