Changeset View
Changeset View
Standalone View
Standalone View
native/avatars/edit-user-avatar-provider.react.js
Show All 27 Lines | |||||
const EditUserAvatarContext: React.Context<?EditUserAvatarContextType> = | const EditUserAvatarContext: React.Context<?EditUserAvatarContextType> = | ||||
React.createContext<?EditUserAvatarContextType>(); | React.createContext<?EditUserAvatarContextType>(); | ||||
const updateUserAvatarLoadingStatusSelector = createLoadingStatusSelector( | const updateUserAvatarLoadingStatusSelector = createLoadingStatusSelector( | ||||
updateUserAvatarActionTypes, | updateUserAvatarActionTypes, | ||||
); | ); | ||||
const displayFailureAlert = () => | |||||
Alert.alert( | |||||
'Couldn’t save avatar', | |||||
'Please try again later', | |||||
[{ text: 'OK' }], | |||||
{ cancelable: true }, | |||||
); | |||||
type Props = { | type Props = { | ||||
+children: React.Node, | +children: React.Node, | ||||
}; | }; | ||||
function EditUserAvatarProvider(props: Props): React.Node { | function EditUserAvatarProvider(props: Props): React.Node { | ||||
const { children } = props; | const { children } = props; | ||||
const dispatchActionPromise = useDispatchActionPromise(); | const dispatchActionPromise = useDispatchActionPromise(); | ||||
const updateUserAvatarCall = useServerCall(updateUserAvatar); | const updateUserAvatarCall = useServerCall(updateUserAvatar); | ||||
Show All 23 Lines | async (selection: NativeMediaSelection) => { | ||||
dispatchActionPromise( | dispatchActionPromise( | ||||
updateUserAvatarActionTypes, | updateUserAvatarActionTypes, | ||||
(async () => { | (async () => { | ||||
setUserAvatarMediaUploadInProgress(false); | setUserAvatarMediaUploadInProgress(false); | ||||
try { | try { | ||||
return await updateUserAvatarCall(imageAvatarUpdateRequest); | return await updateUserAvatarCall(imageAvatarUpdateRequest); | ||||
} catch (e) { | } catch (e) { | ||||
Alert.alert('Avatar update failed', 'Unable to update avatar.'); | displayFailureAlert(); | ||||
throw e; | throw e; | ||||
} | } | ||||
})(), | })(), | ||||
); | ); | ||||
}, | }, | ||||
[dispatchActionPromise, updateUserAvatarCall, uploadSelectedMedia], | [dispatchActionPromise, updateUserAvatarCall, uploadSelectedMedia], | ||||
); | ); | ||||
const selectFromGalleryAndUpdateUserAvatar = React.useCallback(async () => { | const selectFromGalleryAndUpdateUserAvatar = React.useCallback(async () => { | ||||
const selection = await selectFromGallery(); | const selection = await selectFromGallery(); | ||||
if (!selection) { | if (!selection) { | ||||
return; | return; | ||||
} | } | ||||
await updateImageUserAvatar(selection); | await updateImageUserAvatar(selection); | ||||
}, [updateImageUserAvatar]); | }, [updateImageUserAvatar]); | ||||
const setUserAvatar = React.useCallback( | const setUserAvatar = React.useCallback( | ||||
async (avatarRequest: UpdateUserAvatarRequest) => { | async (avatarRequest: UpdateUserAvatarRequest) => { | ||||
const promise = (async () => { | const promise = (async () => { | ||||
try { | try { | ||||
return await updateUserAvatarCall(avatarRequest); | return await updateUserAvatarCall(avatarRequest); | ||||
} catch (e) { | } catch (e) { | ||||
Alert.alert('Avatar update failed', 'Unable to update avatar.'); | displayFailureAlert(); | ||||
throw e; | throw e; | ||||
} | } | ||||
})(); | })(); | ||||
dispatchActionPromise(updateUserAvatarActionTypes, promise); | dispatchActionPromise(updateUserAvatarActionTypes, promise); | ||||
await promise; | await promise; | ||||
}, | }, | ||||
[dispatchActionPromise, updateUserAvatarCall], | [dispatchActionPromise, updateUserAvatarCall], | ||||
); | ); | ||||
Show All 24 Lines |