import {AppBskyFeedDefs, AppBskyFeedPost, 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 {getRkey, niceDate} from '../utils' import {Container} from './container' import {Embed} from './embed' import {Link} from './link' 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 (AppBskyFeedPost.isRecord(post.record)) { record = post.record } const href = `/profile/${post.author.did}/post/${getRkey(post)}` return (

{post.author.displayName}

@{post.author.handle}

{!!post.likeCount && (

{post.likeCount}

)} {!!post.repostCount && (

{post.repostCount}

)}

Reply

{post.replyCount ? `Read ${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.isLink() && segment.link) { richText.push( {segment.text} , ) } else if (segment.isMention() && segment.mention) { richText.push( {segment.text} , ) } else if (segment.isTag() && segment.tag) { richText.push( {segment.text} , ) } else { richText.push(segment.text) } counter++ } return (

{richText}

) }