Changeset View
Changeset View
Standalone View
Standalone View
native/avatars/edit-user-avatar.react.js
Show All 18 Lines | import { | ||||
EmojiAvatarSelectionRouteName, | EmojiAvatarSelectionRouteName, | ||||
RegistrationUserAvatarCameraModalRouteName, | RegistrationUserAvatarCameraModalRouteName, | ||||
} from '../navigation/route-names.js'; | } from '../navigation/route-names.js'; | ||||
import { useSelector } from '../redux/redux-utils.js'; | import { useSelector } from '../redux/redux-utils.js'; | ||||
import { useStyles } from '../themes/colors.js'; | import { useStyles } from '../themes/colors.js'; | ||||
type Props = | type Props = | ||||
| { +userID: ?string, +disabled?: boolean } | | { +userID: ?string, +disabled?: boolean } | ||||
| { +userInfo: ?GenericUserInfoWithAvatar, +disabled?: boolean }; | | { | ||||
+userInfo: ?GenericUserInfoWithAvatar, | |||||
+disabled?: boolean, | |||||
+prefetchedAvatarURI: ?string, | |||||
}; | |||||
function EditUserAvatar(props: Props): React.Node { | function EditUserAvatar(props: Props): React.Node { | ||||
const editUserAvatarContext = React.useContext(EditUserAvatarContext); | const editUserAvatarContext = React.useContext(EditUserAvatarContext); | ||||
invariant(editUserAvatarContext, 'editUserAvatarContext should be set'); | invariant(editUserAvatarContext, 'editUserAvatarContext should be set'); | ||||
const { | const { | ||||
userAvatarSaveInProgress, | userAvatarSaveInProgress, | ||||
selectFromGalleryAndUpdateUserAvatar, | selectFromGalleryAndUpdateUserAvatar, | ||||
setUserAvatar, | setUserAvatar, | ||||
registrationModeEnabled, | registrationModeEnabled, | ||||
} = editUserAvatarContext; | } = editUserAvatarContext; | ||||
const currentUserInfo = useSelector(state => state.currentUserInfo); | const currentUserInfo = useSelector(state => state.currentUserInfo); | ||||
const userInfoProp = props.userInfo; | const userInfoProp = props.userInfo; | ||||
const userInfo: ?GenericUserInfoWithAvatar = userInfoProp ?? currentUserInfo; | const userInfo: ?GenericUserInfoWithAvatar = userInfoProp ?? currentUserInfo; | ||||
const ethAddress = React.useMemo( | const ethAddress = React.useMemo( | ||||
() => getETHAddressForUserInfo(userInfo), | () => getETHAddressForUserInfo(userInfo), | ||||
[userInfo], | [userInfo], | ||||
); | ); | ||||
const ensAvatarURI = useENSAvatar(ethAddress); | const fetchedENSAvatarURI = useENSAvatar(ethAddress); | ||||
const ensAvatarURI = fetchedENSAvatarURI ?? props.prefetchedAvatarURI; | |||||
const { navigate } = useNavigation(); | const { navigate } = useNavigation(); | ||||
const usernameOrEthAddress = userInfo?.username; | const usernameOrEthAddress = userInfo?.username; | ||||
const navigateToEmojiSelection = React.useCallback(() => { | const navigateToEmojiSelection = React.useCallback(() => { | ||||
if (!registrationModeEnabled) { | if (!registrationModeEnabled) { | ||||
navigate(EmojiUserAvatarCreationRouteName); | navigate(EmojiUserAvatarCreationRouteName); | ||||
return; | return; | ||||
▲ Show 20 Lines • Show All 93 Lines • Show Last 20 Lines |