diff options
author | dan <dan.abramov@gmail.com> | 2023-12-12 21:50:43 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-12 13:50:43 -0800 |
commit | 5c701f8e0bced2fe26544acc04732bdc0fcd8c40 (patch) | |
tree | d0ac3658fb3c5092d8da913b75387c43d219a1b3 /src/view/com/util/UserAvatar.tsx | |
parent | a5e25a7a16cdcde64628e942c073a119bc1d7a1e (diff) | |
download | voidsky-5c701f8e0bced2fe26544acc04732bdc0fcd8c40.tar.zst |
Re-rendering improvements for like/unlike (#2180)
* Add a few memos * Memo PostDropdownBtn better * More memo * More granularity * Extract PostContent * Fix a usage I missed * oops
Diffstat (limited to 'src/view/com/util/UserAvatar.tsx')
-rw-r--r-- | src/view/com/util/UserAvatar.tsx | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/src/view/com/util/UserAvatar.tsx b/src/view/com/util/UserAvatar.tsx index 395e9eb3a..00ff7e1ec 100644 --- a/src/view/com/util/UserAvatar.tsx +++ b/src/view/com/util/UserAvatar.tsx @@ -1,4 +1,4 @@ -import React, {useMemo} from 'react' +import React, {memo, useMemo} from 'react' import {Image, StyleSheet, View} from 'react-native' import Svg, {Circle, Rect, Path} from 'react-native-svg' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' @@ -43,13 +43,13 @@ interface PreviewableUserAvatarProps extends BaseUserAvatarProps { const BLUR_AMOUNT = isWeb ? 5 : 100 -export function DefaultAvatar({ +let DefaultAvatar = ({ type, size, }: { type: UserAvatarType size: number -}) { +}): React.ReactNode => { if (type === 'algo') { // Font Awesome Pro 6.4.0 by @fontawesome -https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. return ( @@ -112,14 +112,16 @@ export function DefaultAvatar({ </Svg> ) } +DefaultAvatar = memo(DefaultAvatar) +export {DefaultAvatar} -export function UserAvatar({ +let UserAvatar = ({ type = 'user', size, avatar, moderation, usePlainRNImage = false, -}: UserAvatarProps) { +}: UserAvatarProps): React.ReactNode => { const pal = usePalette('default') const aviStyle = useMemo(() => { @@ -182,13 +184,15 @@ export function UserAvatar({ </View> ) } +UserAvatar = memo(UserAvatar) +export {UserAvatar} -export function EditableUserAvatar({ +let EditableUserAvatar = ({ type = 'user', size, avatar, onSelectNewAvatar, -}: EditableUserAvatarProps) { +}: EditableUserAvatarProps): React.ReactNode => { const pal = usePalette('default') const {_} = useLingui() const {requestCameraAccessIfNeeded} = useCameraPermission() @@ -323,14 +327,20 @@ export function EditableUserAvatar({ </NativeDropdown> ) } +EditableUserAvatar = memo(EditableUserAvatar) +export {EditableUserAvatar} -export function PreviewableUserAvatar(props: PreviewableUserAvatarProps) { +let PreviewableUserAvatar = ( + props: PreviewableUserAvatarProps, +): React.ReactNode => { return ( <UserPreviewLink did={props.did} handle={props.handle}> <UserAvatar {...props} /> </UserPreviewLink> ) } +PreviewableUserAvatar = memo(PreviewableUserAvatar) +export {PreviewableUserAvatar} const styles = StyleSheet.create({ editButtonContainer: { |