[native] Introduce useNativeUpdateUserImageAvatar() to avatar-hooks.react
Summary:
The updateImageUserAvatar function within *EditUserAvatarProvider previously contained a call to the displayFailureAlert(...) function, which was passed in via props. However, the displayFailureAlert function is only relevant on native as we surface errors differently on web.
As part of making EditUserAvatarProvider platform-agnostic, we introduce the useNativeUpdateUserImageAvatar() hook. The function it "creates" encapsulates its call to updateImageUserAvatar in a try/catch block that handles errors in a native-specific way. As a result, updateImageUserAvatar can throw a plain old exception that will be caught by platform-specific "wrapper" functions.
In subsequent diffs we'll do the same thing for setUserAvatar so we can completely remove the displayFailureAlert prop from *EditUserAvatarProvider. After that we'll work on removing the useUploadSelectedMedia prop so the provider is fully "platform-agnostic." At that point we'll be able to consolidate BaseEditUserAvatarProvider, NativeEditUserAvatarProvider, and WebEditUserAvatarProvider into a single EditUserAvatarProvider component.
Test Plan:
- Modify update_user_avatar endpoint to throw ServerError (we can't just kill keyserver because we want to make sure the alert is triggered by the update_user_avatar-specific codepath which we modified).
- Try to set a user image avatar via "Camera" flow
- Ensure that I see expected Alert.
Also, make sure the "happy case" (unmodified update_user_avatar endpoint) continues working as expected).
Reviewers: ashoat, ginsu, rohan
Reviewed By: ashoat
Subscribers: tomek
Differential Revision: https://phab.comm.dev/D8339