Bluesky app fork with some witchin' additions 💫
0
fork

Configure Feed

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

Add some memoization (#1947)

authored by

dan and committed by
GitHub
a10adf89 e358c3cc

+18 -12
+5 -3
src/view/com/posts/Feed.tsx
··· 1 - import React, {MutableRefObject} from 'react' 1 + import React, {memo, MutableRefObject} from 'react' 2 2 import { 3 3 ActivityIndicator, 4 4 Dimensions, ··· 31 31 const ERROR_ITEM = {_reactKey: '__error__'} 32 32 const LOAD_MORE_ERROR_ITEM = {_reactKey: '__load_more_error__'} 33 33 34 - export function Feed({ 34 + let Feed = ({ 35 35 feed, 36 36 feedParams, 37 37 style, ··· 65 65 desktopFixedHeightOffset?: number 66 66 ListHeaderComponent?: () => JSX.Element 67 67 extraData?: any 68 - }) { 68 + }): React.ReactNode => { 69 69 const pal = usePalette('default') 70 70 const theme = useTheme() 71 71 const {track} = useAnalytics() ··· 273 273 </View> 274 274 ) 275 275 } 276 + Feed = memo(Feed) 277 + export {Feed} 276 278 277 279 const styles = StyleSheet.create({ 278 280 feedFooter: {paddingTop: 20},
+4 -3
src/view/com/posts/FeedItem.tsx
··· 1 - import React, {useMemo, useState} from 'react' 1 + import React, {memo, useMemo, useState} from 'react' 2 2 import {StyleSheet, View} from 'react-native' 3 3 import { 4 4 AppBskyFeedDefs, ··· 83 83 return null 84 84 } 85 85 86 - function FeedItemInner({ 86 + let FeedItemInner = ({ 87 87 post, 88 88 record, 89 89 reason, ··· 101 101 isThreadChild?: boolean 102 102 isThreadLastChild?: boolean 103 103 isThreadParent?: boolean 104 - }) { 104 + }): React.ReactNode => { 105 105 const {openComposer} = useComposerControls() 106 106 const pal = usePalette('default') 107 107 const {track} = useAnalytics() ··· 334 334 </Link> 335 335 ) 336 336 } 337 + FeedItemInner = memo(FeedItemInner) 337 338 338 339 const styles = StyleSheet.create({ 339 340 outer: {
+5 -3
src/view/com/posts/FeedSlice.tsx
··· 1 - import React from 'react' 1 + import React, {memo} from 'react' 2 2 import {StyleSheet, View} from 'react-native' 3 3 import {FeedPostSlice} from '#/state/queries/post-feed' 4 4 import {AtUri, moderatePost, ModerationOpts} from '@atproto/api' ··· 9 9 import {usePalette} from 'lib/hooks/usePalette' 10 10 import {makeProfileLink} from 'lib/routes/links' 11 11 12 - export function FeedSlice({ 12 + let FeedSlice = ({ 13 13 slice, 14 14 dataUpdatedAt, 15 15 ignoreFilterFor, ··· 19 19 dataUpdatedAt: number 20 20 ignoreFilterFor?: string 21 21 moderationOpts: ModerationOpts 22 - }) { 22 + }): React.ReactNode => { 23 23 const moderations = React.useMemo(() => { 24 24 return slice.items.map(item => moderatePost(item.post, moderationOpts)) 25 25 }, [slice, moderationOpts]) ··· 94 94 </> 95 95 ) 96 96 } 97 + FeedSlice = memo(FeedSlice) 98 + export {FeedSlice} 97 99 98 100 function ViewFullThread({slice}: {slice: FeedPostSlice}) { 99 101 const pal = usePalette('default')
+4 -3
src/view/com/profile/ProfileHeader.tsx
··· 1 - import React from 'react' 1 + import React, {memo} from 'react' 2 2 import { 3 3 StyleSheet, 4 4 TouchableOpacity, ··· 105 105 isProfilePreview?: boolean 106 106 } 107 107 108 - function ProfileHeaderLoaded({ 108 + let ProfileHeaderLoaded = ({ 109 109 profile, 110 110 moderation, 111 111 hideBackButton = false, 112 112 isProfilePreview, 113 - }: LoadedProps) { 113 + }: LoadedProps): React.ReactNode => { 114 114 const pal = usePalette('default') 115 115 const palInverted = usePalette('inverted') 116 116 const {currentAccount} = useSession() ··· 627 627 </View> 628 628 ) 629 629 } 630 + ProfileHeaderLoaded = memo(ProfileHeaderLoaded) 630 631 631 632 const styles = StyleSheet.create({ 632 633 banner: {