···1111import {findAllPostsInQueryData as findAllPostsInNotifsQueryData} from './notifications/feed'
1212import {findAllPostsInQueryData as findAllPostsInFeedQueryData} from './post-feed'
1313import {precacheThreadPostProfiles} from './profile'
1414-import {getEmbeddedPost} from './util'
1414+import {embedViewRecordToPostView, getEmbeddedPost} from './util'
15151616const RQKEY_ROOT = 'post-thread'
1717export const RQKEY = (uri: string) => [RQKEY_ROOT, uri]
···332332 type: 'post',
333333 _reactKey: record.uri,
334334 uri: record.uri,
335335- post: {
336336- uri: record.uri,
337337- cid: record.cid,
338338- author: record.author,
339339- record: record.value,
340340- indexedAt: record.indexedAt,
341341- labels: record.labels,
342342- },
335335+ post: embedViewRecordToPostView(record),
343336 record: record.value as AppBskyFeedPost.Record, // validated in getEmbeddedPost
344337 parent: undefined,
345338 replies: undefined,
+32-38
src/view/com/post-thread/PostThreadItem.tsx
···11import React, {memo, useMemo} from 'react'
22import {StyleSheet, View} from 'react-native'
33import {
44- AtUri,
54 AppBskyFeedDefs,
65 AppBskyFeedPost,
77- RichText as RichTextAPI,
66+ AtUri,
87 ModerationDecision,
88+ RichText as RichTextAPI,
99} from '@atproto/api'
1010-import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped'
1110import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
1212-import {PostThreadFollowBtn} from 'view/com/post-thread/PostThreadFollowBtn'
1313-import {Link, TextLink} from '../util/Link'
1414-import {RichText} from '#/components/RichText'
1515-import {Text} from '../util/text/Text'
1616-import {PreviewableUserAvatar} from '../util/UserAvatar'
1717-import {s} from 'lib/styles'
1818-import {niceDate} from 'lib/strings/time'
1111+import {msg, Trans} from '@lingui/macro'
1212+import {useLingui} from '@lingui/react'
1313+1414+import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped'
1515+import {POST_TOMBSTONE, Shadow, usePostShadow} from '#/state/cache/post-shadow'
1616+import {useLanguagePrefs} from '#/state/preferences'
1717+import {useOpenLink} from '#/state/preferences/in-app-browser'
1818+import {ThreadPost} from '#/state/queries/post-thread'
1919+import {useModerationOpts} from '#/state/queries/preferences'
2020+import {useComposerControls} from '#/state/shell/composer'
2121+import {MAX_POST_LINES} from 'lib/constants'
2222+import {usePalette} from 'lib/hooks/usePalette'
2323+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
2424+import {makeProfileLink} from 'lib/routes/links'
1925import {sanitizeDisplayName} from 'lib/strings/display-names'
2026import {sanitizeHandle} from 'lib/strings/handles'
2127import {countLines, pluralize} from 'lib/strings/helpers'
2222-import {getTranslatorLink, isPostInLanguage} from '../../../locale/helpers'
2323-import {PostMeta} from '../util/PostMeta'
2424-import {PostEmbeds} from '../util/post-embeds'
2525-import {PostCtrls} from '../util/post-ctrls/PostCtrls'
2626-import {PostHider} from '../../../components/moderation/PostHider'
2828+import {niceDate} from 'lib/strings/time'
2929+import {s} from 'lib/styles'
3030+import {useSession} from 'state/session'
3131+import {PostThreadFollowBtn} from 'view/com/post-thread/PostThreadFollowBtn'
3232+import {atoms as a} from '#/alf'
3333+import {RichText} from '#/components/RichText'
2734import {ContentHider} from '../../../components/moderation/ContentHider'
2828-import {PostAlerts} from '../../../components/moderation/PostAlerts'
2935import {LabelsOnMyPost} from '../../../components/moderation/LabelsOnMe'
3636+import {PostAlerts} from '../../../components/moderation/PostAlerts'
3737+import {PostHider} from '../../../components/moderation/PostHider'
3838+import {getTranslatorLink, isPostInLanguage} from '../../../locale/helpers'
3939+import {WhoCanReply} from '../threadgate/WhoCanReply'
3040import {ErrorMessage} from '../util/error/ErrorMessage'
3131-import {usePalette} from 'lib/hooks/usePalette'
4141+import {Link, TextLink} from '../util/Link'
3242import {formatCount} from '../util/numeric/format'
3333-import {makeProfileLink} from 'lib/routes/links'
3434-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
3535-import {MAX_POST_LINES} from 'lib/constants'
3636-import {Trans, msg} from '@lingui/macro'
3737-import {useLingui} from '@lingui/react'
3838-import {useLanguagePrefs} from '#/state/preferences'
3939-import {useComposerControls} from '#/state/shell/composer'
4040-import {useModerationOpts} from '#/state/queries/preferences'
4141-import {useOpenLink} from '#/state/preferences/in-app-browser'
4242-import {Shadow, usePostShadow, POST_TOMBSTONE} from '#/state/cache/post-shadow'
4343-import {ThreadPost} from '#/state/queries/post-thread'
4444-import {useSession} from 'state/session'
4545-import {WhoCanReply} from '../threadgate/WhoCanReply'
4646-import {LoadingPlaceholder} from '../util/LoadingPlaceholder'
4747-import {atoms as a} from '#/alf'
4343+import {PostCtrls} from '../util/post-ctrls/PostCtrls'
4444+import {PostEmbeds} from '../util/post-embeds'
4545+import {PostMeta} from '../util/PostMeta'
4646+import {Text} from '../util/text/Text'
4747+import {PreviewableUserAvatar} from '../util/UserAvatar'
48484949export function PostThreadItem({
5050 post,
···325325 {post.repostCount !== 0 || post.likeCount !== 0 ? (
326326 // Show this section unless we're *sure* it has no engagement.
327327 <View style={[styles.expandedInfo, pal.border]}>
328328- {post.repostCount == null && post.likeCount == null && (
329329- // If we're still loading and not sure, assume this post has engagement.
330330- // This lets us avoid a layout shift for the common case (embedded post with likes/reposts).
331331- // TODO: embeds should include metrics to avoid us having to guess.
332332- <LoadingPlaceholder width={50} height={20} />
333333- )}
334328 {post.repostCount != null && post.repostCount !== 0 ? (
335329 <Link
336330 style={styles.expandedInfoItem}