Bluesky app fork with some witchin' additions 💫
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

QT Jump Pt. 2 - Remove code duplication (#3506)

* remove code duplication

* now it's safe to remove shimmer

authored by

Hailey and committed by
GitHub
eb2fd533 7047755c

+34 -47
+2 -9
src/state/queries/post-thread.ts
··· 11 11 import {findAllPostsInQueryData as findAllPostsInNotifsQueryData} from './notifications/feed' 12 12 import {findAllPostsInQueryData as findAllPostsInFeedQueryData} from './post-feed' 13 13 import {precacheThreadPostProfiles} from './profile' 14 - import {getEmbeddedPost} from './util' 14 + import {embedViewRecordToPostView, getEmbeddedPost} from './util' 15 15 16 16 const RQKEY_ROOT = 'post-thread' 17 17 export const RQKEY = (uri: string) => [RQKEY_ROOT, uri] ··· 332 332 type: 'post', 333 333 _reactKey: record.uri, 334 334 uri: record.uri, 335 - post: { 336 - uri: record.uri, 337 - cid: record.cid, 338 - author: record.author, 339 - record: record.value, 340 - indexedAt: record.indexedAt, 341 - labels: record.labels, 342 - }, 335 + post: embedViewRecordToPostView(record), 343 336 record: record.value as AppBskyFeedPost.Record, // validated in getEmbeddedPost 344 337 parent: undefined, 345 338 replies: undefined,
+32 -38
src/view/com/post-thread/PostThreadItem.tsx
··· 1 1 import React, {memo, useMemo} from 'react' 2 2 import {StyleSheet, View} from 'react-native' 3 3 import { 4 - AtUri, 5 4 AppBskyFeedDefs, 6 5 AppBskyFeedPost, 7 - RichText as RichTextAPI, 6 + AtUri, 8 7 ModerationDecision, 8 + RichText as RichTextAPI, 9 9 } from '@atproto/api' 10 - import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped' 11 10 import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' 12 - import {PostThreadFollowBtn} from 'view/com/post-thread/PostThreadFollowBtn' 13 - import {Link, TextLink} from '../util/Link' 14 - import {RichText} from '#/components/RichText' 15 - import {Text} from '../util/text/Text' 16 - import {PreviewableUserAvatar} from '../util/UserAvatar' 17 - import {s} from 'lib/styles' 18 - import {niceDate} from 'lib/strings/time' 11 + import {msg, Trans} from '@lingui/macro' 12 + import {useLingui} from '@lingui/react' 13 + 14 + import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped' 15 + import {POST_TOMBSTONE, Shadow, usePostShadow} from '#/state/cache/post-shadow' 16 + import {useLanguagePrefs} from '#/state/preferences' 17 + import {useOpenLink} from '#/state/preferences/in-app-browser' 18 + import {ThreadPost} from '#/state/queries/post-thread' 19 + import {useModerationOpts} from '#/state/queries/preferences' 20 + import {useComposerControls} from '#/state/shell/composer' 21 + import {MAX_POST_LINES} from 'lib/constants' 22 + import {usePalette} from 'lib/hooks/usePalette' 23 + import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' 24 + import {makeProfileLink} from 'lib/routes/links' 19 25 import {sanitizeDisplayName} from 'lib/strings/display-names' 20 26 import {sanitizeHandle} from 'lib/strings/handles' 21 27 import {countLines, pluralize} from 'lib/strings/helpers' 22 - import {getTranslatorLink, isPostInLanguage} from '../../../locale/helpers' 23 - import {PostMeta} from '../util/PostMeta' 24 - import {PostEmbeds} from '../util/post-embeds' 25 - import {PostCtrls} from '../util/post-ctrls/PostCtrls' 26 - import {PostHider} from '../../../components/moderation/PostHider' 28 + import {niceDate} from 'lib/strings/time' 29 + import {s} from 'lib/styles' 30 + import {useSession} from 'state/session' 31 + import {PostThreadFollowBtn} from 'view/com/post-thread/PostThreadFollowBtn' 32 + import {atoms as a} from '#/alf' 33 + import {RichText} from '#/components/RichText' 27 34 import {ContentHider} from '../../../components/moderation/ContentHider' 28 - import {PostAlerts} from '../../../components/moderation/PostAlerts' 29 35 import {LabelsOnMyPost} from '../../../components/moderation/LabelsOnMe' 36 + import {PostAlerts} from '../../../components/moderation/PostAlerts' 37 + import {PostHider} from '../../../components/moderation/PostHider' 38 + import {getTranslatorLink, isPostInLanguage} from '../../../locale/helpers' 39 + import {WhoCanReply} from '../threadgate/WhoCanReply' 30 40 import {ErrorMessage} from '../util/error/ErrorMessage' 31 - import {usePalette} from 'lib/hooks/usePalette' 41 + import {Link, TextLink} from '../util/Link' 32 42 import {formatCount} from '../util/numeric/format' 33 - import {makeProfileLink} from 'lib/routes/links' 34 - import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' 35 - import {MAX_POST_LINES} from 'lib/constants' 36 - import {Trans, msg} from '@lingui/macro' 37 - import {useLingui} from '@lingui/react' 38 - import {useLanguagePrefs} from '#/state/preferences' 39 - import {useComposerControls} from '#/state/shell/composer' 40 - import {useModerationOpts} from '#/state/queries/preferences' 41 - import {useOpenLink} from '#/state/preferences/in-app-browser' 42 - import {Shadow, usePostShadow, POST_TOMBSTONE} from '#/state/cache/post-shadow' 43 - import {ThreadPost} from '#/state/queries/post-thread' 44 - import {useSession} from 'state/session' 45 - import {WhoCanReply} from '../threadgate/WhoCanReply' 46 - import {LoadingPlaceholder} from '../util/LoadingPlaceholder' 47 - import {atoms as a} from '#/alf' 43 + import {PostCtrls} from '../util/post-ctrls/PostCtrls' 44 + import {PostEmbeds} from '../util/post-embeds' 45 + import {PostMeta} from '../util/PostMeta' 46 + import {Text} from '../util/text/Text' 47 + import {PreviewableUserAvatar} from '../util/UserAvatar' 48 48 49 49 export function PostThreadItem({ 50 50 post, ··· 325 325 {post.repostCount !== 0 || post.likeCount !== 0 ? ( 326 326 // Show this section unless we're *sure* it has no engagement. 327 327 <View style={[styles.expandedInfo, pal.border]}> 328 - {post.repostCount == null && post.likeCount == null && ( 329 - // If we're still loading and not sure, assume this post has engagement. 330 - // This lets us avoid a layout shift for the common case (embedded post with likes/reposts). 331 - // TODO: embeds should include metrics to avoid us having to guess. 332 - <LoadingPlaceholder width={50} height={20} /> 333 - )} 334 328 {post.repostCount != null && post.repostCount !== 0 ? ( 335 329 <Link 336 330 style={styles.expandedInfoItem}